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


 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  Pregunta sobre como detectar overflows en librerias dll
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Pregunta sobre como detectar overflows en librerias dll  (Leído 8,947 veces)
nitr0us

Desconectado Desconectado

Mensajes: 208


#rm -fr /


Ver Perfil WWW
Pregunta sobre como detectar overflows en librerias dll
« en: 19 Julio 2003, 20:39 »

bUENAZ.

Por lo que he visto y escuchado de overflows en librerias .dll en windows, COMO LAS DETECTAN, por ejemplo ese famoso bug del WebDav ya que en la librería ntdll.dll (algo así, no recuerdo el nombre)  se puede generar un buffer overflow.

Otro ejemplo es uno de unas etiquetas en HTML que usaba un archivo .dll que crasheaba al Internet Explorer, en el código de la página html ponias (mas o menos así):

<input type crash> (sin el signo = entre el type y crash), y pues al ejecutar la página HTML aparecía un inche mensaje de error "... IEXPLORER ha fallado... bla bla bla en los módulos bla bla bla"

Bueno, hace un rato estaba navegando y de repente un error, le dí click en detalles y me apareció esto:

IEXPLORE provocó un error de página no válida en el
módulo <desconocido> de 0000:f70c75ff.
Registros:
EAX=7612f651 CS=016f EIP=f70c75ff EFLGS=00010212
EBX=00000000 SS=0177 ESP=01d4f608 EBP=01d4f620
ECX=004b9094 DS=0177 ESI=00000000 FS=4e47
EDX=00000020 ES=0177 EDI=01e19364 GS=0f86
Bytes en CS:EIP:

Volcado de pila:
,08x ,08x ,08x ,08x ,08x ,08x ,08x ,08x ,08x ,08x ,08x ,08x ,08x ,08x ,08x ,08x

Bien, por lo visto es un overflow por el final (volcado de pila)... y todos esos 08x.. que me dicen. Al principio pues me dice en que dirección de memeria está el error: f70c75ff (creo que es la dirección de memoria, corrijanme please).

Los registros están en ASM (ENSABLADOR)... bla bla... bien, a lo que voy es... "EL INTERNET EXPLORER TIENE MUCHAS DEPENDENCIAS, HACE USO DE MUCHAS LIBRERIAS *.DLL (COMO MUCHOS PROGRAMAS DE WINDOWS), PERO POR EJEMPLO, COMO HACEN PARA DETECTAR CUAL DE TODAS LAS LIBRERIAS ES LA QUE SE PUEDE EXPLORAR, .. SI EXISTE UN OVERFLOW, COMO SABEN SI SE PUEDE O NO EXPLOTAR LOCAL O REMOTAMENTE...????... O.K.... PIENSO QUE UTILIZAN DESASSAMBLERS... EDITORES HEXADECIMAL Y ENSAMBLADOR, DEBUGGERS....

PERO BIEN, HE VISTO PROGRAMAS EN C o C++ QUE DICEN QUE SON VULNERABLES ETC (LA MAYORIA QUE HE VISTO SON PROGRAMAS EN LINUX), Y SU CORRESPONDIENTE EXPLOIT PARA LANZARLO DESDE LINUX, PERO PARA HACER EL EXPLOIT, SE NECESITA SABER DONDE .. COMO SE EJECUTA UN OVERFLOW PARA ASÍ EXPLOTAR EL SISTEMA, PERO EN WINDOWS, COMO VEO EL CÓDIGO FUENTE O EN QUE ESTÁN PROGRAMADOS LAS LIBRERIAS .DLL, COMO PUEDO VER SI SON O NO EXPLOTABLES, O SEA, PARA VER EL CODIGO NECESITO A FUERZA VERLO DESDE HEXADECIMAL Y/O ENSAMBLADOR O EXISTE ALGÚN DEBUGGER PARA ESTOS ARCHIVOS.

sALU2... espero se entiendan todas las preguntas

Bien
En línea

Rojodos
Colaborador
***
Desconectado Desconectado

Mensajes: 3.535



Ver Perfil WWW
Re: Pregunta sobre como detectar overflows en librerias dll
« Respuesta #1 en: 20 Julio 2003, 13:01 »

