Exploiting basico en Windows

Este es tu lugar para hablar de programación, compartir, crear y desarrollar nuevos proyectos

Moderador: Moderadores

Re: Exploiting basico en Windows

Notapor Sor_Zitroën » Vie Ago 26, 2011 7:05 pm

A ver, sigo el hilo pero ya retomando SEH.

TuXeD, sobre SEH todavía tengo bastantes dudas. Pero por lo pronto lo que no veo es que en la explicación que me pusiste antes, cuando hablas de next SEH y SE handler no sé si sólo hay un registro SEH o haces referencia a varios. Por lo leído en Corelan, si en el código se codea una excepción en la cadena SEH aparecen en primer lugar una de Windows, luego la propia del programa y por último la por defecto de Windows (la primera no sé bien de dónde se la saca, pero bueno).

Por otro lado, si en la aplicación hay 4 excepciones, ¿cómo se sabe qué manejador de la cadena SEH es el adecuado? No hay un identificador ni nada por el estilo...
[Padre] ¿Crees en el fracaso?
[Hijo] Sí
[Padre] Entonces lo experimentarás
Avatar de Usuario
Sor_Zitroën
-<|:·þ
-<|:·þ
 
Mensajes: 2064
Registrado: Vie Nov 25, 2005 2:01 am

Re: Exploiting basico en Windows

Notapor vlan7 » Sab Ago 27, 2011 10:43 am

Hola Sor,

Por lo que he estado estudiando de SEH, hay un SEH pointer y el SEH handler en si. Los exploits que he visto definen una constante SEH_pointer que son opcodes de un JMP SHORT de forma similar a como explico TuXeD sobre la duda original de neofito. Dado que siempre lo he visto definir como constante en los exploits, deduzco que no importa que haya una excepcion SEH o siete.

Como una imagen vale mas que mil palabras:

Imagen

Ahi tenemos un JMP SHORT hacia adelante 16 bytes, un NOP-sled donde esperamos caer y luego el shellcode, siguiendo con el hilo una trap INT3. Si el debugger sale, hemos llegado y nos tocaria codificar un shellcode decente.

Por otra parte, existen protecciones a esto como SafeSEH, los malditos canarios en la pila, o una SEH overwrite protection a partir de Vista.

Para burlar SafeSEH debes encontrar un POP POP RET en una DLL que no se haya compilado con SafeSEH. En Inmunity Debugger puedes hacerlo con el plugin !safeseh escribiendo !safeseh en la ventana donde se introducen comandos. Entonces en los logs saldran las DLL que el plugin escaneo marcadas como SafeSEH unprotected. Entonces con el plugin !search, introducirias algo como

!search pop r32\npop r32\nret

Y tendrias que asegurarte de que no hubiera bytes nulos que abortarian el futuro exploit.

Suerte,
There is a crack, a crack in everything That's how the light gets in. -subculture

zen7.vlan7.org
Avatar de Usuario
vlan7
<|:-D
<|:-D
 
Mensajes: 1176
Registrado: Dom Mar 05, 2006 11:16 pm
Ubicación: Mas alla del EIP

Re: Exploiting basico en Windows

Notapor TuXeD » Sab Ago 27, 2011 3:43 pm

Hola,

Pero por lo pronto lo que no veo es que en la explicación que me pusiste antes, cuando hablas de next SEH y SE handler no sé si sólo hay un registro SEH o haces referencia a varios. Por lo leído en Corelan, si en el código se codea una excepción en la cadena SEH aparecen en primer lugar una de Windows, luego la propia del programa y por último la por defecto de Windows (la primera no sé bien de dónde se la saca, pero bueno).


Uhm, segun entiendo yo no hay uno de Windows en primer lugar. Se empieza por los de la aplicacion, y se genera la lista acabando con el por defecto al final. Esta imagen de corelan lo explica: http://www.corelan.be:8800/wp-content/uploads/2009/07/image45.png

Por otro lado, si en la aplicación hay 4 excepciones, ¿cómo se sabe qué manejador de la cadena SEH es el adecuado? No hay un identificador ni nada por el estilo...


