El problema que quería resolver
Aprender pentesting con Metasploit tiene una curva de entrada alta. Cada sesión de prácticas implica recordar la secuencia exacta de comandos: qué exploit usar, qué parámetros configurar, cómo construir el payload, cómo lanzar el listener. Para alguien que está aprendiendo, esa fricción hace que te centres más en memorizar comandos que en entender lo que ocurre.
Mi proyecto final de máster fue construir una herramienta que eliminara esa fricción: MSF-Assistant, una aplicación web local que orquesta Metasploit desde el navegador, guiando por las distintas fases de un test de penetración.
El entorno: Kali Linux + Metasploitable en VirtualBox
Todo el desarrollo y las pruebas se hicieron en Kali Linux corriendo en VirtualBox, con Metasploitable 3 como máquina objetivo en una red Host-Only aislada. Es el setup estándar para prácticas de pentesting en entornos controlados.
El reto técnico de partida: netdiscover y nmap necesitan permisos de red que desde un navegador normal son imposibles de obtener. La solución fue construir la interfaz como una aplicación Flask que corre localmente en Kali — el backend tiene acceso completo al sistema operativo y ejecuta los comandos reales, mientras el frontend recibe el output en tiempo real mediante Server-Sent Events.
La arquitectura: Flask + SSE + subprocess
El stack es intencionalmente simple:
\
app.py -> Backend Python/Flask
templates/index.html -> Frontend SPA (HTML/CSS/JS vanilla)
\\
La clave técnica está en el streaming de output. Cuando lanzas un escaneo o un exploit, el proceso puede tardar minutos. En lugar de esperar y mostrar todo al final, usé Server-Sent Events para que cada línea aparezca en pantalla en tiempo real, igual que en una terminal:
\`python
@app.route('/api/scan/stream')
def api_scan_stream():
cmd = ['sudo', 'nmap', '-sV', '--open', '-T4', network]
def generate():
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, text=True, bufsize=1)
for line in proc.stdout:
yield f"data: {line.rstrip()}\n\n"
yield "data: __DONE__\n\n"
return Response(generate(), mimetype='text/event-stream')
`\
En el frontend, un EventSource recibe cada línea y la pinta en un terminal simulado con colores según el tipo de mensaje.
Las fases del flujo
La herramienta guía por el flujo completo de un pentest.
1. Escaneo de red
Tres opciones reales que se ejecutan en el sistema: netdiscover, nmap ping scan y nmap full scan. El output aparece en tiempo real y al terminar se parsean automáticamente las IPs descubiertas para mostrarlas como objetivos seleccionables.
Aquí se ven los servicios detectados en Metasploitable 3: ProFTPD en el puerto 21, OpenSSH en el 22, Apache en el 80, Samba en el 445, MySQL en el 3306 y Jetty en el 8080.
2. Selección de exploit
Base de datos de exploits organizados por categoría (web, smb, ftp, ssh, irc, db, network) con buscador por nombre, CVE o puerto. Cada uno muestra su rank de Metasploit, CVE asociado y una nota sobre en qué condiciones funciona.
Algunos de los incluidos:
| Exploit | CVE | Target típico |
|---|---|---|
| SSH Login (credenciales por defecto) | — | Metasploitable 2/3 |
| Drupalgeddon2 | CVE-2018-7600 | Metasploitable 3, Drupal 7/8 |
| EternalBlue | CVE-2017-0144 | Windows 7 / 2008 R2 |
| Shellshock CGI | CVE-2014-6271 | Apache con CGI |
3. Configuración automática
Al seleccionar un host del escaneo y un exploit, la herramienta pre-rellena automáticamente RHOSTS con la IP del target y LHOST con la IP local de Kali. Solo hay que revisar y ajustar si hace falta.
Para los módulos de login (SSH, MySQL) incluí un diccionario de credenciales por defecto de las máquinas vulnerables más comunes: vagrant/vagrant para Metasploitable 3, msfadmin/msfadmin para Metasploitable 2, root sin contraseña para MySQL. La herramienta las prueba automáticamente y abre una sesión al primer acierto.
4. Lanzar en Metasploit
Genera un script .rc con todos los comandos configurados y ejecuta msfconsole -r. El output completo aparece en tiempo real en el terminal de la interfaz.
5. Generador de payloads (msfvenom)
Diez tipos de payload: ELF Linux x86/x64, EXE Windows x86/x64, PHP webshell, Python, Bash one-liner, WAR para Tomcat, ASPX para IIS, PowerShell. Con soporte para encoders y descarga directa del payload generado.
6. Post-explotación
Una vez dentro, panel con módulos post/ preconfigurados, comandos Meterpreter listos para copiar y técnicas de escalada de privilegios en Linux.
Resultado: acceso conseguido contra Metasploitable 3
El flujo completo que seguí en la prueba final:
- Escaneo con
nmap full scany aparece192.168.56.101con sus puertos - Selecciono el host, voy a Exploits y elijo SSH Login (credenciales por defecto)
- RHOSTS ya está relleno automáticamente, el diccionario se genera solo
- Pulso "Ejecutar en Metasploit"
- En segundos:
Success: 'vagrant:vagrant'ySSH session 1 opened
Acceso conseguido con privilegios sudo (groups=27(sudo)), todo automatizado desde la interfaz, sin escribir un solo comando manualmente.
Lo que aprendí
Técnicamente: la parte más interesante fue el streaming via SSE. Los procesos de Metasploit y nmap bufferizan su output, así que tuve que configurar bufsize=1 y text=True en subprocess.Popen para obtener salida línea a línea en tiempo real. También aprendí a generar scripts .rc de forma genérica para soportar cualquier exploit sin programar cada opción a mano.
De seguridad: construir la herramienta me obligó a entender en profundidad qué hace cada exploit, qué condiciones necesita y por qué funciona. Saber por qué Drupalgeddon2 no necesita credenciales, o por qué hay que apuntar al TARGETURI correcto, es mucho más valioso que ejecutar comandos de memoria.
Lo que haría diferente: añadiría autenticación a la interfaz web, un sistema de logs persistente para guardar los resultados de cada sesión, e integraría db_nmap para aprovechar la base de datos interna de Metasploit.
Herramientas utilizadas
Stack técnico:
- Python 3 + Flask — backend y servidor web local
- HTML / CSS / JS vanilla — frontend sin frameworks
-
Metasploit Framework — motor de exploits (
msfconsole,msfvenom) - nmap — escaneo de puertos y detección de servicios
- netdiscover — descubrimiento de hosts via ARP
- Kali Linux + VirtualBox — entorno de desarrollo y pruebas
- Metasploitable 3 — máquina objetivo para las pruebas
Desarrollo asistido por IA:
- Claude AI (Anthropic) — co-desarrollado con Claude como asistente de programación. Claude ayudó a estructurar la arquitectura, implementar el streaming via Server-Sent Events, depurar el backend Flask y diseñar la interfaz. Trabajar con IA no reemplaza entender lo que se construye: cada decisión técnica fue revisada, probada y ajustada manualmente en Kali.
Repositorio
El código completo está en GitHub:
github.com/Davidaah07/Proyecto-Master-Ciberseguridad-Evolve-DavidAah07
Incluye instrucciones de instalación, lista completa de exploits, diccionario de credenciales y aviso legal.
Proyecto académico desarrollado durante el Master en Ciberseguridad de Evolve.




Top comments (0)