Discussione HTB Writeups 0x03 - Traverxec

0xbro

Super Moderatore
24 Febbraio 2017
4,465
179
3,765
1,825
HTB Writeups 0x03 - Traverxec (4.7/10)
Questa macchina Linux è davvero molto particolare ma utile, soprattutto per il processo di privilege escalation, molto rapido ma impossibile se non si conoscono i GTFOBins.
traverxec.png


Per cominciare, come per ogni macchina, eseguiamo una scansione delle porte aperte:
Bash:
nmap -O -A -sV --script=banner -oN nmap.txt 10.10.10.165
# Nmap 7.80 scan initiated Tue Feb 18 22:09:54 2020 as: nmap -O -A -sV --script=banner -oN nmap.txt 10.10.10.165
Nmap scan report for 10.10.10.165
Host is up (0.049s latency).
Not shown: 998 filtered ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u1 (protocol 2.0)
|_banner: SSH-2.0-OpenSSH_7.9p1 Debian-10+deb10u1
80/tcp open  http    nostromo 1.9.6
|_http-server-header: nostromo 1.9.6
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Linux 3.10 - 4.11 (92%), Linux 3.18 (92%), Linux 3.2 - 4.9 (92%), Crestron XPanel control system (90%), Linux 3.16 (89%), ASUS RT-N56U WAP (Linux 3.4) (87%), Linux 3.1 (87%), Linux 3.2 (87%), HP P2000 G3 NAS device (87%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (87%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE (using port 80/tcp)
HOP RTT      ADDRESS
1   48.90 ms 10.10.14.1
2   49.13 ms 10.10.10.165

OS and Service detection performed. Please report any incorrect results at [URL]https://nmap.org/submit/[/URL] .
# Nmap done at Tue Feb 18 22:10:25 2020 -- 1 IP address (1 host up) scanned in 31.98 seconds

Notiamo come siano aperte soltanto due porte: la 22, con il servizio OpenSSH 7.9p1, e la porta 80, con un web server nostromo 1.9.6.
Visitiamo il sito per vedere se ci sia qualche cosa di interessante, ma trattandosi di un sito vetrina noteremo che i punti di interazione sono praticamente nulli.
Poichè è la prima volta che mi imbatto in questo web server, decido di fare una rapida di ricerca su internet, e scopro che la versione che abbiamo davanti è vulnerabile e permette l'esecuzione di codice remoto senza bisogno di autenticazione (CVE-2019-16278).
La CVE in questione dispone pure di Exploit pubblico, id 47837 su exploitdb, che è ciò che ci serve.
Scarichiamolo, creiamo un server netcat in ascolto e utilizziamo l'exploit per ottenere una reverse shell sulla macchina:
Screenshot_2020-02-18_22-28-18.png


Buono, abbiamo una shell con bassi privilegi, ma pursempre una shell.
Analizzando il file /etc/passwd scopriamo che l'utente della macchina si chiama david, ma provando a visitare la sua directory di home scopriamo anche che non dispone dei permessi di lettura per il nostro utente www-data.

Per cercare di elevare i nostri privilegi all'utente della macchina, carichiamo LinEnum.sh, un tool per la facilizzazione del processo di post exploitation, e vediamo se trova qualcosa.

Screenshot_2020-02-18_23-15-20.png

Terminata l'esecuzione del processo, notiamo come il tool abbia trovato un hash dell'utente david.
Cerchiamo di craccarlo con hashcat mentre continuiamo a cercare un modo per elevare i nostri privilegi.
Screenshot_2020-02-18_23-37-23.png

L'hash craccato restituisce come password Nowonly4me, ma provando a usarla in giro scopriamo che non serve a nulla. Rabbit Hole!

Continuiamo la nostro enumerazione analizzando i file di configurazione del web server nostromo.
Screenshot_2020-02-19_23-02-24.png


Il file nhttpd.conf sembra suggerirci che all'interno della home di david, ci possa essere una cartella chiamata public_www.
Proviamo ad entrarci, e scroptiamo che oltre a essere accessibile contiene pure una cartella interessante, chiamata protected-file-area.
Entriamo nella cartella e scopriamo un archivio di backup contenente le chiavi ssh di david.
Scarichiamole e proviamo a craccarle!
Screenshot_2020-02-19_23-16-42.png

Screenshot_2020-02-20_08-52-10.png


Trovata la password della chiave, possiamo utilizzarle per loggarci in SSH come utente david!

Il nostro compito ora è quello di eseguire privilege escalation e diventare root.
Iniziamo a dare uno sguardo alla cartella bin, e analizziamo il piccolo script contenuto al suo interno
Screenshot_2020-02-21_20-53-59.png

Possiamo notare come venga eseguito il comando journalctl tramite sudo, e il risultato venga passato poi al comando cat per mostrarlo a video in maniera uniforme.

Ho cercato in lungo e in largo per il web un possibile exploit per journalctl, ma senza trovare nulla. Dopo qualche ora di ricerca, approdo su una pagina chiamata GTFObins, dove si parlava appunto di un metodo per eseguire privilege escalation tramite il programma in questione.
Di seguito il link alla pagina: https://gtfobins.github.io/gtfobins/journalctl/

Cito ciò che viene recitato all'interno della pagina:
This invokes the default pager, which is likely to be less, other functions may apply.
...
It can be used to break out from restricted environments by spawning an interactive system shell.
...
It runs in privileged context and may be used to access the file system, escalate or maintain access with elevated privileges if enabled on sudo.

Tradotto in semplici parole: per mostrare a video l'output del comando, il programma journalctl utilizza di default il comando less (per questo motivo nello script veniva rediretto poi al comando cat).
Questo comando però "ha un difetto": una volta eseguito, resta in attesa di un comando di un utente (solitamente le freccette per navigare l'output o il testo "Q" per uscire dal comando less).
In questa situazione però, sarà possibile anche evadere dal comando less.
Poichè journalctl può essere eseguito con privilegi elevati tramite il comado sudo, sfruttando questa feature del comando less è possibile ottenere una shell come root!
Screenshot_2020-02-21_21-47-34.png

Screenshot_2020-02-21_21-48-02.png


Come detto, questa macchina non è per nulla difficile, ma permette di imparare/affinare importanti concetti di Lateral Movement e Post Exploitation!
E' stata la prima volta che mi imbattevo in GTFOBins, e sebbene sia stato uno sclero, ho imparato una nuova categoria di Privilege Escalation. Spero lo stesso anche per voi :D

Autore: 0xbro
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.