Es un tema que da mucho jugo y en el que me estoy metiendo profundamente :).

Aver, por partes.

Ese oveflow de IE, es porque ha tratado de ejecutar lo que hay en esa direccion (fijate que el EIP marca esa direccion...)

El volcado de pila es LO QUE HABIA en la pila (stack) justo en el SIGSEGV, 0x08 es --> 8 (HEX) . La pila estaba llena de 8s... :S. Simplemente te lo vuelca en la pantalla, no significa que esto sea un overflow de pila.

Un overflow de pila (stack overflow) se caracteriza porque sobreescribes un buffer que acaba sobreescribiendo la EIP (el puntero de instrucciones a ejecutar por el micro), con lo que puedes mandar al programa EJECUTAR lo que tu kieras (relativamente) con LOS PERMISOS DE ESE PROGRAMA.

Lo de Local o Remoto, es dependiendo de lo que explotes. Si es un servidor web, al que puede acceder todo el mundo (para ver su web), es mas que posible que sea explotable remotamente. Si es la calculadora de windows, pos era localmente.

Para descubrir overflows, lo mas facil es pasarle argumentos a los programas ENORMES, llenos de AAAAAAAAAAAs (A --> Hex --> 0x41)

Si te sale un error, diciendo que la IP ha tratado de ejecutar la direccion 0x41414141, ES UN OVERFLOW DE PILA!!!! Tus argumentos han sobreescrito la EIP, y has ganado el control de programa.

En windows, hay que guiarse por los desambladores y por pruebas.

En linux es muy usual que el codigo sea abierto, con lo que solo hay que buscar funciones vulnerables.

Mira, para mas informacion, visita los manuales de esta web (www.elhacker.net) y sino, mira la documentacion de www.undersec.com

Salu2

En línea

nitr0us

Desconectado Desconectado

Mensajes: 208


#rm -fr /


Ver Perfil WWW
Re: Pregunta sobre como detectar overflows en librerias dll
« Respuesta #2 en: 22 Julio 2003, 12:10 »

Muy claro BRUJO.. gracias.. pero y bien, digamos que he podido sobreescribir en EIP.... y pues hago pruebas y todo y ya se el tamaño del buffer, o sea.. para que en EIP ponga la dirección de memoria.

Si en EIP apunta a la dirección de memoria de la próxima sentecia o ejecución tengo el control, y digamos que quiero ejecutar una SHELLCODE que me de CMD.EXE mm localmente..... la shellcode la compilo y ejecuto primero ??? y una vez ejecutada, como se la dirección de memoria para que la apunte desde EIP ??? eso es lo que no entiendo muy bien, sobre shellcodes que te tiran la SHELL explotando un STACK OVERFLOW.

Si me podrías explicar con tus palabras, que hago con la shell code.. la ejecuto ?? o antes apunto.... o desde la shellcode o exploit hago el overflow del programa vulnerabla y luego me da la shell ??

eso es todo brother, gracias
En línea

Rojodos
Colaborador
***
Desconectado Desconectado

Mensajes: 3.535



Ver Perfil WWW
Re: Pregunta sobre como detectar overflows en librerias dll
« Respuesta #3 en: 22 Julio 2003, 20:36 »

La shellcode esta en ese mismo buffer que has sobreescrito (lo mas sencillo, puedes llamarla tb a *argv[]). Es decir, la shellcode se las introducido como parametro y luego los valores que petan la EIP y que deben apuntar al inicio de la shellcode.

Para que no tengas que ir calculando offsets, la tecnica mas sencilla (hay otras MUCHO mas sofisticadas) es poner una cantidad razonable de NOPS (0x90 en HEX) antes de la shellcode (en el buffer). Los NOPs son como "Aki no hay nada, pasa a la sig instruccion". Si consigues que la EIP apunte a un NOP, tratara de ejecutarlo, pero como no es nada "ejecutable", seguira a la siguiente instruccion (otro NOP), y asi hasta que llegue a la shellcode, y la ejecute.

En el post "MI PRIMERA SHELLCODE PARA UN EXPLOIT" tienes una scode que ejecuta cmd.exe, en www.packetstormsecurity.org tienes tambien muchas.

