Foro de elhacker.net

Seguridad Informática => Bugs y Exploits => Mensaje iniciado por: exploiterstack en 1 Diciembre 2014, 14:21 pm



Título: Duda con findjmp.exe (no consigo entender su verdadera utilidad)
Publicado por: exploiterstack en 1 Diciembre 2014, 14:21 pm
Hola comunidad, tengo una duda que me ronda la cabeza y por mas que intento aplicarle la lógica no lo consigo. Dicha duda consiste en el uso de findjsp.exe he leido muchos textos que hacen uso de esta herramienta entre ellos la explicación que aquí se detalla:

http://foro.elhacker.net/bugs_y_exploits/herramientas_findjmp_offsets_etc_actualizado-t101215.0.html

Yo lo que tengo entendido que se utiliza para obtener la dirección(offset) de una instrucción JMP ESP que hace uso la aplicación o una librería(dll) del software que se esta explotando.

Con dicha instrucción tenemos que sobrescribir EIP en la pila, de modo que cuando este registro vaya a ejecutar esta instrucción accederá a la cima de la pila(ESP) a ejecutar lo que alli tengamos(en el caso mas común una shellcode), hay viene mi duda. Por que forzar a sobrescribir el EIP con ese ofset para que este acceda a la pila a ejecutar la shellcode?

Se que mas o menos lo entiendo pero no se si sera mi mente pero no lo llego a entender  al 100% todo esto, así que si alguien fuera capaz de hacérmelo ver de una manera sencilla (for dummies)

Gracias de antemano.


Título: Re: Duda con findjmp.exe (no consigo entender su verdadera utilidad)
Publicado por: .:UND3R:. en 1 Diciembre 2014, 15:02 pm
No entiendo muy bien tu duda, pero lo que ocurre es que la dirección de stack varía de acuerdo a la versión del SO, la idea es hardcodear una dirección estática (sin ASLR) para que simplemente salte al inicio de la pila, ahora también puede ocurrir que el programa varie su cantidad de datos que debe recibir para el overflow (según el nombre de usuario o path de instalación) o que no siempre se situe al retorno del stack, para ello haces una cabecera de NOP y luego pones la shellcode.

Saludos y suerte


Título: Re: Duda con findjmp.exe (no consigo entender su verdadera utilidad)
Publicado por: exploiterstack en 2 Diciembre 2014, 11:52 am
Antes de nada gracias .:UND3R:. por contestar,

Respecto a la respuesta que me das se que me es de gran ayuda, es por eso que quería decirte unas cosillas:

1. Por que sabes que la shellcode esta en ESP en el momento de sobrescribir el EIP? (puede dar el caso de que este o has de hacer un relleno de X bytes para que verdaderamente apunte a la dirección del inicio del ESP no?)
2. Con que te refieres con la dirección del stack? te refieres a la de la cima?
3. A que te refieres con hardcodear una dirección? no entiendo esa jerga(pd: he intentado buscar esa definición y no me a quedado muy clara).

Por que se busca con findjmp.exe una dirección de una dll que haga uso el programa vulnerable y con esa dirección sobrescribir EIP para que así que apunte al inicio del ESP?.  Esa dirección aunque a priori es fija(en el S.O que uso y lo sera en sistemas operativos iguales al utilizado) pienso que también cambiara cuando se cambie de S.O o no?


Título: Re: Duda con findjmp.exe (no consigo entender su verdadera utilidad)
Publicado por: exploiterstack en 3 Diciembre 2014, 12:59 pm
Lo que pretendo con esas dudas es formalizar la idea que tengo sobre estos procedimientos de explotación, ya que no tengo una confianza cierta de si es así, y lo que quiero antes de continuar indagando es pensar que estoy en el camino correcto ademas de adquirir el vocabulario empleado en el exploiting.

Espero su respuesta  .:UND3R:. o de cualquier otra persona tenga de estos conocimientos.

Un enorme saludo!


Título: Re: Duda con findjmp.exe (no consigo entender su verdadera utilidad)
Publicado por: .:UND3R:. en 3 Diciembre 2014, 17:53 pm
Antes de nada gracias .:UND3R:. por contestar,

Respecto a la respuesta que me das se que me es de gran ayuda, es por eso que quería decirte unas cosillas:

1. Por que sabes que la shellcode esta en ESP en el momento de sobrescribir el EIP? (puede dar el caso de que este o has de hacer un relleno de X bytes para que verdaderamente apunte a la dirección del inicio del ESP no?)
2. Con que te refieres con la dirección del stack? te refieres a la de la cima?
3. A que te refieres con hardcodear una dirección? no entiendo esa jerga(pd: he intentado buscar esa definición y no me a quedado muy clara).

Por que se busca con findjmp.exe una dirección de una dll que haga uso el programa vulnerable y con esa dirección sobrescribir EIP para que así que apunte al inicio del ESP?.  Esa dirección aunque a priori es fija(en el S.O que uso y lo sera en sistemas operativos iguales al utilizado) pienso que también cambiara cuando se cambie de S.O o no?

1) ESP siempre apunta al inicio de la pila.
2) Con la dirección del stack me refiero al rango de direcciones destinadas a usarse como pila.
3) hardcodear claro es una jerga y se refiera a usar una dirección estática y esto en el mayor de los casos posibles debe ser evitado.

Ahora con el pto 3 puedo intentar guiarte porqué es mejor JMP ESP que modificar el EIP con una dirección del stack.

Las direcciones del stack varían de acuerdo a múltiples factores, por lo cual esa address no será igual aun teniendo el mismo SO (el idioma, versión, actualización, hace que las direcciones varíen) No es lo mismo Windows XP SP1 ESP sin actualizar que Windows XP SP1 ESP con una actualización, y mucho más distinto si cambian los idiomas, los service pack entre otros factores. Pero si por ejemplo la dirección de una instrucción (JMP ESP en este caso) será la misma en cualquier versión (si obviamos ASLR).

Espero que se hayan aclarado tus dudas, saludos.


Título: Re: Duda con findjmp.exe (no consigo entender su verdadera utilidad)
Publicado por: exploiterstack en 4 Diciembre 2014, 09:11 am
Hola otra vez .:UND3R:.,

2) Con la dirección del stack me refiero al rango de direcciones destinadas a usarse como pila.

Entiendo que te refieres a las direcciones utilizadas en cualquier stackframe de la pila, independientemente del numero de contextos que tenga en ese momento, es decir todas son todas, desde donde empieza el "PRIMER EBP" hasta la cima de la pila ESP. Si es así con un si me bastaría ;)

Lo ultimo que dices despejaba absolutamente mi duda si no es que hubiera leído lo que anteriormente mencionas ya que veo una ligera contradicción.


Esto
3) hardcodear claro es una jerga y se refiera a usar una dirección estática y esto en el mayor de los casos posibles debe ser evitado.

Con esto otro
Pero si por ejemplo la dirección de una instrucción (JMP ESP en este caso) será la misma en cualquier versión (si obviamos ASLR).

Si no hay que confiar en una dirección del stack ya que estas suelen variar dependiendo de los factores que mencionas, por que utilizar por ejemplo las del kernel32? tengo entendido que estas direcciones(JMP ESP del kernel o similares) serán mas o menos "fijas" para ese determinado S.O, es decir el exploit funcionara en cualquier S.O que haga uso de esta librería(siempre y cuando se cargue en la misma dirección de memoria), con esto puedo deducir tres cosas:


1)Nunca hay que confiar en las direcciones del stack por que estas direcciones variaran dependiendo únicamente del programa, contenido etc...Y esto repercutirá en las direcciones que haga uso en el stack.

2)Si confiamos en una librería del sistema, este exploit funcionara únicamente para el sistema que se esta utilizando. Por decirlo de alguna manera el exploit dependerá del S.O en cuestión(teniendo en cuenta lo que mencionaste, versión, sp, idioma etc...)

