рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЯреНрд░реВ рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рдЕрд╕реЗрдореНрдмрд▓рд░ рд╡реЗрдм рд╕рд░реНрд╡рд░

рд╢реБрдн рджреЛрдкрд╣рд░, рд╣рдмреНрд░!
рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ acme рдкрд░ рдЕрдкрдирд╛ рдЕрд╕рд▓реА рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВред

рдореБрдЭреЗ рддреБрд░рдВрдд рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдЬреИрд╕реЗ рдХрд┐ libcред рдФрд░ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХрд░реНрдиреЗрд▓ рд╣рдореЗрдВ рдХреНрдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЗрд╡рд▓ рдЖрд▓рд╕реА рдиреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рд▓реЗрдЦ рдирд╣реАрдВ рд▓рд┐рдЦреЗ рдереЗ - рдкрд░реНрд▓ рдкрд░ рд╕рд░реНрд╡рд░, рдиреЛрдб.рдЬреЗрдПрд╕, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдкреАрдПрдЪрдкреА рдХреЗ рд▓рд┐рдП рднреА рдкреНрд░рдпрд╛рд╕ рдереЗред

рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдЕрднреА рддрдХ рдЕрд╕реЗрдВрдмрд▓рд░ рдирд╣реАрдВ рдЖрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рднрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдереЛрдбрд╝рд╛ рдЗрддрд┐рд╣рд╛рд╕


рдПрдХ рдмрд╛рд░ рдЬрдм рдореБрдЭреЗ рдЫреЛрдЯреА рдлрд╝рд╛рдЗрд▓реЛрдВ (1 рдХреЗрдмреА рд╕реЗ рдХрдо) рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдереЗ, рдореИрдВ рдПрдХреНрд╕ 3 рдХреЗ рд▓рд┐рдП рдбрд░рддрд╛ рдерд╛, рдФрд░ рдореИрдВрдиреЗ рдЗрди рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рдмрдбрд╝реЗ рд╕реНрдЯреЛрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдФрд░ рдЗрд╕реЗ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдСрдлрд╕реЗрдЯ рдФрд░ рд▓рдВрдмрд╛рдИ рдХреЛ рдЧреЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ред рдлрд╝рд╛рдЗрд▓ рд╣реА рд╣реЗрдХреНрд╕ рд░реВрдк рдореЗрдВред

рд╕рдордп рд╕рднреНрдп рдерд╛, рдореИрдВрдиреЗ рдереЛрдбрд╝рд╛ рдмрд┐рдЧрд╛рдбрд╝рдиреЗ рдФрд░ рдПрдХрдореЗ рдкрд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ


рд╣рдо FASM рдкрд░ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ, рдФрд░ рдореИрдВ рдЗрдВрдЯреЗрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рддреЛ, рдпреЛрдЧрд┐рдиреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛:

format elf executable 3 entry _start segment readable writeable executable 


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреБрдЫ рд╢реАрд░реНрд╖рдХ рдбреЗрдЯрд╛ рд╣реИрдВ:

 HTTP200 db "HTTP/1.1 200 OK", 0xD,0xA ; CTYPE db "Content-Type: application/octet-stream", 0xD,0xA ; CNAME db 'Content-Disposition: attachment; filename="BIGTABLE"',0xD,0xA,0xD,0xA ; SERVER db 'Server: Kylie',0xD,0xA ; KeepClose db 'Connection: close',0xD,0xA,0xD,0xA ;    sendfile off_set dd 0x00 n_bytes dd 0x00 


рдФрд░ рд╕рдмрд╕реЗ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде рднреА рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдЪрд┐рддреНрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ:

 FILE1 db "/home/andrew/FILE.FBF",0 


рд╣рдо рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕реНрдерд┐рд░рд╛рдВрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 IPPROTO_TCP equ 0x06 SOCK_STREAM equ 0x01 PF_INET equ 0x02 AF_INET equ 0x02 


рдЪрд▓реЛ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдЕрдиреБрд╡рд╛рдж рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╣реЗрдХреНрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ

 include 'str2hex.asm' 


рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рд░рд▓ рд╣реИ:

рд╣рдо google.com.ua "ASCI рдЯреЗрдмрд▓" рдореЗрдВ рд╣рдереМрдбрд╝рд╛ рдорд╛рд░рддреЗ рд╣реИрдВ, - рдЗрд╕реЗ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ, рдФрд░ рдЗрд╕реЗ рджреЗрдЦреЗрдВ ...
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ ASCII рдореЗрдВ 0 - 9 рд╕реЗ рдорд╛рди 30h рд╕реЗ 39h рдХреЗ рдорд╛рди рд╣реИрдВ

рдФрд░ рдП рд╕реЗ рдПрдл рддрдХ рдХреЗ рдорд╛рди 41h рд╕реЗ 46h рддрдХ рд╣реИрдВ

рдореИрдХреНрд░реЛ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдПрд╕рдИрдЖрдИ рдореЗрдВ рдмрдлрд░ рдХрд╛ рдкрддрд╛ рд╣реИ (рдЗрд╕ рдкрддреЗ рдкрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдЬрд┐рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рд╣реЗрдХреНрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)
рдореИрдХреНрд░реЛ рдХреЗрд╡рд▓ рдЪрд░рд┐рддреНрд░ рдХреЗ ASCII рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдпрд╣ 39h рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рд╣рдо рдП - рдПрдл рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдпрд╣ рдЙрд╕рд╕реЗ рдХрдо рдпрд╛ рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ 0 рд╕реЗ - 9 рддрдХ

рдпрд╣рд╛рдБ рдЗрд╕рдХрд╛ рдкреВрд░рд╛ рдХреЛрдб рд╣реИ:
 ; esi,-    id  : ; eax -   Macro STR2HEX4 { local str2hex,bin2hex, out_buff, func, result, nohex ; //     (  9 (.. A..F)  ) cld ;//   (  ) mov edi,out_buff ; jmp func ;//    str2hex: cmp al,39h jle nohex sub al,07h nohex: sub al,30h ret out_buff dd 0x00 func: ; //   4  (32 ) mov ecx,4 bin2hex: lodsb ;//    call str2hex ;//   ASCII    shl al,4 ; //   4 (   4 ) mov bl,al ; //    bl lodsb ; //   call str2hex ; //  (   4 ) xor al,bl ; //      ; //  ,   AL        stosb ; //    edi    sub ecx,1 ; //    1 jecxz result ;   ecx != 0 jmp bin2hex ; result: ;//        eax xor eax,eax cld mov esi,out_buff lodsb shl eax,8 lodsb shl eax,8 lodsb shl eax,8 lodsb ;   -   eax } 


рдкреБрдирд╢реНрдЪ рд╕рдорд╛рд░реЛрд╣ рддреНрд░реБрдЯрд┐ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рд╕реЗ рд░рд╣рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЖрдХрд╛рд░-рдСрдлрд╕реЗрдЯ рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗрд╕-рд╕рдВрд╡реЗрджреА рд╣реИрдВред рдпрд╣ рд╣реИ, рдП! = рдП, рдмреА =! рдмреА, рдЖрджрд┐)ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдзрд┐рдХрддрдо рдЖрдХрд╛рд░ рдФрд░ рдЕрдзрд┐рдХрддрдо рдСрдлрд╕реЗрдЯ = 32 рдмрд┐рдЯреНрд╕ред

рд╕рдордЭрд╛, рдкрд░ рдЪрд▓рд╛ рдЧрдпрд╛:
рдЕрдм рдЖрдЦрд┐рд░рдХрд╛рд░ рд╕реЙрдХреЗрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ

 ; //     push IPPROTO_TCP ; IPPROTO_TCP (=6) push SOCK_STREAM ; SOCK_STREAM (=1) push PF_INET ; PF_INET (=2) ;socketcall mov eax, 102 ; //  102 (  ) mov ebx, 1 ; // 1      mov ecx, esp ; //       int 0x80 mov edi,eax ; //    edi, ..     cmp eax, -1 je near errn ; //    


рд╕реЙрдХреЗрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕реЗ 0.0.0.0 рдкрддреЗ рдкрд░ рдмрд╛рдБрдзреЗрдВ (рдЖрдо рд▓реЛрдЧреЛрдВ рдореЗрдВ - INADDR_ANY) рдФрд░ рдкреЛрд░реНрдЯ 8080 (рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП lighttpd 80 рдореА рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд░ рдореИрдВ 80 рд╡реЗрдВ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реВрдВ, рддреЛ 0 рдИрдЖрд░рдПрдХреНрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ рдФрд░ -EADDRINUSE рддреНрд░реБрдЯрд┐ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдШрдЯрд┐рдд рд╣реЛрдЧреА) рдмрдВрджрд░рдЧрд╛рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдмреНрдЬрд╛ рд╣реИ)

 ; binding push 16 ; socklen_t addrlen push ecx ; const struct sockaddr *my_addr push edi ; int sockfd mov eax, 102 ; socketcall() syscall mov ebx, 2 ; bind() = int call 2 mov ecx, esp ; //  int 0x80 cmp eax, 0 jne near errn ;//    (   ...) 


рд╡реИрд╕реЗ, INADDR_ANY рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдпрджрд┐ рдЖрдк рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ "рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд" рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╛рдиреА
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ = 127.0.0.1 = 0x0100007F
habrahabr.ru = 212.24.43.44 = 2C2B18D4

рд╡рд╣реА рдкреЛрд░реНрдЯ рдирдВрдмрд░ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ:

8080 = 901 рдПрдлрдПрдЪ
25 = 1900 рд╣

рдмреЗрд╢рдХ, рдЖрдИрдкреА рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреБрдЫ рднреА рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдбреАрдмреА 127,0,0,1
habrahabr.ru db 212,24,43,44

рдЖрджрд┐

рдЦреИрд░, рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдо рдирдП рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЙрдХреЗрдЯ рдХреЛ рд╕реБрдирдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

  push 1 ;// int backlog push edi ;// int sockfd pop esi push edi mov eax, 102 ; // syscall mov ebx, 4 ;//      (listen) mov ecx, esp ; //     int 0x80 


рдЕрдм рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБред рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рдлрд┐рд░ рдЕрднрд┐рднрд╛рд╡рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд╛рдВрдЯреЗ рдХреЗ рдмрд╛рдж рдмрдЪреНрдЪреЗ рд╕реЗ рд╡рд╛рдкрд╕реА рдХреЛрдб рдХреА рдЙрдореНрдореАрдж рд╣реЛрдЧреА, рдФрд░ рдЬрдм рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧреА, рддреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдпрд╣ рд╕реЛрдЪреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рд▓рд╛рд╢ рдирд┐рдХрд▓рддреА рд╣реИред рдпрджрд┐ рд╣рдо рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЗрди рд╕рдВрдХреЗрддреЛрдВ рдХреА рдЕрдирджреЗрдЦреА рдХрд░реЗрдВрдЧреЗ, рддреЛ рдХреЛрдИ рднреА рдХрд┐рд╕реА рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдФрд░ рд▓рд╛рд╢ рднреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдЧреА:

  mov eax,48 mov ebx,17 mov ecx,1 ; SIG_IGN int 0x80 


рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдПрдВ рдФрд░ рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ:
 push 0x00 push 0x00 ; struct sockaddr *addr push edi ; int sockfd sock_accept: mov eax, 102 ; socketcall() syscall mov ebx, 5 ; accept() = int call 5 mov ecx, esp int 0x80 ; //   : cmp eax, -1 je near errn mov edi, eax ;   edi   mov [c_accept],eax 


рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдереА рдФрд░ рд╣рдо рдХреЛрдб рдХреЗ рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдП, рддреЛ рдПрдХ рдирдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ

рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдПрдБ:

 mov eax,2 ; //   sys_fork() int 0x80 cmp eax,0 jl exit ; if error 


