Segmentation fault en una evasion ASLR/Linux con ret2reg

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

Moderador: Moderadores

Re: Segmentation fault en una evasion ASLR/Linux con ret2reg

Notapor TuXeD » Vie Ene 21, 2011 3:48 am

Hola :),

Aqui un link relacionado con las vtables:
http://www.phrack.org/issues.html?issue=56&id=8

La explotacion como ves es similar... solo que te has de construir una tabla de punteros que apunten a tu payload. Al acceder a una vtable, el codigo hace algo como esto en asm:

Código: Seleccionar todo
mov eax,[eax]
mov eax, [eax+offset]
call eax


O cosas similares. Asi pues, has de hacer que el puntero a la vtable apunte a datos que controlas, y luego ahi le pones varias veces la direccion de tu payload (hasta rellenar el offset que te interesa) y arreglado. Esto es muy comun en los exploits que se ven por ahi usando heap spraying. Intentan rellenar el address space con una serie de NOPs+shellcode, pero usan NOPs 'especiales'.

Por ejemplo, rellenan el address space con 0c0c0c0c*N+shellcode con la esperanza de obtener en algun momento la direccion 0c0c0c0c tambien, luego hacen el overflow con 0c0c0c0c. Esto implica que al leer de la vtable leera 0c0c0c0c, y al anyadir cualquier offset relativamente pequenyo lo que tendra sera de nuevo 0c0c0c0c como direccion.

Como consecuencia, al hacer el call saltara en los 0c0c's, que si desensamblais vereis que son "equivalentes" a un NOP:

Código: Seleccionar todo
$ rasm2 -a x86 -d "0c0c"
or al, 0xc


Y por ultimo, un pequenyo ejemplo de como conseguir direcciones de memoria en un exploit para IE de la version adecuada, por el amigo Ruben:
http://www.reversemode.com/index.php?op ... 8&Itemid=1

Echadle una ojeada... yo ahora mismo no puedo leerlo... estoy en cierto pais con un gran firewall y me da que lo tienen censurado o algo :S

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

Re: Segmentation fault en una evasion ASLR/Linux con ret2reg

Notapor NewLog » Sab Ene 22, 2011 1:21 pm

Gracias por los dos links, TuXeD. Hay algo de explotación de lo que no hayan escrito en la phrack? :badgrin:

En cuanto me ponga con el tema, me los leeré de pe a pa ^^.

Hay una cosa que no he acabado de entender de tu explicación, pero por el momento, mejor no te hago perder tu tiempo. Si después de leerme los papers estoy igual... Ya lo hablaremos :embudito:

Gracias!
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: Segmentation fault en una evasion ASLR/Linux con ret2reg

Notapor vlan7 » Sab Ene 22, 2011 6:39 pm

De sobreescritura de VPTRs diria que hay lo mismo que desde el 2000 que salio el articulo, ya que los prerrequisitos no son algo muy habitual (que se declare un buffer y una funcion virtual en C++ dentro del metodo a explotar).

Si quieres practicar tienes esto y esto.

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: Segmentation fault en una evasion ASLR/Linux con ret2reg

Notapor TuXeD » Dom Ene 23, 2011 2:58 am

Hombre, yo no diria que "no son algo muy habitual" la verdad... ya que usar funciones virtuales es algo muy habitual en C++ (para conseguir polimorfismo), y que si ocurre un overflow en una clase cualquiera estas soberscribiendo el VPTR en el caso de GCC/G++.

En el caso de otros compiladores que ponen la vtable al principio, la intencion seria manejar la pila de forma que tengas un objeto objetivo detras del objeto victima. Asi, haces el overflow sobrescribiendo la vtable de la victima y luego fuerzas la llamada de algun metodo de ese objeto (o esperas a que eso ocurra).

Aunque las condiciones son muy forzadas para ejemplos sencillos, a mi entender no lo son tanto para programas grandes como navegadores o lectores PDF con sus motores JavaScript que te permiten manipular el heap desde alli. Ademas, tecnicas similares se usan en heap overflows en el kernel intentando forzar el estado del heap a algo conocido, sobrescribiendo el objeto adyacente y forzando una llamada a una funcion de dicho objeto.

Aunque obviamente puedo estar equivocado :)
TuXeD
Wadalbertita
Wadalbertita
 
Mensajes: 1053
Registrado: Sab Ene 29, 2005 12:46 pm

Re: Segmentation fault en una evasion ASLR/Linux con ret2reg

Notapor NewLog » Dom Ene 23, 2011 2:50 pm

El enlace de Over The Wire es buenísimo. Me parece que ya lo había visto de casualidad alguna vez, pero esta vez no lo olvidaré! Seguro que si acabas resolviendo todos los niveles, acabas dominando muchísimo.

así que ya tengo un nuevo objetivo :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: Segmentation fault en una evasion ASLR/Linux con ret2reg

Notapor vlan7 » Mar Ene 25, 2011 1:28 am

Entonces seguro que conoces los de smashthestack, todo explotacion a la vieja usanza, overflows, etc. Si alguien sabe de algo similar que avise.

Saludos.
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: Segmentation fault en una evasion ASLR/Linux con ret2reg

Notapor NewLog » Mar Ene 25, 2011 2:24 am

El wargame que comentas sí que lo conozco. Nos tendríamos que poner a resolverlos y hacer sus respectivos write-ups... Aprenderíamos un huevo!

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: Segmentation fault en una evasion ASLR/Linux con ret2reg

Notapor vlan7 » Sab Feb 26, 2011 12:19 pm

Saludos desde el top del stack. Refloto el hilo para decir que el EIP ha sido sobreescrito y controlado! Ya lo documentare.
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: Segmentation fault en una evasion ASLR/Linux con ret2reg

Notapor NewLog » Sab Feb 26, 2011 3:21 pm

Jajajajaja, genial :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: Segmentation fault en una evasion ASLR/Linux con ret2reg

Notapor vlan7 » Sab Mar 19, 2011 1:03 pm

ey! sobre compartir los documentos no penseis que pasamos del tema, estamos puliendo cosas y en breve recibireis noticias mias y de NewLog. Los documentos por supuesto seran de libre descarga :)

Saludos.
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: Segmentation fault en una evasion ASLR/Linux con ret2reg

Notapor vlan7 » Dom Mar 27, 2011 12:31 am

Como lo prometido es deuda, podeis bajar el documento de NewLog de la seccion Papers de Overflowed Minds, y el mio sobre bypass de ASLR bajo Linux, puede ser descargado desde aqui.

Cualquier sugerencia o correccion es bienvenida.

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: Segmentation fault en una evasion ASLR/Linux con ret2reg

Notapor TuXeD » Lun Mar 28, 2011 12:59 pm

Hola,

He ojeado los documentos y tienen buena pinta como introduccion :) Respecto a los agradecimientos, para eso estamos, para compartir cosillas jeje.

Tengo un apunte para el tema de ret2reg, se puede usar por ejemplo msfelfscan de MSF para buscar jumps (o equivalentes) a un registro en binarios ELF (librerias del sistema, el propio bin vulnerable, etc):

Código: Seleccionar todo
$ ./msfelfscan -j eax /lib/libc.so.6
[/lib/libc.so.6]
0x00147374 push eax; ret
0x0014eaa4 push eax; retn 0x000d
0x00159b83 call eax
0x00159bb3 call eax
0x00159da5 call eax
0x00159e23 call eax
[...]
$ ./msfelfscan -j esp /lib/libc.so.6
[/lib/libc.so.6]
0x00145bd9 jmp esp
0x0017442a push esp; retn 0x8904
0x00174b88 push esp; retn 0x8b04
0x0019a77d jmp esp
0x001b18e1 push esp; retn 0x83f0
0x001c2da8 push esp; retn 0x8904
0x0024c1e9 push esp; ret
[..]


Lo que facilita encontrar la direccion de retorno ;)

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

Re: Segmentation fault en una evasion ASLR/Linux con ret2reg

Notapor NewLog » Mié Mar 30, 2011 10:13 am

Buenas TuXeD,

Tengo una pregunta para ti: (Al más puro estilo TVE)

En fin, si quieres explotar un sistema remoto, imagino que estas direcciones que muestras en el dump, con ASLR activado, no son las mismas de un sistema a otro, no? Por tanto este dato se debería obtener dinámicamente dentro del código del exploit, cierto?


Saludos y pásate algún día por Overflowed Minds :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: Segmentation fault en una evasion ASLR/Linux con ret2reg

Notapor TuXeD » Mié Mar 30, 2011 11:44 am

En fin, si quieres explotar un sistema remoto, imagino que estas direcciones que muestras en el dump, con ASLR activado, no son las mismas de un sistema a otro, no? Por tanto este dato se debería obtener dinámicamente dentro del código del exploit, cierto?


Depende del tipo de ASLR implementado. En Linux, con randomize_va_space a 1 se aplica ALSR sobre la pila solo, a 2 se aplica a stack y brk (heap) unicamente si no me equivoco. Esto significa que el codigo se encuentra siempre mapeado en la misma direccion (salvo conflictos de librerias ya cargadas en esa direccion o cosas asi) con lo cual si tu return esta en zona de codigo (lo cual necesitarias tb para saltarte DEP/NX) ya esta hecho.

Si se trata de un ASLR mas completo como el de Windows (o en caso de q linux no funcione como arriba), volvemos de nuevo a necesitar un infoleak que te de informacion del modulo donde estan tus return. Tu exploit deberia aprovechar primero el infoleak para sacar la base del ejecutable o la libreria que puedas sacar. Luego, tu exploit estaria basado en offsets relativos a esa direccion base y los calcularias en runtime como bien dices.

Una vez calculados, ya puedes lanzar tu payload para el "bug real" (osea el que te da RCE). Si no tienes un mem leak, y en caso de no tener DEP, puedes intentar hacer algo de spraying para meter tu codigo y aumentar las posibilidades de acierto.

Espero haberme explicado :)
TuXeD
Wadalbertita
Wadalbertita
 
Mensajes: 1053
Registrado: Sab Ene 29, 2005 12:46 pm

Re: Segmentation fault en una evasion ASLR/Linux con ret2reg

Notapor NewLog » Mié Mar 30, 2011 7:45 pm

Te has explicado :D


Ahora, redundando otra vez en lo mismo, tengo otra pregunta!

A ver, si no hay ASLR o es el ASLR de Linux (tal y como has explicado que es) las librerías del sistema operativo se cargan siempre en la misma dirección de memoria (a menos que hayan conflictos). Pero esto sólo es así con las librerías que forman parte del kernel, no? Quiero decir que, por ejemplo, el código de un ejecutable independiente o de una librería que haya programado el usuario se ubicará en una dirección de memoria 'aleatoria' dependiente de los programas que se esten ejecutando en esa sesión, no?

Con esto quiero llegar a que si un ejecutable cualquiera tiene una instrucción 'jmp esp' en una dirección en un sistema, ese mismo ejecutable no tiene porqué tener la misma instrucción en la misma dirección de memoria, cierto?

O sea, que sólo se puede aprovechar código de las librerías del kernel?

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

AnteriorSiguiente

Volver a Programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

cron