3)Esto es lo que yo deduzco. Lo lógico seria depender de una librería que haga uso el programa vulnerable, ya que esta se cargara inmediatamente en el momento que se ejecute el programa y como la dirección que contenga el JMP ESP de la librería se le abra asignado en el mismo instante que se carga ya no me importaría saber de antemano la dirección ya que sea cual sea la dirección podrá referenciar SIEMPRE(siempre y cuando no haya ASLR) a la cima de la pila. En este ultimo punto estamos haciendo que el exploit ya no dependa del S.O si no de la aplicación vulnerable en cuestión, de este modo nuestro exploit funcionara haya donde funcione la aplicación saltándonos como digo la dependencia del S.O y ahora la dependencia sera sobre la aplicación asegurándonos así que la explotación se realice con éxito en mas sistemas.

Espero su respuesta, saludos!


Título: Re: Duda con findjmp.exe (no consigo entender su verdadera utilidad)
Publicado por: .:UND3R:. en 4 Diciembre 2014, 14:27 pm
Efectivamente, es recomendable usar direcciones de librerías del programa y del programa, con eso no debería haber problemas.

Saludos y suerte :)


Título: Re: Duda con findjmp.exe (no consigo entender su verdadera utilidad)
Publicado por: exploiterstack en 4 Diciembre 2014, 14:57 pm
Entonces el punto 3 que menciono estoy en lo cierto no?

Entonces por que hay manuales que dicen de hacer uso direcciones de kernel32 o a ntdll.dll? ya que son del sistema y no de la aplicación.

pd: Uno de los textos que sigo es el de Rojodos.


Título: Re: Duda con findjmp.exe (no consigo entender su verdadera utilidad)
Publicado por: .:UND3R:. en 4 Diciembre 2014, 15:17 pm
Entonces el punto 3 que menciono estoy en lo cierto no?

Entonces por que hay manuales que dicen de hacer uso direcciones de kernel32 o a ntdll.dll? ya que son del sistema y no de la aplicación.

pd: Uno de los textos que sigo es el de Rojodos.

No entendí muy bien el principio del pto 3 pero si usar librerías del programa hacen que el exploit sea más genérico.

PD: Te recomiendo los tutoriales de c0relanc0der en español.


Título: Re: Duda con findjmp.exe (no consigo entender su verdadera utilidad)
Publicado por: exploiterstack en 4 Diciembre 2014, 17:27 pm
3)Esto es lo que yo deduzco. Lo lógico seria depender de una librería que haga uso el programa vulnerable, ya que esta se cargara inmediatamente en el momento que se ejecute el programa y como la dirección que contenga el JMP ESP de la librería se le abra asignado en el mismo instante que se carga ya no me importaría saber de antemano la dirección ya que sea cual sea la dirección podrá referenciar SIEMPRE(siempre y cuando no haya ASLR) a la cima de la pila. En este ultimo punto estamos haciendo que el exploit ya no dependa del S.O si no de la aplicación vulnerable en cuestión, de este modo nuestro exploit funcionara haya donde funcione la aplicación saltándonos como digo la dependencia del S.O y ahora la dependencia sera sobre la aplicación asegurándonos así que la explotación se realice con éxito en mas sistemas.

Este bloque de texto que escribo estoy en lo cierto?

Pd: Tambien estaba siguiendo los tutoriales que mencionas traducidos por ivision.

Que parte no entendiste de lo que puse, hazmelo saber...

Un saludo!


Título: Re: Duda con findjmp.exe (no consigo entender su verdadera utilidad)
Publicado por: x64core en 4 Diciembre 2014, 22:36 pm
@UND3R:
La dirección de la pila no depende de la versión de Windows, ni del idioma, o algo que tenga que ver. El kernel es el que determina donde la memoria será reservada, ya que en la inicialización del proceso casi toda la memoria de modo usuario es disponible, es por eso que generalmente la dirección no varia mucho. Esto más bien se basa en asuntos como tamaño de la memoria a reservar, attributos, etc.