Al exception handler, Windows le pasa una estructura 'Exception Record' que indica donde ha ocurrido la excepcion y por que. Es responsabilidad del handler en si decidir si puede resolver la excepcion o la deja pasar al siguiente handler, asi que esta es la forma de decidir cual es el SEH handler adecuado :) . Este articulo (largo) explica como funciona SEH: http://www.microsoft.com/msj/0197/exception/exception.aspx en mas profundidad.

Saludos
TuXeD
Wadalbertita
Wadalbertita
 
Mensajes: 1053
Registrado: Sab Ene 29, 2005 12:46 pm

Re: Exploiting basico en Windows

Notapor jochy » Mar Ago 30, 2011 4:04 am

Saludos.
Llego de vuelta y encuentro que andan en lo mismo que yo, que casualidad despues de tanto tiempo!!!.
Yo tambien estoy siguiendo los tutos de corelan (voy por la parte 6 - bypassing stack cookies y demas), con respecto a:
Por otro lado, si en la aplicación hay 4 excepciones, ¿cómo se sabe qué manejador de la cadena SEH es el adecuado? No hay un identificador ni nada por el estilo...

En realidad como se comenta en corelan, existe un cadena de SEH, cada nodo SEH es una estructura que tiene dos campos: nSEH y SEH,
donde:
nSEH: Es un puntero hacia el siguiente nodo en la cadena de SEHs
SEH: Es la direccion de donde se encuentra el codigo para manejar una excepcion.

Estas estructuras SEH se pueden encontrar en la pila, de forma que la primera esta mas cerca del top y la ultima esta cerca del fondo de la pila(el ultimo SEH apunta a FFFFFFF).
Por esto no importa cual exception handler este primero (si el de SO o el de aplicacion), lo importante es que cuando se ingrese una entrada, alguno de estos se sobrescriba con esta.

Ahora bien, en el ejemplo del SoriTong, cuando se crea un archivo de skin con 5000 bytes, se sobrescribe el campo nSEH y el SEH de la primera estructura de manejo de exceptiones. Con el uso de pattern_create y pattern_offset es posible calcular cuantos bytes (A`s o lo que sea) se necesitan para sobrescribir el nSEH y el SEH. Una vez se sepa esto, debe buscarse en los modulos ejecutables la instruccion pop/pop/retn y escribir un exploit de forma que la direccion de esta ultima instruccion quede en el lugar del SEH y en el lugar del nSEH quede un codigo de salto hacia el shellcode (gerenalmente un short jump -eb- o un long jump -e9-, vamos que tambien es posible que toque brincar hacia atras por si no hay mucho espacio despues del SEH para poner el shellcode, sino sabeis hacer tal salto: http://thestarman.pcministry.com/asm/2bytejumps.htm).

Pero porque el SEH debe contener la direccion de un pop/pop/ret? porque cuando se lance la excepcion se llamará a dicho SEH y el contenido del campo nSEH se
pondra en esp+C(12), luego con pop (salen 4 bytes)+pop (4 bytes mas)+retn (lo que esta en esp se pone en EIP), y como en esp queda lo que estaba en nSEH, si en nSEH esta el salto al shellcode, entonces calc!!!.

Espero haber sido de ayuda. Te doy un consejo, realiza la practica y luego repasa el hilo de corelan. Porque debo decir que no la apañe con la sola teoria, vamos que
Olly ayudó mucho.
jochy
:-D
:-D
 
Mensajes: 120
Registrado: Vie Mar 27, 2009 4:04 am

Re: Exploiting basico en Windows

Notapor vlan7 » Mar Ago 30, 2011 8:46 pm

jochy escribió:Te doy un consejo, realiza la practica y luego repasa el hilo de corelan. Porque debo decir que no la apañe con la sola teoria, vamos que
Olly ayudó mucho.


Estoy contigo, la teoria es importante, pero tal y como reza el Advanced Bash-Scripting Guide. An in-depth exploration of the art of shell scripting, que casualmente hoy dia 30 de agosto se ha actualizado:

Código: Seleccionar todo
lynx -dump http://tldp.org/LDP/abs/html/ |egrep -B1 'scripting is to' |sed 's/scripting/exploiting/' |sed 's/scripts/exploits/'
:)

Suerte,
There is a crack, a crack in everything That's how the light gets in. -subculture

zen7.vlan7.org
Avatar de Usuario
vlan7
<|:-D
<|:-D
 
Mensajes: 1176
Registrado: Dom Mar 05, 2006 11:16 pm
Ubicación: Mas alla del EIP

Re: Exploiting basico en Windows

Notapor Sor_Zitroën » Jue Sep 01, 2011 10:10 pm

Hola gente,

siento no haber contestado antes pero ahora mismo voy bastante pillado de tiempo. Como de momento no puedo aportar mucho al tema, sólo escribo para agradecer los aportes. Más adelante lo hablamos.

Gracias ;)
[Padre] ¿Crees en el fracaso?
[Hijo] Sí
[Padre] Entonces lo experimentarás
Avatar de Usuario
Sor_Zitroën
-<|:·þ
-<|:·þ
 
Mensajes: 2064
Registrado: Vie Nov 25, 2005 2:01 am

Re: Exploiting basico en Windows

Notapor jochy » Vie Sep 02, 2011 7:45 pm

Otro comentario sobre:
Por otro lado, si en la aplicación hay 4 excepciones, ¿cómo se sabe qué manejador de la cadena SEH es el adecuado? No hay un identificador ni nada por el estilo...

Pienso que no respondí a tu pregunta en el comentario anterior.
La respuesta seria: No se sabe cual manejador de la cadena/lista es el adecuado, simplemente (debido a que es hay una lista de manejadores) se realiza una
llamada al primer manejador, si este no puede manejar la excepcion, se llama al siguiente mediante el puntero nSEH, si este nuevo SEH (manejador) tampoco
puede, se llama al siguiente de la lista y asi sucesivamente. Si se llega al ultimo manejador y este no puede contralar la excepcion, se muestra el mensaje tipico de
windows que solicita enviar la informacion del error a microsoft, ese al que siempre decimos "No enviar".

Como se sabe cual es el ultimo manejador de la cadena? Se sabe porque este apunta a FFFFFFFF.
jochy
:-D
:-D
 
Mensajes: 120
Registrado: Vie Mar 27, 2009 4:04 am

Re: Exploiting basico en Windows

Notapor Sor_Zitroën » Vie Sep 02, 2011 10:42 pm

Bueno, aunque no me he estudiado todo lo que quería porque estoy pendiente de ver el último vídeo sobre el tema de Vivek Ramachandran en SecurityTube, comento un poco el tema. De todas maneras, gracias a todos por las respuestas, pero más o menos es lo que había estudiado.

La cuestión es que siempre se sobreescribe el primer registro de la cadena SEH porque va a pasar por ahí sí o sí. Como apunta TuXeD y jochy, es en el propio código de la excepción donde se sabe si se puede manejar o no; no hacen falta identificadores. Dicho de otra manera: el SO recorre la cadena SEH. Dentro del código del manejador filter_expression indica si se puede encargar de esa excepción. Si es así, se ejecuta el código correspondiente, y si no se pasa al siguiente registro SE. En resumen, es dentro del manejador donde se resuelve si se puede manejar la excepción mediante filter_expression.

jochy, respecto al ESP+12 del que hablas supongo te refieres al EstablisherFrame. Vamos, que cuando se salta al manejador se crea un marco de pila propio dentro de la pila. En la posición ESP+12 está el EstablisherFrame que, como dice jochy, apunta a al campo next SEH del otro marco de pila. Así nos aseguramos de saltar al next, donde habremos puesto un jmp a la shellcode.

Por cierto TuXeD, gracias por el enlace. Ya lo tenía anotado en un documento como pendiente para leer. A ver si me animo ;)

Nada, que cuando pueda acabo de ver el tercer vídeo de Vivek y si puedo hago la práctica.
Gracias por la ayuda.
[Padre] ¿Crees en el fracaso?
[Hijo] Sí
[Padre] Entonces lo experimentarás
Avatar de Usuario
Sor_Zitroën
-<|:·þ
-<|:·þ
 
Mensajes: 2064
Registrado: Vie Nov 25, 2005 2:01 am

Re: Exploiting basico en Windows

Notapor jochy » Lun Sep 05, 2011 5:48 pm

De que va eso de Vivek Ramachandran?, vamos un link.
jochy
:-D
:-D
 
Mensajes: 120
Registrado: Vie Mar 27, 2009 4:04 am

Re: Exploiting basico en Windows

Notapor Sor_Zitroën » Lun Sep 05, 2011 10:16 pm

He sido bastante claro cuando he hablado de Vivek Ramachandran en SecurityTube, pero te paso el enlace. Concretamente los vídeos 6, 7 y 8.
[Padre] ¿Crees en el fracaso?
[Hijo] Sí
[Padre] Entonces lo experimentarás
Avatar de Usuario
Sor_Zitroën
-<|:·þ
-<|:·þ
 
Mensajes: 2064
Registrado: Vie Nov 25, 2005 2:01 am

Re: Exploiting basico en Windows

Notapor Sor_Zitroën » Dom Sep 11, 2011 12:04 pm

Retomando el tema, lo que no me cuadra es que en el texto de Corelan y los vídeos de Vivek cambia la posición donde está ubicada en la pila la cadena SEH. En Corelan comentan que está debajo de los parámetros, y Vivek dice que está entre EBP y las variables locales. Aunque no lo he comprobado supongo que actualmente será lo que dice Vivek, ya que es más reciente.

De todas maneras me imagino que a efectos prácticos no tiene importancia. En el caso de que estén debajo de los parámetros, sobreescribir la cadena implicar también una sobreescritura del EIP. Pero como no hay necesidad de volver a la dirección que apunta no problem, ¿me equivoco?

¿Alguien que haya comprobado la ubicación exacta en la pila lo puede comentar?
[Padre] ¿Crees en el fracaso?
[Hijo] Sí
[Padre] Entonces lo experimentarás
Avatar de Usuario
Sor_Zitroën
-<|:·þ
-<|:·þ
 
Mensajes: 2064
Registrado: Vie Nov 25, 2005 2:01 am

Re: Exploiting basico en Windows

Notapor Sor_Zitroën » Vie Sep 16, 2011 11:57 am

Pregunto un par más de dudas, a ver si alguien se anima a responder :)


En vez de sobreescribir next SEH y SEH Handler, ¿no podríamos hacer que SEH Handler apunte a un jumpcode para que salte a la shellcode directamente?

Y por otro lado, se supone que para aprovecharse de una sobreescritura SEH hace falta que se lance una excepción. En los vídeos que he visto, no aparece que en ningún momento se provoque una. ¿Qué me he perdido?
[Padre] ¿Crees en el fracaso?
[Hijo] Sí
[Padre] Entonces lo experimentarás
Avatar de Usuario
Sor_Zitroën
-<|:·þ
-<|:·þ
 
Mensajes: 2064
Registrado: Vie Nov 25, 2005 2:01 am

Re: Exploiting basico en Windows

Notapor TuXeD » Sab Sep 17, 2011 4:18 pm

Sor_Zitroën escribió:Retomando el tema, lo que no me cuadra es que en el texto de Corelan y los vídeos de Vivek cambia la posición donde está ubicada en la pila la cadena SEH. En Corelan comentan que está debajo de los parámetros, y Vivek dice que está entre EBP y las variables locales. Aunque no lo he comprobado supongo que actualmente será lo que dice Vivek, ya que es más reciente.


Pues no lo he mirado, pero una cosa esta clara, y es que esta "antes" de la direccion de retorno, puesto que se setea cuando ya estas en la funcion que mete el manejador de excepciones (con el bloque try-except).

Si 'por debajo de los parametros' se refiere a debajo en la pila (osea, en posiciones de memoria mas altas), entonces seria incorrecto. No puede estar en posiciones mas altas que los parametros, salvo que sea un manejador creado por una funcion anterior a la que padece el overflow.

Es decir, si tenemos algo como:
Código: Seleccionar todo

void vuln(...){

}

void func(){
  try{
        vuln(...);
  } except (...) {

 }
}


Entonces el manejador estara dentro del marco de func(), pero en el momento del overflow se encontrara probablemente mas alla de los parametros de vuln (si los tiene) puesto que func() primero crea el manejador y luego llama a vuln().

Me explico?

Sor_Zitroën escribió:En vez de sobreescribir next SEH y SEH Handler, ¿no podríamos hacer que SEH Handler apunte a un jumpcode para que salte a la shellcode directamente?

Y por otro lado, se supone que para aprovecharse de una sobreescritura SEH hace falta que se lance una excepción. En los vídeos que he visto, no aparece que en ningún momento se provoque una. ¿Qué me he perdido?


Respecto a lo primero, si, se puede. Pero ese jumpcode debe encontrar la shellcode, y si hay ASLR no sabemos donde estara y probablemente no tengamos un registro que apunte a ella. En cambio, si usamos la tecnica de sobreescribir con el 'pop;pop;ret' y meter el jump short despues, podemos usar cualquier pop;pop;ret de DLLs del sistema sin preocuparnos de la direccion exacta donde esta el buffer en la pila.

Respecto a la excepcion, si, hay que provocarla. No he visto los videos y mi conexion no va muy alla, pero una opcion es meter muuuuuuuchoooooos datos hasta que se salga de la pila. Otra opcion es sobreescribir algun puntero que se encuentre en las variables locales de la funcion vulnerable y se use antes de hacer el ret. Si no hay excepcion, no hay salto al SEH handler y por tanto no hay shellcode :)

Saludos!
TuXeD
Wadalbertita
Wadalbertita
 
Mensajes: 1053
Registrado: Sab Ene 29, 2005 12:46 pm

Re: Exploiting basico en Windows

Notapor Sor_Zitroën » Sab Sep 17, 2011 10:57 pm

TuXeD, te explicas. Es lo que dice Vivek, entre el EBP y las variables locales. No lo había pensado, pero no tiene sentido que esté por debajo del EIP ya que cuando se invoca a la función es de lo primero que se mete en el marco de pila. ¡Buen apunte!

Sobre next SEH y SEH Handler, no entiendo bien lo que comentas. Pero puede que no te entienda porque no tengo claros los conceptos de jumpcode y jump short. ¿Me lo puedes aclarar?

Y respecto a provocar la excepción, ¿lo de meter muchos datos es para sobreescribir el EIP y provocar una excepción de acceso a memoria no válido?
[Padre] ¿Crees en el fracaso?
[Hijo] Sí
[Padre] Entonces lo experimentarás
Avatar de Usuario
Sor_Zitroën
-<|:·þ
-<|:·þ
 
Mensajes: 2064
Registrado: Vie Nov 25, 2005 2:01 am

Re: Exploiting basico en Windows

Notapor vlan7 » Lun Sep 19, 2011 9:29 am

Sor_Zitroën escribió:Pero puede que no te entienda porque no tengo claros los conceptos de jumpcode y jump short. ¿Me lo puedes aclarar?


Leete el Where do you want to jump today? de Corelan que referencie al principio de este hilo, esto en particular no tiene demasiado misterio. Si aun asi te quedara alguna duda concreta, escupe guadalupe y a ver que podemos hacer entre todos.

Suerte,
There is a crack, a crack in everything That's how the light gets in. -subculture

zen7.vlan7.org
Avatar de Usuario
vlan7
<|:-D
<|:-D
 
Mensajes: 1176
Registrado: Dom Mar 05, 2006 11:16 pm
Ubicación: Mas alla del EIP

AnteriorSiguiente

Volver a Programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado