Duda con findjmp.exe (no consigo entender su verdadera utilidad)

Iniciado por exploiterstack, 1 Diciembre 2014, 14:21 PM

0 Miembros y 1 Visitante están viendo este tema.

exploiterstack

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.

.:UND3R:.

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

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

exploiterstack

#2
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?

exploiterstack

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!

.:UND3R:.

Cita de: 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?

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.

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

exploiterstack

#5
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!

.:UND3R:.

Efectivamente, es recomendable usar direcciones de librerías del programa y del programa, con eso no debería haber problemas.

Saludos y suerte :)

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

exploiterstack

#7
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.

.:UND3R:.

Cita de: 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.

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.

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

exploiterstack

#9
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!