Uno mismo puede comprobarlo haciendo lo siguiente: Añadir el depurador al proceso explorer.exe, breakpoint en NtCreateProcess/NtCreateProcessEx/NtCreateUserProcess, abrir algun programa como notepad.exe o cualquier otro, el depurador parará en el bp, dejar que la función se ejecute, ahora crear 500-1000MB de memoria virtual en bloques de 1MB cada uno ( con el depurador o alguna herramienta como CheatEngine), ahora permitir que la inicialización del proceso (notepad.exe) sea completada, comprobar la dirección de la pila del hilo principal del proceso.


Hola comunidad, tengo una duda que me ronda la cabeza y por mas que intento aplicarle la lógica no lo consigo. Dicha duda consiste en el uso de findjsp.exe he leido muchos textos que hacen uso de esta herramienta entre ellos la explicación que aquí se detalla:

http://foro.elhacker.net/bugs_y_exploits/herramientas_findjmp_offsets_etc_actualizado-t101215.0.html

Yo lo que tengo entendido que se utiliza para obtener la dirección(offset) de una instrucción JMP ESP que hace uso la aplicación o una librería(dll) del software que se esta explotando.

Con dicha instrucción tenemos que sobrescribir EIP en la pila, de modo que cuando este registro vaya a ejecutar esta instrucción accederá a la cima de la pila(ESP) a ejecutar lo que alli tengamos(en el caso mas común una shellcode), hay viene mi duda. Por que forzar a sobrescribir el EIP con ese ofset para que este acceda a la pila a ejecutar la shellcode?

Se que mas o menos lo entiendo pero no se si sera mi mente pero no lo llego a entender  al 100% todo esto, así que si alguien fuera capaz de hacérmelo ver de una manera sencilla (for dummies)

Gracias de antemano.
Lo que preguntas es simple, te lo responderé igual de simple. Es porque generalmente es una manera cómun de ejecutar lo que se encuentre en la pila directamente, de lo contrario tendrás que arreglarte para ejecutar lo que se encuentre en la pila buscando otro conjunto de instrucciónes que te ayuden para hacerlo algo como:
MOV EBP,ESP
JMP EBP
Y miles de otras formas de hacerlo, claro que algunas no son comunmente generadas por compiladores.








Título: Re: Duda con findjmp.exe (no consigo entender su verdadera utilidad)
Publicado por: exploiterstack en 5 Diciembre 2014, 08:43 am
Hola x64Core,

Haber lo que me quieres decir es que se utiliza JMP ESP por que al machacar el EIP con esa dirección me llevaría a la cima de la pila para ejecutar el shellcode(en el caso de que la tenga apuntando a ESP) vale hasta ay creo estar en lo cierto.

Si no es así esta parte házmelo saber plis...

Con la otra parte que dices, significa que si no tuviera la shellcode apuntando en la cima y la tuviera en cualquier otro lugar del stack debería de apañarmelas con otro juego de instrucciones y utilizar la dirección de estas instrucciones para machar el registro EIP para que me lleve al lugar exacto donde esta la shellcode para que sea ejecutada?

Si no es así esta otra parte házmelo saber plis...

Por ultimo esto que comento estoy en lo cierto?


1)Nunca hay que confiar en las direcciones del stack por que estas direcciones variaran dependiendo únicamente del programa, contenido etc...Y esto repercutirá en las direcciones que haga uso en el stack.

2)Si confiamos en una librería del sistema, este exploit funcionara únicamente para el sistema que se esta utilizando. Por decirlo de alguna manera el exploit dependerá del S.O en cuestión(teniendo en cuenta lo que mencionaste, versión, sp, idioma etc...)

