elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ejecutar shellcode en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ejecutar shellcode en C  (Leído 1,295 veces)
mester

Desconectado Desconectado

Mensajes: 219


https://www.youtube.com/watch?v=IlY9C6pzxKc


Ver Perfil WWW
Ejecutar shellcode en C
« 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.


En línea

Justicia es dar a cada uno lo que se merece
ivancea96


Desconectado Desconectado

Mensajes: 3.414


ASMático


Ver Perfil WWW
Re: Ejecutar shellcode en C
« Respuesta #1 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.


En línea

Borito30


Desconectado Desconectado

Mensajes: 481


Ver Perfil
Re: Ejecutar shellcode en C
« Respuesta #2 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?
En línea

Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)
integeroverflow

Desconectado Desconectado

Mensajes: 60


Ver Perfil
Re: Ejecutar shellcode en C
« Respuesta #3 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?
« Última modificación: 4 Marzo 2017, 13:53 pm por integeroverflow » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
como ejecutar programa en memoria sin ejecutar el archivo « 1 2 »
Programación Visual Basic
Sai-To 13 8,802 Último mensaje 25 Mayo 2008, 18:14 pm
por Sai-To
.:. Shellcode 2 ASM .:. « 1 2 »
ASM
Garfield07 13 6,834 Último mensaje 3 Enero 2011, 20:31 pm
por Garfield07
[Duda] Explotando BoF - No conseguimos ejecutar la shellcode
Hacking
GoKGz 0 864 Último mensaje 11 Diciembre 2016, 00:06 am
por GoKGz
Shellcode to HEX (BOF)
ASM
GGZ 5 3,680 Último mensaje 28 Enero 2017, 20:49 pm
por cpu2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines