Exploiting basico en Windows

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

Moderador: Moderadores

Exploiting basico en Windows

Notapor neofito » Lun Abr 18, 2011 9:09 pm

Hola a todos

Hace algunos dias vengo leyendo los tutoriales de http://www.corelan.be relativos a exploiting y me he atascado un poco.

Resulta que estoy tratando de explotar un stack based buffer overflow tipico en el programa mp3-millenium utilizando un fichero m3u especialmente creado.

Soy capaz de sobreescribir EIP y a continuacion 10 bytes en ESP que, resulta obvio, no son suficientes para incluir una shellcode. Buscando un poco mas he localizado el comienzo del buffer utilizado en ESP-1007 (o EBP-1027) por lo que supongo podria generar un jumpcode para llegar hasta alli, pero no soy capaz.

Incluir directamente la direccion del comienzo del buffer no me ha funcionado ya que, al tratarse de 125d64 contiene bytes nulos, o al menos eso es lo que creo. Tambien he observado que controlo la direccion a la que apuntan ebx, esi y edi, pero no se me ocurre de que pueden servirme.

Apuntar por ultimo que no tengo que lidiar con ASLR ni otros tipos de mitigaciones (bastante tengo con entender lo basico) y que mis conocimientos de ensamblador estan muuuy limitados.

¿Alguna idea o referencia que pueda serme de ayuda? Preferiblemente referencias, no pretendo que me resolvais el problema, sino entenderlo.

Saludos
La verdad nos hara libres

http://neosysforensics.blogspot.com
http://www.wadalbertia.org
@neosysforensics
-<|:-P[G]
Avatar de Usuario
neofito
Wadalbertita
Wadalbertita
 
Mensajes: 1799
Registrado: Dom Ene 30, 2005 7:16 am
Ubicación: En algun lugar

Re: Exploiting basico en Windows

Notapor vlan7 » Mar Abr 19, 2011 6:39 am

Buenas,

¿Has mirado si en alguna DLL del programa existe un jmp esp? (opcodes FF E4)

Si existe, puede que un enlace similar a este te sirva.

Un saludo.
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 NewLog » Mar Abr 19, 2011 3:35 pm

Buenas neofito,

Decirte que dudo que hayas podido empezar por unas guías de exploiting en windows mejores.
Al tema:

neofito escribió:Incluir directamente la direccion del comienzo del buffer no me ha funcionado ya que, al tratarse de 125d64 contiene bytes nulos, o al menos eso es lo que creo. Tambien he observado que controlo la direccion a la que apuntan ebx, esi y edi, pero no se me ocurre de que pueden servirme.


Decir que de explotación en Windows no tengo ni idea, aunque quizá puedo aclararte algo. Una dirección en hexadecimal tiene un byte nulo cuando aparece un 0 en la dirección. Veo que tu dirección en hexadecimal, que desde un principio me parece muy extraña, 125d64 no tiene ningún byte nulo, aunque quizá falten 0's delante o detrás ^^.
En fin, si la dirección sólo tiene un byte nulo (hacia el final), como por ejemplo, 0xbffff330, probablemente, puedas cambiar ese 0 por otro valor y saltar al medio del búfer (que contendrá NOPs).

Saludos.
Imagen
http://www.overflowedminds.net - Quieres introducirte al exploiting?
Avatar de Usuario
NewLog
<|:-D
<|:-D
 
Mensajes: 1130
Registrado: Sab Ene 14, 2006 1:03 am

Re: Exploiting basico en Windows

Notapor neofito » Mar Abr 19, 2011 5:41 pm

vlan7 escribió:¿Has mirado si en alguna DLL del programa existe un jmp esp? (opcodes FF E4)


No tengo problema en localizar un "jmp esp", de hecho sobrescribo eip con esa direccion y funciona perfectamente. El problema esta en saltar a la shellcode, que no se como hacerlo.

Reviso el enlace que me has pasado.

NewLog escribió:Decir que de explotación en Windows no tengo ni idea, aunque quizá puedo aclararte algo. Una dirección en hexadecimal tiene un byte nulo cuando aparece un 0 en la dirección. Veo que tu dirección en hexadecimal, que desde un principio me parece muy extraña, 125d64 no tiene ningún byte nulo, aunque quizá falten 0's delante o detrás ^^.


Exactamente, la direccion es 0x00125d64.

Gracias a los dos por la ayuda, seguire pegandome.
La verdad nos hara libres

http://neosysforensics.blogspot.com
http://www.wadalbertia.org
@neosysforensics
-<|:-P[G]
Avatar de Usuario
neofito
Wadalbertita
Wadalbertita
 
Mensajes: 1799
Registrado: Dom Ene 30, 2005 7:16 am
Ubicación: En algun lugar

Re: Exploiting basico en Windows

Notapor TuXeD » Mar Abr 19, 2011 11:04 pm

Hola,

Veamos, resumiendo tienes esto:

<~1008bytes?><ret><10bytes>

Ademas, puedes localizar un jmp esp facilmente segun comentas. Lo que puedes hacer entonces es lo siguiente:

<nops+shellcode><dir jmp esp><jmp -0x200>

Es decir, meter un jmp hacia atras justo despues de la direccion de retorno. Al retornar a esp, se ejecuta ese jmp hacia atras y acabas cayendo en tu shellcode. El salto se codificaria tal que asi:

Código: Seleccionar todo
[email protected]:~/dev/radare2$ rasm2 "jmp -0x300"
e9fb7cfbf7
[email protected]:~/dev/radare2$


Lo cual salta hacia atras 0x300 bytes, es decir 768 bytes. Asi que si alineas los nops al principio metiendo suficientes, luego la shellcode justo antes del ret, despues el ret a un jmp esp y finalmente ese salto hacia atras deberias caer en tu shellcode.

Saludetes, y ya nos cuentas que tal ha ido :)
TuXeD
Wadalbertita
Wadalbertita
 
Mensajes: 1053
Registrado: Sab Ene 29, 2005 12:46 pm

Re: Exploiting basico en Windows

Notapor NewLog » Mié Abr 20, 2011 11:50 am

Eso nunca lo había leído! Lo tendremos que provar :embudito:
Imagen
http://www.overflowedminds.net - Quieres introducirte al exploiting?
Avatar de Usuario
NewLog
<|:-D
<|:-D
 
Mensajes: 1130
Registrado: Sab Ene 14, 2006 1:03 am

Re: Exploiting basico en Windows

Notapor TuXeD » Mié Abr 20, 2011 5:00 pm

Ojo que creo que el encoding que di es incorrecto. Parece un bug en el engine de assembly.

El encoding correcto es este:

e9<little endian 32bit displacement>

Con lo que esto serviria:

e90Afdfffff

Ya que el displacement sera 0xFFFFFD0A, que es equivalente a -758 bytes desde el final del opcode. Esto significa que tendras unos 700 bytes libres para tu shellcode.

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

Re: Exploiting basico en Windows

Notapor vlan7 » Jue Abr 21, 2011 3:25 pm

Ahí va un buen texto de Corelan sobre los saltos:

Where do you want to jmp today ?
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 neofito » Lun Abr 25, 2011 10:17 pm

Recien aterrizo de este largo puente. A ver si retomo el tema y comento.

Saludos

PD: En general todos los textos que he leido de Corelan son bastante recomendables.
La verdad nos hara libres

http://neosysforensics.blogspot.com
http://www.wadalbertia.org
@neosysforensics
-<|:-P[G]
Avatar de Usuario
neofito
Wadalbertita
Wadalbertita
 
Mensajes: 1799
Registrado: Dom Ene 30, 2005 7:16 am
Ubicación: En algun lugar

Re: Exploiting basico en Windows

Notapor Sor_Zitroën » Dom Ago 21, 2011 10:57 am

Hola Neo,

no entiendo lo que dices de que sólo tienes disponibles 10 bytes después del EIP (donde estaría el puntero a argv1). ¿Se acaba ahí la pila y no tienes más marcos? Porque sino no lo veo... más que nada porque en el texto de Corelan escribe la shellcode ahí.

Y por otro lado, ¿te ha funcionado lo de saltar hacia atrás que te comentaba TuXeD?