El buffer deber tener algo asi:

NOP
NOP
.....
NOP
SHELLCODE
SOBREESCRIBO EBP  <-- 4 bytes
SOBREESCRIBO EIP   <-- 4 bytes  (debe apuntar mas o menos a un NOP)

La shellcode es parte de los datos que le das al programa vulnerable, no hay que compilarla ni nada (weno, el exploit hay que compilarlo). La shellcode esta en ASM, pero en formato HEXADECIMAL.
En línea

nitr0us

Desconectado Desconectado

Mensajes: 208


#rm -fr /


Ver Perfil WWW
Re: Pregunta sobre como detectar overflows en librerias dll
« Respuesta #4 en: 25 Julio 2003, 20:25 »

Gracias por la aclaración he HACKRIS  ;) ... y gracias por todo heeee ROJODOS hee, bueno heee  :D ... con esto entiendo más o menos.

O sea, dentro del exploit encontramos la shellcode bien.... al compilar el exploit pues lo ejecuto y según lo que entendí el mismo exploit envia la shell code como parámetro al programa vulnerable. EIP apunta a un NOP (Y pues los NOPS van antes de la shellcode y el mismo expliot las introduce como parametro al programa vuln.). Y bien, pues el programa ejecuta EIP, el cual se va al NOP y se va corriendo hasta encontrar la bonita shellcode que te da la shell.

Eso es todo... gracias heee.... y pues por si me equivoco en algo corrigeme please, a propósito, las shellcodes tu las fabricas asi manualmente por que no se si recuerdo que había un shellcode constructor  ;D , no se si sea así pero bueno.

Salu2 brother !! muy bueno heee
En línea

Rojodos
Colaborador
***
Desconectado Desconectado

Mensajes: 3.535



Ver Perfil WWW
Re: Pregunta sobre como detectar overflows en librerias dll
« Respuesta #5 en: 26 Julio 2003, 04:03 »

Solo una cosa:

EIP es un registro que apunta a la siguiente instruccion a ejecutar por el micro. Por tanto, si es sobreescrito con la direccion que tu kieras, el micro ejecutara LO QUE TU KIERAS.

Y entonces podras ejecutar tu shellcode (que lo que hace normalmente es darte una shell local o remota) con los permisos del programa vulnerable

La EIP esta debajo de las direcciones asignadas para la pila (stack). En un programa con un solo buffer, seria asi:

ESP    ---> Registro que cuyo dato indica el principio de la pila  (4 bytes)
-----------------------------
BUFFER ( X bytes, segun el buffer. Puede haber mas buffers. Es donde van los NOPs y la shellcode)
-----------------------------
EBP   ----> Registro que indica el final de la pila (4 bytes)
-----------------------------
EIP    ----> Registro Instruction Pointer, siguiente instruccion a ejecutar (4 bytes)


Como ves, necesitas, para sobreescribir la EIP, meter strlen(buffer) + 8 bytes como parametro. Y la direccion que metas en la EIP, debe ser la de un NOP del buffer.

Ten en cuenta que si el buffer es pequeño, puede que tu shellcode no entre o tengas que prescindir de los NOPs, e incluso tengas que crearte una minishellcode...

Espero que te aclare dudas :D
En línea

nitr0us

Desconectado Desconectado

Mensajes: 208


#rm -fr /


Ver Perfil WWW
Re: Pregunta sobre como detectar overflows en librerias dll
« Respuesta #6 en: 26 Julio 2003, 21:41 »

 Gracias hee ROJODOS y NeuMoteX (la url muestra una explotación de un overflow en un dll  ;) )

Ahh y bien, como dices ROJODOS, un tema con MUXO JUGO HEE BROTHER  :D .

Con lo que pusiste en el último post... "...la direccion que metas en la EIP, debe ser la de un NOP del buffer..."
Una duda, la dirección que le meta a EIP el mismo exploit se lo mete no es asi ??  ??? ... o como se la dirección del inicio de la shellcode o de algún NOP antes de la shellcode ?

