Parte: 5 — Explotación de sistemas y binarios · Fuente: Andriesse, Practical Binary Analysis · docs GCC/Linux ⏱️ Duración estimada: 110 min · Nivel: Intermedio
Conocer las mitigaciones que la explotación moderna debe superar: ASLR (aleatorización de
direcciones), DEP/NX (memoria no ejecutable), stack canaries (detección de overflow) y PIE
(ejecutable posicionalmente independiente). Sabrás qué bloquea cada una, cómo verificarlas con
checksec y qué debilidad deja abierta cada mitigación, preparando el terreno para ret2libc (123)
y ROP (124).
Al finalizar, el alumno podrá:
checksec.| # | Tema | Por qué importa |
|---|---|---|
| 1 | ASLR | Aleatoriza stack/heap/lib/mmap |
| 2 | DEP/NX | Impide ejecutar datos (mata shellcode en stack) |
| 3 | Stack canary | Detecta sobrescritura del retorno |
| 4 | PIE | Aleatoriza también el código del binario |
| 5 | RELRO | Protege la GOT |
| 6 | checksec | Auditar todo de un vistazo |
| 7 | Flags de GCC | Cómo se activa cada una |
| 8 | Debilidades residuales | Por qué siguen cayendo binarios |
stack smashing detected).pip install pwntools # trae checksec
sudo apt install -y gcc
cat /proc/sys/kernel/randomize_va_space # 2 = ASLR completo
Entorno propio.
vuln.c con distintas protecciones y compáralas:bash
gcc vuln.c -o v_full # todas las mitigaciones por defecto
gcc -fno-stack-protector vuln.c -o v_nocanary
gcc -no-pie -fno-stack-protector vuln.c -o v_nopie
gcc -z execstack -no-pie -fno-stack-protector vuln.c -o v_open
bash
for b in v_full v_nocanary v_nopie v_open; do echo "== $b =="; checksec --file=$b; done
Observa el canary en acción: alimenta un overflow largo a v_full y verás *** stack smashing detected ***.
Comprueba ASLR: ejecuta ldd v_full dos veces con ASLR activo y nota que la base de libc cambia
(o usa cat /proc/self/maps en un pequeño script).
Desactiva ASLR temporalmente y confirma que las direcciones se estabilizan:
bash
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
# ...pruebas... luego revertir:
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
Desensambla el prólogo/epílogo de v_full y localiza la carga del canary desde fs:0x28 y su
comprobación antes de ret.
Anota, para cada mitigación, qué técnica de las siguientes clases la evade.
Genera cuatro binarios del mismo fuente con combinaciones distintas de protecciones y entrega la
salida de checksec de cada uno, clasificando cuál es más difícil de explotar y por qué.
Criterio de aceptación: identificas correctamente qué binario tiene NX+Canary+PIE+Full RELRO y justificas el orden de dificultad con base en las debilidades residuales.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
stack smashing detected |
El canary detectó tu overflow; necesitas filtrarlo primero |
| Direcciones cambian cada corrida | ASLR/PIE activos; hace falta un info leak |
| Shellcode en stack no ejecuta | NX activo; usa ret2libc o ROP |
| checksec dice "No canary" pero crashea igual | Otra mitigación (NX/PIE) está frenando el exploit |
| Olvidas revertir ASLR a 2 | Deja la VM menos segura; restaura tras el laboratorio |
❓ ¿Con todas activas es imposible explotar? No, pero sube mucho el coste: normalmente hace falta una fuga de información y cadenas ROP.
❓ ¿El canary protege variables locales? Protege la dirección de retorno; una escritura dirigida que salte el canary aún puede corromper otras cosas.
❓ ¿PIE y ASLR son lo mismo? No: ASLR aleatoriza librerías/stack/heap; PIE permite aleatorizar además el propio ejecutable.
Clase 121 — Escritura de shellcode