Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Percontex en 8 Abril 2012, 08:25 am



Título: Es posible crear una shellcode a partir de un binario programado en C?
Publicado por: Percontex en 8 Abril 2012, 08:25 am
A partir de este link:

http://es.wikipedia.org/wiki/Shellcode

Dan como ejemplo este código en C:

Código:
#include <stdio.h>

int main() {
   char *scode[2];
   scode[0] = "/bin/sh";
   scode[1] = NULL;
   execve (scode[0], scode, NULL);
}

Luego del debug de únicamente la funcion main se tiene esto:

Código:
 80483a4:       55                      push   %ebp
 80483a5:       89 e5                   mov    %esp,%ebp
 80483a7:       83 e4 f0                and    $0xfffffff0,%esp
 80483aa:       83 ec 20                sub    $0x20,%esp
 80483ad:       c7 44 24 18 a0 84 04    movl   $0x80484a0,0x18(%esp)
 80483b4:       08
 80483b5:       c7 44 24 1c 00 00 00    movl   $0x0,0x1c(%esp)
 80483bc:       00
 80483bd:       8b 44 24 18             mov    0x18(%esp),%eax
 80483c1:       c7 44 24 08 00 00 00    movl   $0x0,0x8(%esp)
 80483c8:       00
 80483c9:       8d 54 24 18             lea    0x18(%esp),%edx
 80483cd:       89 54 24 04             mov    %edx,0x4(%esp)
 80483d1:       89 04 24                mov    %eax,(%esp)
 80483d4:       e8 ff fe ff ff          call   80482d8 <execve@plt>
 80483d9:       c9                      leave  
 80483da:       c3                      ret    
 80483db:       90                      nop    

Y por último al "extraer" la shellcode queda así:

Código:
\x55\x89\xe5\x83\xe4\xf0\x83\xec\x20\xc7\x44\x24\x18\xa8\xf3\x0a\x08\xc7\x44\x24\x1c\x00\x00\x00\x00\x8b\x44\x24\x18\xc7\x44\x24\x08\x00\x00\x0\x00\x8d\x54\x24\x18\x89\x54\x24\x04\x89\x04\x24\xe8\x1b\xac\x00\x00\xc9\xc3\x90

Y al agregarla a algún script en C para compilar y probarla:

Código:
// shellcode.c 
// compilar con gcc shellcode.c -o shellcode
void main()
{
((void(*)(void))
{
"\x55\x89\xe5\x83\xe4\xf0\x83\xec\x20\xc7"
"\x44\x24\x18\xa8\xf3\x0a\x08\xc7\x44\x24"
"\x1c\x00\x00\x00\x00\x8b\x44\x24\x18\xc7"
"\x44\x24\x08\x00\x00\x00\x00\x8d\x54\x24"
"\x18\x89\x54\x24\x04\x89\x04\x24\xe8\x1b"
"\xac\x00\x00\xc9\xc3\x90"
}
)();
}

Al momento de hacer ./shellcode arroja una violación de segmento y no se ejecuta sh :(

Al menos en la Wikipedia parece permitir la posibilidad de crear una shellcode desde un binario programado en C, pero leyendo otra documentación me parece que únicamente se logra crear en lenguajes de bajo nivel como asm.

Entonces amigos, es posible crear una shellcode desde un programa binario en C?, o únicamente se pude obtener de archivos asm?


Título: Re: Es posible crear una shellcode a partir de un binario programado en C?
Publicado por: Sagrini en 8 Abril 2012, 15:22 pm
No es posible hacerlo directamente, ya que una shellcode no puede contener bytes nulos (y el binario tiene muchísimos). La idea es escribir en ensamblador una a una todas las líneas que ejecutan la shellcode.


Título: Re: Es posible crear una shellcode a partir de un binario programado en C?
Publicado por: Percontex en 9 Abril 2012, 01:52 am
No es posible hacerlo directamente, ya que una shellcode no puede contener bytes nulos (y el binario tiene muchísimos). La idea es escribir en ensamblador una a una todas las líneas que ejecutan la shellcode.

Eso me temía, bueno tocará comenzar a estudiar a fondo ensamblador :)