y por lo otro de "...si el buffer es pequeño, puede que tu shellcode no entre o tengas que prescindir de los NOPs, e incluso tengas que crearte una minishellcode..."

Bueno, no estoy muxo en este tema.. o sea, no se así regularmente a que llamas un buffer pequeño, ya que he visto en programas vulnerables (los ejemplos que te ponen en tutoriales de expliting ) pues la mayoría de buffers son de 1024 bytes... y un pequeño más o menos de que tamaño ??

Y cuando dices que .. prescindir de los NOPS.... como se el offset , o sea, la dirección exacta del inicio de la shellcode ??  y que onda con eso de minishellcodes ?? :P

Salu2 a todos...

Y MUY BUEN TEMA HEEE ROJODOS Y TODOS LOS QUE APORTAN.. BIEN COMUNIDAD !!  :D
En línea

Rojodos
Colaborador
***
Desconectado Desconectado

Mensajes: 3.535



Ver Perfil WWW
Re: Pregunta sobre como detectar overflows en librerias dll
« Respuesta #7 en: 28 Julio 2003, 02:34 »

Normalmente, los offset de los saltos a la shellcode y demas, se ponen "a pelo" es decir, una direccion fija de memoria. Lo mismo con los strings (los "cmd.exe" o los "/bin/bash"). Asi lo hize en mi primera scode, que usa una direccion fija para llamara system de la msvcrt.dll, para ejecutar cmd.exe

Esto acarrea que la shellcode solo funcione en el ordenador del que la ha programado xDD.

Existen metodos, como el jmp-call para sacar la direccion de los strings, asi como sumarle a ESP (recuerda que apunta al principio de la pila, que es donde se guardan las variables) varios bytes a ojo, para ver si "cae" en algun NOP (esto rekiere una cantidad considerable de NOPs, para que no falles)

Existen otros metodos, mas complicados, que es rastear los headers del fichero (PE en windows, ELF en linux), para ver las librerias que carga y sus direcciones de memoria, mas los offset de las funciones, y asi sacar a donde saltar en tiempo de ejecucion y no al cargar el codigo. Esto conlleva que la scode se hace ENORME, ya que todo eso para rastrear los headers y tal, tienes que hacerlo en ASM...

Y el ultimo metodo (Netsearch Ezine nº 8, Automatizacion de exploits locales en linux), es la de debuggear el programa en tiempo de ejecucion (a traves del exploit en si) para sacar las direcciones. Esto no rekiere una shellcode grande, pero si un complicado exploit (ver los codigos adjuntos de la Ezine)

Buffer pequeño--> 32 bytes por ejemplo. Esto hace que la scode tenga que ser lo mas compacta posible y que "gaste" los menos bytes posibles... por eso, se harcodean las direcciones (para eliminar NOPs) y se cambian unos comandos ASM por otros que "gasten" menos bytes.
En línea

nitr0us

Desconectado Desconectado

Mensajes: 208


#rm -fr /


Ver Perfil WWW
Re: Pregunta sobre como detectar overflows en librerias dll
« Respuesta #8 en: 28 Julio 2003, 16:13 »

Ahora si gracias por todo... ROJODOS y a todos los demás...

por último ROJODOS, no se si tengas por ahi algunas URLs para esto de overflows... exploiting ya q solo conozco

www.shellcode.com.ar

salu D.o.S
En línea

Rojodos
Colaborador
***
Desconectado Desconectado

Mensajes: 3.535



Ver Perfil WWW
Re: Pregunta sobre como detectar overflows en librerias dll
« Respuesta #9 en: 28 Julio 2003, 17:31 »

Gran cantidad de documentacion:

www.undersec.com

www.nextgenss.com

Salu2
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
dudas sobre las librerias
Programación General
doctorman 1 574 Último mensaje 25 Septiembre 2012, 23:26
por MCKSys Argentina
Pregunta sobre librerias de C/C++
Programación C/C++
Bomb-P 3 683 Último mensaje 5 Enero 2013, 08:49
por Bomb-P
Dudas con paper sobre buffer overflows
ASM
[Kayser] 1 778 Último mensaje 20 Marzo 2013, 18:53
por x64core
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines