Reconocimiento
Lo primero es asignar un nombre a la dirección IP de la máquina víctima en /etc/hosts para trabajar cómodamente contra el dominio:
Tras conectar la VPN comprobamos la conectividad con un ping ICMP:
Con conectividad confirmada empezamos los escaneos con Nmap. Primero identificamos qué puertos están abiertos y sus protocolos:
A continuación, un segundo escaneo más profundo para detectar las versiones de los servicios en ejecución:
Al visitar el dominio configurado en /etc/hosts, el servidor nos redirige a esta página:
Revisada la web principal, pasamos al fuzzing para descubrir los subdominios de la plataforma:
El fuzzing revela varios archivos ocultos y dos subdominios. El que nos interesa es el de admin, que nos lleva a un panel de login:
Explotación
Esta versión del panel de login es vulnerable a CVE-2025-32432, una vulnerabilidad de ejecución remota de comandos (RCE).
Arrancamos Metasploit con msfconsole:
Dentro de la consola buscamos el módulo asociado a la vulnerabilidad, CVE-2025-32432:
Seleccionamos uno de los módulos que aparecen y activamos el exploit correspondiente:
Con el módulo cargado, usamos set para revisar las variables configurables del ataque:
Configuramos el RHOSTS (host remoto) y el LHOST (host local):
RHOSTS hay que poner la IP de la máquina víctima, no el VHOST. Con las variables listas, lanzamos el ataque con exploit para obtener la RCE.
Al acceder a la terminal vulnerable, la consola interactiva de Meterpreter es limitada, así que prepararemos una reverse shell más cómoda:
Ponemos netcat a la escucha en un puerto libre. Meterpreter usa el 4444, así que empleamos el 4445 para la reverse shell:
En revshells.com generamos la reverse shell adecuada con nuestra IP y puerto:
Insertamos esa reverse shell en la sesión de Meterpreter. Para tener una shell en la víctima primero ejecutamos el comando shell:
Ya en la shell, lanzamos la reverse shell y recibimos la conexión en netcat:
Al comprobar la ruta en la que estamos —un directorio particular— y hacer ls -la, aparece un archivo oculto que ya habíamos entrevisto durante el fuzzing:
El contenido de ese archivo oculto no aporta gran cosa:
Revisando los usuarios existentes en el sistema:
Un detalle interesante: estamos ejecutando como el usuario asociado al servicio de nginx:
Explorando la ruta del servicio:
Encontramos un archivo oculto .env:
Dentro del .env aparecen credenciales de una base de datos:
Ya en la base de datos, listamos las tablas con show tables;:
Inspeccionamos los campos de la tabla users, la más interesante:
Con esa estructura montamos una consulta que devuelve usuarios, IDs, rol de administrador, correos y contraseñas. Aparecen hashes pertenecientes a un usuario admin:
Identificamos el tipo de hash con ayuda de la IA:
Con hashcat -h | less buscamos dentro de la referencia de modos; en este caso, el de bcrypt:
Localizamos el identificador de bcrypt:
Guardamos el hash en un .txt y lanzamos el ataque de diccionario con los parámetros correspondientes:
El cracking tiene éxito y obtenemos la contraseña en claro:
La contraseña coincide a nivel de sistema, así que entramos por SSH: es una vía más directa que la reverse shell y aporta todas las comodidades de una shell local, como el autocompletado por tabulador:
Y con ello obtenemos la flag de usuario:
cede1eb1622e7895041379944474b68d
Escalada de privilegios
Ya con el usuario Adam, comprobamos si hay puertos abiertos internamente que no estuvieran expuestos hacia el exterior:
El puerto 23 corresponde al servicio Telnet, como confirma una búsqueda rápida:
Comprobamos qué versión de Telnet corre exactamente y si es vulnerable:
La versión 2.7 es vulnerable a CVE-2026-24061, que permite bypassear la autenticación de Telnet con cualquier usuario y, con ello, escalar privilegios:
Existe un exploit público en GitHub. Tras descargarlo, la escalada resulta directa:
Con el exploit accedemos como root:
Y finalmente leemos la root flag:
a02f5a8d483b07176b26c522b470051c