3)Esto es lo que yo deduzco. Lo lógico seria depender de una librería que haga uso el programa vulnerable, ya que esta se cargara inmediatamente en el momento que se ejecute el programa y como la dirección que contenga el JMP ESP de la librería se le abra asignado en el mismo instante que se carga ya no me importaría saber de antemano la dirección ya que sea cual sea la dirección podrá referenciar SIEMPRE(siempre y cuando no haya ASLR) a la cima de la pila. En este ultimo punto estamos haciendo que el exploit ya no dependa del S.O si no de la aplicación vulnerable en cuestión, de este modo nuestro exploit funcionara haya donde funcione la aplicación saltándonos como digo la dependencia del S.O y ahora la dependencia sera sobre la aplicación asegurándonos así que la explotación se realice con éxito en mas sistemas.

Si no estoy en lo cierto o algo que pongo en este bloque házmelo saber plis...


Espero su respuesta, un saludo!




Título: Re: Duda con findjmp.exe (no consigo entender su verdadera utilidad)
Publicado por: x64core en 6 Diciembre 2014, 01:17 am
Hola x64Core,


Haber lo que me quieres decir es que se utiliza JMP ESP por que al machacar el EIP con esa
dirección me llevaría a la cima de la pila para ejecutar el shellcode(en el caso de que la
tenga apuntando a ESP) vale hasta ay creo estar en lo cierto.

Si cuando dices machacar te refieres a establecer el EIP con la dirección de esa instrucción,
entonces es correcto.

Con la otra parte que dices, significa que si no tuviera la shellcode apuntando en la cima y
la tuviera en cualquier otro lugar del stack debería de apañarmelas con otro juego de instrucciones
y utilizar la dirección de estas instrucciones para machar el registro EIP para que me lleve al lugar
exacto donde esta la shellcode para que sea ejecutada?

Yo estoy suponiendo que estamos hablando de un escenario donde se logra un stack overflow para
cargar el exploit, a menos que estes introducciendo más valores en la pila ESP apuntará a la shellcode.

1)Nunca hay que confiar en las direcciones del stack por que estas direcciones variaran dependiendo
únicamente del programa, contenido etc...Y esto repercutirá en las direcciones que haga uso en el stack.

De ningun programa, no veo razon de porqué considerar por ejemplo el valor 0x1000 como la dirección
de la pila o algo por el estilo.

2)Si confiamos en una librería del sistema, este exploit funcionara únicamente para el sistema que se
esta utilizando. Por decirlo de alguna manera el exploit dependerá del S.O en cuestión(teniendo en
cuenta lo que mencionaste, versión, sp, idioma etc...)
Dependerá de la libreria, es posible que el modulo se cargue en el mismo espacio de direcciones de diferentes sistemas operativos.

3)Esto es lo que yo deduzco. Lo lógico seria depender de una librería que haga uso el programa
vulnerable, ya que esta se cargara inmediatamente en el momento que se ejecute el programa y como la
dirección que contenga el JMP ESP de la librería se le abra asignado en el mismo instante
que se carga ya no me importaría saber de antemano la dirección ya que sea cual sea la dirección
podrá referenciar SIEMPRE(siempre y cuando no haya ASLR) a la cima de la pila. En este ultimo punto
estamos haciendo que el exploit ya no dependa del S.O si no de la aplicación vulnerable en cuestión,
de este modo nuestro exploit funcionara haya donde funcione la aplicación saltándonos como digo la
dependencia del S.O y ahora la dependencia sera sobre la aplicación asegurándonos así que la
explotación se realice con éxito en mas sistemas.
Supongo que esto ya se resuelve cuando respondí la 2.

Esto se mira simple pero hay que considerar ASLR y DEP.


Título: Re: Duda con findjmp.exe (no consigo entender su verdadera utilidad)
Publicado por: exploiterstack en 9 Diciembre 2014, 11:24 am
Muchas gracias x64Core por responder y pido perdón por tardar en contentar se me liaron unas cosillas,

Una cosa por que dices:

De ningún programa, no veo razón de porqué considerar por ejemplo el valor 0x1000 como la dirección de la pila o algo por el estilo. (Refiriéndote a cualquier dirección de la pila)