рдЕрдм рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдо рдпрд╣рд╛рдВ рдХреМрди рд╣реИрдВ, рдХрд╛рдВрдЯрд╛ рдпрд╛ рдореВрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛:

 test eax,eax jnz fork ;       ( ) ; edi - accept descriptor ; //           mov eax, 6 ; close() syscall mov ebx, edi ; The socket descriptor int 0x80 ; Call the kernel jmp sock_accept fork: ;//  -    


рд╡рд╣ рд╕рдм рд╣реИ! рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдХрд╛ "рд╣реЗрдб" рддреИрдпрд╛рд░ рд╣реИред

рдЗрд╕рдХреЗ рдмрд╛рдж рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреЛрдб рдЖрддрд╛ рд╣реИред

рд╣рдо рдЧреНрд░рд╛рд╣рдХ рдХреЛ 200 рдУрдХреЗ рдХреА рд╕реНрдерд┐рддрд┐ рднреЗрдЬреЗрдВрдЧреЗ
  mov eax, 4 ; write() syscall mov ebx, edi ; sockfd mov ecx, HTTP200 ; Send 200 Ok mov edx, 17 ; 17 characters in length int 0x80 ; 


рд╕рд╛рде рд╣реА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдкреНрд░рдХрд╛рд░ред "рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдСрдХреНрдЯреЗрдЯ-рд╕реНрдЯреНрд░реАрдо" - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдмрд╕реЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реИ

  mov eax, 4 ; write() syscall mov ebx, edi ; sockfd mov ecx, CTYPE ; Content-type - 'application/octet-stream' mov edx, 40 ; 40 characters in length int 0x80 ; Call the kernel 


рд╕рд░реНрд╡рд░ рдХрд╛ рдирд╛рдо:
  mov eax, 4 ; write() syscall mov ebx, edi ; sockfd mov ecx, SERVER ; our string to send mov edx, 15 ; 15 characters in length int 0x80 ; Call the kernel 


рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░рд╛ рд╕рд░реНрд╡рд░ рдЕрднреА рддрдХ рдХреАрдк-рдЕрд▓рд╛рдЗрд╡ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:
  mov eax, 4 ; write() syscall mov ebx, edi ; sockfd mov ecx, KeepClose ; Connection: Close mov edx, 21 ; 21 characters in length int 0x80 ; Call the kernel 


рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдЕрдВрдд рдореЗрдВ рджреЛ рдмрд╛рд░ 0xD 0xA рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рд╣рдордиреЗ рдХрдиреЗрдХреНрд╢рди рднреЗрдЬрдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рде рдХрд┐рдпрд╛ рдерд╛: рдмрдВрдж рдХрд░реЗрдВ) рдФрд░ рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣реЗрдбрд░ рдЦрддреНрдо рд╣реЛ рдЧрдП рд╣реИрдВ

рдЦреИрд░, рдЕрдм рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрддрд╛ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдХреМрди рд╕реА рдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрдлрд░ рдореЗрдВ рдмрд╛рдИрдВ рдУрд░ 5 рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╢рд┐рдлреНрдЯ рдХреЗ рд╕рд╛рде рдЬреАрдИрдЯреА рдЕрдиреБрд░реЛрдз рдбрд╛рд▓реЗрдВ, рдЬрд┐рд╕рд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА ('рдЬреАрдИрдЯреА /') рдХреЛ рдЯреНрд░рд┐рдо рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдП, рдЬрд┐рд╕рд╕реЗ рдЖрдХрд╛рд░ рдореЗрдВ рдХреЗрд╡рд▓ 16 рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд╛рдл рдЖрдИрдбреА рдирд┐рдХрд▓ рдЬрд╛рдПрдЧреАред

рдЕрд░реЗ рд╣рд╛рдБ, рдореИрдВ рдЖрдИрдбреА, рдЖрдИрдбреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реВрдБ ... рдФрд░ рд╡рд╣ рдХреНрдпрд╛ рдкрд╕рдВрдж рд╣реИ? рдореИрдВрдиреЗ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдСрдлрд╕реЗрдЯ рдХреЗ рд▓рд┐рдП GET рдХреЛ 32-рдмрд┐рдЯ рдорд╛рди рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рдХреЗ рд╕рдм рдХреБрдЫ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдФрд░ рдЗрд╕рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд░рд╛рдмрд░ 32-рдмрд┐рдЯ рдорд╛рдиред

рдпрд╛рдиреА рдпрджрд┐ url рдЕрдиреБрд░реЛрдз рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

127.0.0.1/00003F480000FFFF

рд╡рд╣ рдлрд╝рд╛рдЗрд▓ рдСрдлрд╝рд╕реЗрдЯ 00003F48 рд╣реИ рдФрд░ рдЕрдиреБрд░реЛрдзрд┐рдд рдбреЗрдЯрд╛ рдХрд╛ рдЖрдХрд╛рд░ 0000FFFF рд╣реИ

 mov esi,buffer ; //      id ( STR2HEX) push edi ;  edi ..    STR2HEX4 ;      esi pop edi ;  edi mov [off_set],eax ; //     eax,     


рдЕрдм рд╣рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдСрдлрд╕реЗрдЯ рдкрд░ рд╣реЛрдЧреА:

рдЕрдм рдмрд╕ рдЗрд╕реЗ рдЦреЛрд▓реЗрдВ (рд╣реИрдВрдбрд▓ рдИрдЖрд░рдПрдХреНрд╕ рдореЗрдВ рд╕реЗрд╡ рд╣реЛ рдЬрд╛рдПрдЧрд╛):

 ; Open BIG file mov eax,5 mov ebx,FILE1 mov ecx, 2 int 0x80 


рдЕрдм, рдкреВрд░реНрдг рд╕рдВрддреБрд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реЗрдВрдбрдлрд╛рдЗрд▓ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдирд┐рдпрдорд╛рд╡рд▓реА рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ:

рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЙрдкреА рдХрд░реНрдиреЗрд▓ рдХреЗ рднреАрддрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реЗрдВрдбрдлрд╛рдЗрд▓ () рд░реАрдб (2) рдФрд░ рд░рд╛рдЗрдЯ (2) рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рд╕реЗ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


 ; Send [n_bytes] from BIGTABLE starting at [off_set] send_file: mov ecx,eax ; file descriptor from previous function mov eax,187 mov ebx,edi ; socket mov edx,off_set ; pointer mov esi,[n_bytes] ; int 0x80 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдИрдЧрд▓ рд╕реЗ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ рдЗрдВрдЯрд░рдлрд╛рдЗрд▓ рд░рдЬрд┐рд╕реНрдЯрд░ / рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдмрд┐рдирд╛ рд╕реЗрдВрдбрдлрд╛рдЗрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХреНрдЬреИрдХ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╕рдлрд▓рддрд╛

рдпрд╣рд╛рдВ, рдПрдХ рд╕рдордп рдкрд░, рдореИрдВ рд░рд╛рдд рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд╣реАрдВ рд╕реЛрддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рдерд╛ рдХрд┐ рд╕рднреА рдмрд╛рдЗрдЯреНрд╕ рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдлрд╝рд╛рдЗрд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдкреВрд░реНрдг рдбрд╛рдЙрдирд▓реЛрдб рд╕реЗ рдПрдХ рд╕реЗрдХрдВрдб рдкрд╣рд▓реЗ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ "рдиреЗрдЯрд╡рд░реНрдХ рддреНрд░реБрдЯрд┐" рд▓рд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рд╣реЗрдЬрддрд╛ рдирд╣реАрдВ рд╣реИред Sendfile рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдереА, рдореБрдЭреЗ рд╕реАрдЦрдирд╛ рдерд╛ рдХрд┐ рдХреНрд░реЛрдо рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХ рд╣реЗрдбрд░ рднреЗрдЬрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рд░реНрд╡рд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдбреЗрдЯрд╛ рдХреНрдпрд╛ рд╣реИ, рдпрд╣ рдЕрднреА рднреА / dev / null рдХреЛ рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдЗрд╕реЗ рдкрдврд╝реЗред рдЕрдиреНрдпрдерд╛, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдЧрд╛ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИред рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП 100% рдЕрдЬреНрдЮрд╛рдд рд╣реИред рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣реЗрдбрд░ рдореЗрдВ рдХрдВрдЯреЗрдВрдЯ-рд▓реЗрдВрде рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг рд╣реИ, рдЬрдм рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рддрдирд╛ рдбреЗрдЯрд╛ рдирд╣реАрдВ рдкрддрд╛ рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ рдЕрдЧрд░ рдХреЛрдИ рд░рд╣рд╕реНрдп рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдЧрд╛)))

рдЗрд╕рд▓рд┐рдП, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣реЗрдбрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ:
рд╣рдо рдПрдбрд┐ рдореЗрдВ рдПрдбреНрд░реЗрд╕ рд╕реЗ, рдПрдбреНрд░реЗрд╕ рдмрдлрд░ рддрдХ рдкрдврд╝рддреЗ рд╣реИрдВ

 ; Read the header mov eax,3 mov ebx,edi mov ecx,buffer mov edx,1024 int 0x80 


рдпрджрд┐ рд╣реЗрдбрд░ рдмрд╣реБрдд рдмрдбрд╝реЗ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ 1024 рдмрд╛рдЗрдЯреНрд╕ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ
(рдпрджрд┐ рдЖрдк рдЗрд╕ рдбреЛрдореЗрди, рдЖрджрд┐ рдкрд░ рд▓рдВрдмреА рдХреБрдХреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)

рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рдФрд░ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛:
  mov eax, 6 ; close() syscall mov ebx, edi ; The socket descriptor int 0x80 ; Call the kernel ; end to pcntl_fork () mov eax,1 xor ebx,ebx int 0x80 


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреИрд░реЗрдВрдЯ рдореЗрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕рдордп рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдлреЛрд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред

рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд!
рдХреЛрдИ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВ!

рд░реВрдЯ @ рд╕рд░реНрд╡рд░: / рд╣реЛрдо / andrew # ldd рд╕рд░реНрд╡рд░
рдЧрддрд┐рд╢реАрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ


рдбрд╛рдЙрдирд▓реЛрдб рд▓рд┐рдВрдХ (рдЖрдк рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдПрдмреА рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ)))
http://ubuntuone.com/3yNexPG0yewlGnjNd6219W

PS рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рд╕реА рддреНрд░реБрдЯрд┐ рдЬрд╛рдБрдЪ рдЫреВрдЯ рдЧрдИ, рдХреЛрдб рдХреЗ рдХреБрдЫ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рднреА рд╕реНрдЯреИрдХ рд╕рд╛рдлрд╝ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреБрдЫ рдЪрд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд▓реЗрдЦрди рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг), рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреЛрдб рд╕рдмрд╕реЗ рд╕рд╛рдл "рд╣реЛрдиреЗ рдХрд╛ рдирд╛рдЯрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред"

рд╕рд░реНрд╡рд░ рдорд▓реНрдЯреА-рдХреЛрд░ рд╕рд┐рд╕реНрдЯрдо (рдХреЛрд░ I7 2600 рдкрд░ рдкрд░реАрдХреНрд╖рдг) рдкрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд▓рдЧрднрдЧ 4 рдмрд╛рд░ рддрдХ рдореЗрд░реЗ рд╕рд░реНрд╡рд░ рдкрд░ lighttpd рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ lighttpd рдХреЛ рдХреЗрд╡рд▓ рдорд▓реНрдЯреАрдХреЛрд░ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЬрд▓реНрджреА рд╕реЗ рдХреНрдпрд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рдЦреИрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП cgi (php, perl, python), рдЖрджрд┐ред рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд░реАрдб рдХреЛ рдирд┐рдХрд╛рд▓рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ, рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╡рд░реНрдЪреБрдЕрд▓ рд╣реЛрд╕реНрдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рд▓рд┐рдЦрдирд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рдХреЗрд╡рд▓ рдЖрдкрдХреА рдХрд▓реНрдкрдирд╛ рд╕реЗ рд╕реАрдорд┐рдд рд╣реЛрддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In188114/


All Articles