Parte 5 — Explotación de sistemas y binarios

⬅️ Volver al programa · 📚 Índice completo · ⏭️ Parte siguiente

25 clases · rango 116–140 · Assembly, buffer overflows, ROP, heap, fuzzing e ingeniería inversa

Fuentes de referencia de esta parte:


🎯 ¿De qué trata esta parte?

Esta parte baja al nivel más profundo de la seguridad ofensiva: la memoria de un proceso, el juego de registros de la CPU y los bytes de un binario compilado. Aquí aprenderás cómo un programa escrito en C se convierte en instrucciones máquina, dónde viven el stack y el heap, y por qué un simple error al copiar datos puede darle a un atacante el control del flujo de ejecución. Es el corazón del binary exploitation (pwn) y de la ingeniería inversa.

Importa porque las vulnerabilidades de corrupción de memoria siguen siendo, décadas después, una de las clases de fallos más críticas: alimentan exploits de kernel, cadenas de 0-day en navegadores y escapes de sandbox. Entender cómo funcionan por dentro te convierte en mejor defensor (sabes qué mitigar y por qué), mejor desarrollador (escribes código que no rompe la memoria) y mejor investigador (descubres y reportas fallos antes que los adversarios).

Sirve a pentesters que quieren ir más allá de la web, a analistas de malware que necesitan leer ensamblador, a investigadores de vulnerabilidades y a cualquiera que aspire a competir en CTFs de categoría pwn y reversing. El recorrido va de los fundamentos de la arquitectura x86/x64 hasta técnicas modernas de ROP, explotación de heap, fuzzing con AFL++ e introducción al kernel.

⚠️ Nota ética. Todo el contenido ofensivo de esta parte se practica exclusivamente en laboratorios propios (máquinas virtuales aisladas, binarios que tú compilas, retos de CTF con permiso) o con autorización explícita por escrito. Desarrollar o desplegar exploits contra sistemas de terceros sin consentimiento es ilegal en la mayoría de jurisdicciones.

🧩 Problemas que resuelve

🎓 Resultados de aprendizaje

Al terminar la parte, el alumno podrá:

  1. Explicar la arquitectura x86/x64: registros, modos, el stack y las convenciones de llamada.
  2. Depurar binarios con GDB+pwndbg y con radare2, inspeccionando memoria, stack y registros.
  3. Diagnosticar y explotar un stack buffer overflow controlando RIP/EIP.
  4. Escribir shellcode funcional y minimizar bytes nulos.
  5. Describir y evadir ASLR, DEP/NX, stack canaries y PIE con ret2libc y cadenas ROP.
  6. Explotar format strings, use-after-free, double free e integer overflows en laboratorio.
  7. Aplicar ingeniería inversa con Ghidra/IDA/radare2 y automatizar análisis dinámico.
  8. Encontrar bugs con fuzzing (AFL++/libFuzzer) y construir exploits con pwntools.

🧱 Prerrequisitos

Esta es la parte más técnica del programa; conviene traer estos cimientos firmes:

Necesitas tener claro… Dónde se cubre
CPU, registros, pila y el marco de llamada Clase 024
Procesos, memoria virtual y syscalls Clase 023
Encoding: hex, binario, bytes Clase 020
Python para escribir exploits (pwntools) Clase 015
Laboratorio aislado con snapshots Clase 004
Metodología ofensiva y ética Parte 3 · Clase 025

Además, saber programar en C es aquí un requisito real, no un adorno: hay que reconocer un strcpy peligroso, entender un puntero colgante y leer el pseudo-C de un decompilador.

🧭 Cómo recorrer esta parte

El orden es estricto y acumulativo, más que en ninguna otra parte. No se puede explotar un buffer overflow (119) sin entender el stack (117); no se puede hacer ROP (124) sin haber visto las mitigaciones que lo motivan (122); y el desarrollo de exploits moderno (138) integra literalmente todo lo anterior. Recórrela en orden, y no pases de una clase hasta que su laboratorio te salga: esta es una parte de hacer, no de leer.

El ritmo. La parte suma unas 50 h 10 min de trabajo guiado, y aquí el tiempo de laboratorio (repetir exploits, resolver retos) puede duplicar esa cifra —es normal y es donde se aprende—. A dos horas al día son unas seis semanas, pero el ritmo real lo marca cuánto tardes en que cada exploit funcione.

El método, clase a clase.

  1. Lee 🎯 Objetivo y 📚 Resultados de aprendizaje.
  2. Lee 🧠 Explicación en profundidad antes de tocar GDB. En esta parte el porqué es todo: un exploit que se copia sin entender falla al primer cambio de versión, offset o mitigación.
  3. Prepara el laboratorio de 🧰 Herramientas y preparación (GDB+pwndbg, pwntools, Ghidra, un binario vulnerable que tú compilas).
  4. Haz el 🧪 Laboratorio guiado: escribe el exploit, y cuando falle —fallará— depúralo hasta entender por qué. Ese ciclo es el aprendizaje.
  5. Resuelve ✍️ Ejercicios y el 📝 Reto verificable, casi siempre un binario que hay que explotar.
  6. Repasa el 📔 Glosario: la densidad de términos y siglas es la más alta del programa (RIP, RSP, GOT/PLT, ROP, UAF, ASLR, SMEP).

⚠️ Uso ético y legal. Todo aquí se practica sobre binarios que tú compilas, máquinas virtuales aisladas o retos de CTF autorizados (clase 140). Nunca contra software o sistemas de terceros sin permiso escrito. La explotación de kernel (139) se practica en una VM con QEMU precisamente porque un fallo es catastrófico. Repasa la Clase 025.

🧱 Anatomía de una clase

Las 25 clases siguen el estándar pedagógico profundo del programa:

Sección Qué contiene Para qué la usas
🎯 Objetivo Qué sabrás hacer al terminar y por qué importa Decidir si necesitas la clase
📚 Resultados de aprendizaje Lista verificable de capacidades concretas Autoevaluarte al final
🗺️ Temas Cada tema con el porqué de su inclusión Ubicarte antes de leer
🧠 Explicación en profundidad El mecanismo a nivel de memoria y registros, con diagramas Entender, no copiar exploits
📖 Definiciones y características Cada término desarrollado con su relevancia Consulta puntual
📔 Glosario Términos, siglas e instrucciones de la clase Repaso rápido
🧰 Herramientas y preparación Qué instalar y qué binario compilar Antes del laboratorio
🧪 Laboratorio guiado Exploit paso a paso contra un binario propio Donde de verdad se aprende
✍️ Ejercicios · 📝 Reto verificable Práctica propia y un binario que explotar Consolidar y demostrar
⚠️ Errores comunes · ❓ Preguntas frecuentes Fallos reales (offset, alineación, badchars) y dudas Cuando el exploit no funciona
🔗 Referencias Erickson, Andriesse, pwn.college, manuales de Intel Profundizar

El CI del repositorio verifica que ninguna clase de esta parte pierda las secciones 🧠 Explicación en profundidad ni 📔 Glosario.

🗺️ Estructura temática

Bloque Clases Contenido Tiempo
Fundamentos de bajo nivel 116–118 Arquitectura, stack/registros/ABI, debugging con GDB+pwndbg ≈ 5 h 50
Stack overflows y shellcode 119–121 Teoría, explotación práctica y escritura de shellcode ≈ 6 h 30
Mitigaciones y su evasión 122–124 ASLR/DEP/canaries/PIE, ret2libc y ROP ≈ 6 h 30
Otras clases de bugs 125–128 Format string, heap, UAF/double free, integer overflows ≈ 8 h
Windows y reversing 129–135 SEH, RE, Ghidra, IDA/radare2, estático/dinámico, anti-reversing ≈ 13 h 40
Descubrimiento y avanzado 136–140 Fuzzing, hallazgo de vulns, exploits modernos, kernel, CTFs ≈ 11 h

Fundamentos de bajo nivel
116-118

Stack overflows y shellcode
119-121

Mitigaciones y su evasion
122-124

Otras clases de bugs
125-128

Windows y reversing
129-135

Descubrimiento y avanzado
136-140

Parte 6: Analisis de malware

📖 Guía capítulo a capítulo

⚙️ Bloque 1 · Fundamentos de bajo nivel — clases 116 a 118

💥 Bloque 2 · Stack overflows y shellcode — clases 119 a 121

🛡️ Bloque 3 · Mitigaciones y su evasión — clases 122 a 124

🔬 Bloque 4 · Otras clases de bugs — clases 125 a 128

🪟 Bloque 5 · Windows y reversing — clases 129 a 135

🎯 Bloque 6 · Descubrimiento y avanzado — clases 136 a 140

🧰 Qué tendrás al terminar

🚦 ¿Puedo saltarme clases?

Casi no. Esta parte es una escalera: cada peldaño se apoya en el anterior. Sáltate una clase solo si respondes de memoria a su pregunta de control:

Si dominas… Pregunta de control Si titubeas
Stack (117) ¿En qué registros van los 3 primeros argumentos en x64 System V? Haz 117
Overflow (119) ¿Qué es el "offset" y por qué controlar RIP es el objetivo? Haz 119
Mitigaciones (122) ¿Por qué NX obliga a reutilizar código en vez de inyectarlo? Haz 122
ROP (124) ¿Por qué ret es el "pegamento" que encadena los gadgets? Haz 124
Heap (126) ¿Cómo enlaza el tcache sus chunks libres y por qué importa? Haz 126
Exploit dev (138) ¿Por qué casi ningún exploit moderno funciona sin un info leak? Haz 138

🔗 Referencias de la parte

▶️ Empezar

Clase 116 — Arquitectura x86/x64 y lenguaje ensamblador