Por ultimo si cojo una dirección que apunte a un JPM ESP de una librería propia de la aplicación el exploit seria universal?


Un saludo!


Título: Re: Duda con findjmp.exe (no consigo entender su verdadera utilidad)
Publicado por: x64core en 10 Diciembre 2014, 07:13 am
Muchas gracias x64Core por responder y pido perdón por tardar en contentar se me liaron unas cosillas,

Una cosa por que dices:

De ningún programa, no veo razón de porqué considerar por ejemplo el valor 0x1000 como la dirección de la pila o algo por el estilo. (Refiriéndote a cualquier dirección de la pila)


Por ultimo si cojo una dirección que apunte a un JPM ESP de una librería propia de la aplicación el exploit seria universal?


Un saludo!

Eso depende, si la libreria de la aplicación puede ser cargada en una dirección base dinamica entonces no es posible, pero si siempre será cargada en 0x00400000 por ejemplo, entonces sí podes tomar ventaja, aunque las librerias generalmente siempre pueden ser cargadas en una dirección dinamica, es más común mirar a la aplicación en lugar de algún modulo.


Título: Re: Duda con findjmp.exe (no consigo entender su verdadera utilidad)
Publicado por: exploiterstack en 10 Diciembre 2014, 08:25 am
Que pasa si la librería es cargada en una dirección base? en este caso la dirección por que cambiaría?


Espero su respuesta, saludos?


Título: Re: Duda con findjmp.exe (no consigo entender su verdadera utilidad)
Publicado por: x64core en 10 Diciembre 2014, 08:32 am
Que pasa si la librería es cargada en una dirección base? en este caso la dirección por que cambiaría?


Espero su respuesta, saludos?
Arreglado, olvide escribir 'dinamica' al final.


Título: Re: Duda con findjmp.exe (no consigo entender su verdadera utilidad)
Publicado por: exploiterstack en 10 Diciembre 2014, 09:47 am
Vale eso también me quedo claro, pero yo no llego a entender por que la direcciones del stack suelen ser dinámicas, ya que en realidad sabiendo el desplazamiento que hay respecto a la dirección base(EBP) podemos obtener la dirección correcta del(ESP) es por eso que no llego a entender por que no se puede confiar en esas direcciones a la hora de apuntar el EIP hacia donde empieza ESP(donde estará la shellcode).

Por favor mas claro...Y como dije necesito una explicación como para tontos :-\

Saludos!


Título: Re: Duda con findjmp.exe (no consigo entender su verdadera utilidad)
Publicado por: x64core en 10 Diciembre 2014, 19:33 pm
Vale eso también me quedo claro, pero yo no llego a entender por que la direcciones del stack suelen ser dinámicas, ya que en realidad sabiendo el desplazamiento que hay respecto a la dirección base(EBP) podemos obtener la dirección correcta del(ESP) es por eso que no llego a entender por que no se puede confiar en esas direcciones a la hora de apuntar el EIP hacia donde empieza ESP(donde estará la shellcode).

Por favor mas claro...Y como dije necesito una explicación como para tontos :-\

Saludos!

Ya dije porqué la dirección de la pila de un hilo es dinamica y explique una forma de cómo comprobarlo. Acerca de EBP, este no asegura a ser la base de ESP de hecho no podemos asegurar el valor de ningun registro a menos en situaciones muy especificas y dependiendo de qué tipo de valor se encuentre en el registro.

Ahora si aún no entiendes, entonces no encuentro el punto de qué parte es la no entiendes.




Título: Re: Duda con findjmp.exe (no consigo entender su verdadera utilidad)
Publicado por: dRak0 en 11 Diciembre 2014, 07:51 am
Es una forma de lograr ejecutar tu codigo, no tiene porque ser asi si o si , son tecnicas.
No soy experto en exploiting en windows , pero en linux , existen tecnicas como ret2libc , que consiste ,muy resumido , en llamar funciones de la libreria libc, permitiendonos bypassear DEP.