A ver qué nos dices, que tengo curiosidad por saber cómo has quedado :)
[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 Ago 21, 2011 11:31 am

Más cosas.

Puede que me lance a probarlo, pero tengo alguna duda. ¿Tú lo estás probando en Windows XP SP3 como dice Corelan? Aunque sea así, DEP se introdujo en XP SP2; pero en el texto no dice nada de desactivarlo. ¿Tú qué has hecho?

EDIT: si el binario no ha sido enlazado con DEP, aunque el SO incluya protección no debería haber problema. Si me equivoco que alguien me corrija.


OT: esta duda ya no tiene nada que ver, pero por si alguien lo sabe. ¿Todos los XP son de 32 bits, o hay alguno de 64? Para hacer las pruebas utilizaría Dev-C++, y echando un ojo rápido veo que sólo está para 32 bits.
[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 neofito » Dom Ago 21, 2011 2:51 pm

Hola Sor

Hace tiempo que abandone el tema pero creo que recuerdo algo, no obstante seguramente sea una excusa perfecta para retomarlo.

no entiendo lo que dices de que sólo tienes disponibles 10 bytes después del EIP (donde estaría el puntero a argv1). ¿Se acaba ahí la pila y no tienes más marcos? Porque sino no lo veo... más que nada porque en el texto de Corelan escribe la shellcode ahí.


Creo recordar que ese era el espacio del buffer que quedaba disponible, o sea, donde podia escribir despues del desbordamiento.

Y por otro lado, ¿te ha funcionado lo de saltar hacia atrás que te comentaba TuXeD?


Seguramente el fallo seria mio pero no, no me funciono.

Puede que me lance a probarlo, pero tengo alguna duda. ¿Tú lo estás probando en Windows XP SP3 como dice Corelan? Aunque sea así, DEP se introdujo en XP SP2; pero en el texto no dice nada de desactivarlo. ¿Tú qué has hecho?


Windows XP SP3 con las opciones por defecto (DEP habilitado).

¿Todos los XP son de 32 bits, o hay alguno de 64? Para hacer las pruebas utilizaría Dev-C++, y echando un ojo rápido veo que sólo está para 32 bits.


Puedo confirmar que existe la version Professional x64.

Saludos
La verdad nos hara libres

http://neosysforensics.blogspot.com
http://www.wadalbertia.org
@neosysforensics
-<|:-P[G]
Avatar de Usuario
neofito
Wadalbertita
Wadalbertita
 
Mensajes: 1799
Registrado: Dom Ene 30, 2005 7:16 am
Ubicación: En algun lugar

Re: Exploiting basico en Windows

Notapor Sor_Zitroën » Dom Ago 21, 2011 4:03 pm

neofito escribió:
Sor_Zitroën escribió:no entiendo lo que dices de que sólo tienes disponibles 10 bytes después del EIP (donde estaría el puntero a argv1). ¿Se acaba ahí la pila y no tienes más marcos? Porque sino no lo veo... más que nada porque en el texto de Corelan escribe la shellcode ahí.

Creo recordar que ese era el espacio del buffer que quedaba disponible, o sea, donde podia escribir despues del desbordamiento.


No me cuadra mucho la verdad.


neofito escribió:Puedo confirmar que existe la version Professional x64.

Bueno es saberlo, gracias :)

Yo voy a hacer pruebas con esto para aclararme un poco más, así que si te apuntas genial. Por lo pronto estoy preparando el entorno, que da un poco por saco porque entre el Inmunity Debugger, WinDbg, un intérprete de Perl... pero bueno me falta el WinDbg que me da fallo.

¿Alguien sabe si es necesario un Windows legal para que funcione? Porque el mío más ilegal no puede ser :), y no sé si va por ahí el fallo de instalación.
[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 Ago 21, 2011 10:16 pm

Al final he pasado tres pueblos del WinDbg y lo he hecho todo con Inmunity. Después de chorrocientas horas y con un jmp esp de una librería de Win (aunque no sea lo óptimo)... ¡he conseguido sacar una calc! No he podido con la shell remota, no lo ejecuta no sé por qué; pero para que quiero una shell remota teniendo una calc! :embudito: :embudito:

En fin, que ya me puedo dar con un canto en los dientes :). Neo échale algo de ganas y lo sacas, porque no hay mayor problema en escribir por detrás del EIP, y la verdad no sé cómo sacaste la conclusión de que tenías 10 bytes de espacio.

Si alguien se anima, pues mejor. Y a ver si sacamos la shell remota, que hay ganas.

PD: para el que vaya a jugar un poco, que eche antes un ojo al plugin de Inmunity Mona. Se ahorrará tiempo luego si quiere generar patrones para descubrir el offset de sobreescritura de EIP, opcodes o buscar jumps al registro que le interese. A mí me ha venido bien para lo último, y si hubiera sabido lo de crear patrones y buscar offsets me hubiera ahorrado utilizar Metasploit en otra máquina y copiar por usb :)
Última edición por Sor_Zitroën el Dom Ago 21, 2011 11:49 pm, editado 2 veces en total
[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 neofito » Dom Ago 21, 2011 11:01 pm

Pues ahora mismo estoy pegandome con apkinspector y reversing de aplicaciones apk (para android) pero pienso retomar el tema en cuanto termine.

Saludos
La verdad nos hara libres

http://neosysforensics.blogspot.com
http://www.wadalbertia.org
@neosysforensics
-<|:-P[G]
Avatar de Usuario
neofito
Wadalbertita
Wadalbertita
 
Mensajes: 1799
Registrado: Dom Ene 30, 2005 7:16 am
Ubicación: En algun lugar

Siguiente

Volver a Programación

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 1 invitado

cron