Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mester en 3 Marzo 2017, 16:01 pm



Título: Ejecutar shellcode en C
Publicado por: mester en 3 Marzo 2017, 16:01 pm
Hola.

Estoy intentando ejecutar una shellcode que genero con el programa xxd de esta manera:
Código:
xxd -i executable >> some.c

Una vez tengo la shell generada en el fichero some.c intento ejecutarlo de esta manera:
Código:
unsigned char shell[] = { ... };

void (*sh)();

sh = (void (*)())shell;
(void)(*sh)();

Al compilar el programa no da ningún error. Cuando lo ejecuto me da violacion de segmento.

También he probado cargando en memoria el programa de esta manera:
Código:
void *f = mmap ( 0, sizeof ( shell ), PROT_READ|PROT_WRITE|PROT_EXEC,
                               MAP_PRIVATE|MAP_ANON, -1, 0 );

memcpy ( f, shell, sizeof ( shell );

void (*sh)() = (void (*)())f;
(void)(*sh)();

Y me pasa lo mismo xd. ¿Cómo puedo ejecutar codigo en hexadecimal en C? Es decir, lo que viene a ser coger el codigo en lenguaje máquina codificado en hex y ejecutarlo en otro programa en C.

Yo creo que lo que tengo que hacer es cargarlo en memoria y ejecutar esa posicion de memoria, pero no sé qué hago mal en este proceso ni el por qué de la violación de segmento.

Gracias de antemano.


Título: Re: Ejecutar shellcode en C
Publicado por: ivancea96 en 3 Marzo 2017, 17:28 pm
¿Cómo generaste el executable? Estás llamando a una función, así que tiene que ser una función. No vale un executable en formato ELF.


Título: Re: Ejecutar shellcode en C
Publicado por: Borito30 en 3 Marzo 2017, 19:12 pm
La mejor manera de inyectar código es usando el ataque AtomBombing es practicamente indetectable para la mayoría de antivirus. Pero también es valido cargar un shellcode memoria o usar un código cave. Por cierto no comprendo muy bien el código cave es lo mismo que una inyeccion de código o es algo diferente? Esque no comprendo muy bien que deferencia hay entre un código cave o inyectar código basicamente son lo mismo o estoy equivocado?


Título: Re: Ejecutar shellcode en C
Publicado por: integeroverflow en 4 Marzo 2017, 13:51 pm
Hola.

Estoy intentando ejecutar una shellcode que genero con el programa xxd de esta manera:
Código:
xxd -i executable >> some.c

Una vez tengo la shell generada en el fichero some.c intento ejecutarlo de esta manera:
Código:
unsigned char shell[] = { ... };

void (*sh)();

sh = (void (*)())shell;
(void)(*sh)();

Al compilar el programa no da ningún error. Cuando lo ejecuto me da violacion de segmento.

También he probado cargando en memoria el programa de esta manera:
Código:
void *f = mmap ( 0, sizeof ( shell ), PROT_READ|PROT_WRITE|PROT_EXEC,
                               MAP_PRIVATE|MAP_ANON, -1, 0 );

memcpy ( f, shell, sizeof ( shell );

void (*sh)() = (void (*)())f;
(void)(*sh)();

Y me pasa lo mismo xd. ¿Cómo puedo ejecutar codigo en hexadecimal en C? Es decir, lo que viene a ser coger el codigo en lenguaje máquina codificado en hex y ejecutarlo en otro programa en C.

Yo creo que lo que tengo que hacer es cargarlo en memoria y ejecutar esa posicion de memoria, pero no sé qué hago mal en este proceso ni el por qué de la violación de segmento.

Gracias de antemano.

eso sucede porque el compilador proteje por defecto la stack para que no sea ejecutable en caso de buffers overflow, etc...

compila con las siguientes flags:

 gcc ejecutar-shellcode.c -o ejecutar-shellcode -fno-stack-protector -x execstack

EDIT: tambien puede ser que tu shellcode contenga instrucciones invalidas, podrias mostrar el codigo asm del shellcode y como lo extraes?