La guida definitiva alla stanza MADNESS!!!

Le attività di hacking richiedono uno studio duro e intenso ed anche una pratica costante e come ovvio questa non può essere praticata attaccando sistemi di produzione reali. Le tecniche vanno provate, confutate, affinate e quindi è importante poter contare su macchine vulnerabili e studiate per essere un campo di prova. Una delle risorse principali a disposizione degli hacker sono le macchine CTF, Capture the Flag, messe a disposizione da molti servizi online come tryhackme.com o hackthebox.com.

Una CTF è sostanzialmente un server impostato con alcune vulnerabilità; l’hacker deve riuscire a sfruttarle per arrivare ad aprire uno o più file contenenti dei codici che testimoniano l’avvenuta violazione della macchina.

Questa è la guida per la risoluzione della stanza MADNESS su tryhackme.com.

Ci viene chiesto di scoprire il contenuto del file user.txt e poi di elevare i nostri privilegi sino a diventare amministratori di sistema (root) per visualizzare il contenuto del file root.txt nella cartella root.

La Scansione delle Porte

Il primo passo è avviare il server vulnerabile, in questo caso dalla stanza “Madness” di tryhackme.com. Una volta avviato il server bisogna fare attività di Reconaissance per raccogliere più informazioni possibili sulla macchina, sui servizi che offre ed ovviamente sulle sue debolezze. Per raggiungere questo obbiettivo avvieremo una scansione delle porte logiche TCP/UDP attraverso un programma chiamato NMAP per scoprire quali sono aperte e quali chiuse.

Per capire cosa sia una porta logica immaginate la vostra attività quotidiana al computer; inviate e ricevete mail, navigate in internet, fate una videochiamata, giocate. Questo flusso costante di dati va organizzato e separato perché due macchine possano dialogare. Questa separazione viene fatta attraverso delle strutture concettuali, le porte, verso il quale il computer indirizza la porzione di flusso dati corrispondente ad un certo protocollo.

Se sto navigando su un sito internet il flusso dati generato dal protocollo HTTP verrà inviato alla porta 80, se invece il flusso di dati è HTTPS la porta interessata sarà la porta 443. Questo avviene per le mail, per le chiamate VoIP e per tutti i servizi gestiti dal nostro computer e ovviamente dal server che dall’altra parte del filo ci mette a disposizione i suoi servigi.

Abbiamo parlato di porte logiche TCP/UDP in questo caso la differenza la fa il protocollo, i protocolli TCP richiedono che tra client (il nostro computer) e server ci sia un dialogo del tipo domanda/risposta perché il flusso di dati venga trasferito, mentre nel caso dei protocolli UDP la macchina che riceve i dati si limita a riceverli senza inviare risposte il che rende più veloce la comunicazione, ma di contro chi invia i dati non avrà la certezza che essi siano arrivati.

NMAP

Fatta questa premessa lanciamo una scansione delle porte del nostro target attraverso nmap contro l’indirizzo ip del server che ci viene fornito con queste opzioni:

  • -sS è l’opzione che permette di rimanere più nascosti non terminando mai la fase di connessione;
  • -A lancia una serie di analisi in maniera da ottenere le versioni dei protocolli e info sul Sistema Operativo.

Il risultato ci avvisa che è aperta la porta per le connessioni tramite protocollo SSH (22 TCP) , un protocollo per connettersi da remoto ad una macchina che richiede di autenticarsi con una username ed una password. Questo ci dice che parte della nostra attenzione dovrà essere dedicata alla ricerca di un set di credenziali per accedere alla macchina.

Inoltre sulla macchina è aperta la porta TCP 80 (protocollo HTTP), quindi la macchina ospita un webserver, in parole povere un sito internet.

La pagina del sito web ospitato dal server che vogliamo attaccare, una piccola stranezza c’è, vedremo più avanti…

A questo punto non potendoci loggare tramite SSH, proviamo ad indagare più a fondo il web server tentando di scoprire se ci sono delle cartelle nascoste tramite il tool gobuster. Questo programma prende una lista di parole, ad esempio “contatti“, “admin“, “login“, e crea un URL “http://10.10.121.51/contatti” per scoprire se quella pagina esiste. In questo modo si possono scoprire pagine “nascoste” nei siti che magari contengono form per loggarsi oppure informazioni preziose.

Analizziamo il sito web

Le opzioni da utilizzare per usare gobuster sono:

  • dir è l’opzione che indica che vogliamo enumerare le directory;
  • -u specifica l’URL dal quale partire;
  • -w specifica il file che contiene le parole che vogliamo utilizzare come nomi delle directory.

Purtroppo il risultato di gobuster è deludente e non porta a nulla; sembra che il sito abbia solo la pagina che visualizziamo e allora analizziamola!

Come possiamo notare dall’immagine pubblicato più sopra, qualcosa in quella pagina è anomalo ed è l’immagine che non si carica in alto a destra. Cliccando sul tasto destro del mouse in punto qualsiasi della pagine e selezionando “View Page Source” possiamo vedere il file che genera la pagina e proprio in corrispondenza dell’immagine che non si carica troviamo un commento (“They will never find me“, “loro non mi troveranno mai”???)… molto strano!!!

Un’immagine sospetta!

Non potendola visualizzare scarichiamola e proviamo ad analizzarla attraverso exiftool, un programma per la lettura e manipolazione dei metadati di una immagine.

Grazie a questo tool scopriamo qualcosa di ancora più strano. Nonostante sia salvata con una estensione .jpg (thm.jpg) , nella realtà sembra essere una immagine PNG, quindi un formato di file diverso da quello che dovrebbe essere.

Il Magic Number

Indaghiamo ancora a fondo utilizzando un tool che si chiama hexedit che ci permette di vedere e manipolare il codice binario dei file. Grazie a questo tool scopriamo che in effetti il magic number dell’immagine è di un file PNG e non di un JPEG, ma cos’è il Magic Number?

Il Magic Number è un codice scritto all’inizio di ogni file che ne identifica la tipologia permettendo al computer di leggerlo correttamente. In questo caso il file è una immagine .jpg, ma il computer tenta di trattarla come un file .png, da qui l’impossibilità di visualizzarlo correttamente.

Per risolvere questo problema usiamo hexedit per inserire il corretto magic number relativo alle immagine jpg che è FF D8 FF E0 00 10 4A 46 49 46 00 01.

Ancora pagine nascoste

Finalmente possiamo visualizzare l’immagine che ci svela una directory nascosta.

ovviamente il nome delle directory non ve lo diciamo 🙂

E andando alla pagina nascosta, ancora una volta a prima vista non appare nessun indizio significativo.

L’immagine della pagina nascosta!!!

A questo punto analizziamo ancora una volta la sorgente delle pagine per trovare un nuovo strano commento.

E cosi c’è un’altra pagina nascosta…

Sembra che ci sia ancora una pagina nascosta all’indirizzo http://10.10.121.51/*************/?secret=, seguito da un numero compreso tra 0 e 99.

Burp Suite

Scartando l’idea di provare manualmente le 100 possibilità apriamo l’applicazione Burp Suite, un programma capace di dialogare con un webserver, intercettandone il flusso dati per poi manipolarlo. Nel nostro caso useremo Burp Suite per inviare in automatico le 100 richieste di accesso alle 100 possibili pagine nascoste.

Visitiamo la pagina incriminata attraverso il browser integrato in Burp Suite e inviamola questa richiesta al modulo “intruder“.

La richiesta alla pagina segreta inviata al modulo “intruder”

Selezioniamo tramite l’opzione “add” la stringa da cambiare è $0$, poi spostiamoci nel tab “payload” e selezioniamo “number” come “payload type” e il range da 0 a 99.

Le opzioni da selezionare

Dopo facciamo partire l’attacco e nei risultati vedremo che una sola pagina ha una dimensione maggiore delle altre.

Andiamo a visitarla e ci verrà svelato un nuovo codice.

Una sola delle possibili 100 pagine ha una dimensione diversa dalle altre… trovata!

A questo punto visitiamo la pagina nascosta per ottenere un nuovo indizio, un codice alfanumerico.

Ancora un indizio, cosa sarà mai questo codice?

Immagine e codici segreti

Ora ho perso un po’ di tempo a cercare di decifrarlo per poi scoprire che siamo di fronte ad un esempio di steganografia ossia la tecnica di nascondere dei file dentro ad altri file e questo codice è la password per poter estrarre un file nascosto nell’immagine thm.jpg.

Utilizziamo l’app steghide sulla nostra immagine e estraiamo il file hidden.txt.

Certo che uno username cosi strano (wbxre) desta qualche sospetto… che ci sia ancora da indagare?

Un codice da cucinare

Presupponendo che sia cifrato proviamo ad usare i tool del sito CyberChef per vedere se ne salta fuori qualcosa di meno strano.

Applichiamo un semplice cifrario di Cesare a 13 rotazione ed ecco che abbiamo scoperto il vero username.

Un semplice cifrario di Cesare. Ne abbiamo già parlato qui

E adesso la Password

Ora che abbiamo un username, ci manca solo una password e per trovarla ci viene in aiuto l’unica altra immagine che abbiamo a disposizione, quella in apertura del nostro articolo e di presentazione della CTF.

Facciamo il download dell’immagine e poi utilizziamo ancora steghide con passphrase in bianco (niente) per ottenere la nostra password.

Ora abbiamo uno username e una password per collegarci tramite il protocollo ssh alla server target. Ed ecco che accedendo ci troviamo al cospetto del nostra prima flag, user.txt.

Finalmente siamo dentro il computer che volevamo violare!

Dentro la tana del Bianc Coniglio!

Adesso che siamo dentro il server dobbiamo pensare come ottenere i privilegi di amministratore per avere accesso alla cartella root e al file root.txt. Per prima cosa cerchiamo se ci sono delle applicazioni che possono essere lanciate con i permessi dell’amministratore attraverso il comando find con le opzioni necessarie per trovare i file con i permessi SUID. I permessi SUID sono quelli dei file che possono essere avviati da qualsiasi utente, ma che ereditano i permessi di amministratore per svolgere i propri compiti. Immaginate di essere un utente che vuole cambiare la propria password; per farlo il programma da utilizzare deve essere avviato dall’utente, ma deve anche agire come amministratore del sistema ed è qui che intervengono i permessi SUID.

Scopriamo cosi i file SUID ben conosciuti e che non hanno debolezze note, ma tra essi ce n’è uno inusuale: il file binario screen-4.5.0.

Con un po’ di ricerca online si trova sul sito exploit-db un exploit da sfruttare per lanciare un terminale con i privilegi da amministratore. Un exploit è un codice che se eseguito sulla macchina attaccata permette di prenderne possesso, oppure di svolgere attività per aggirarne i sistemi di sicurezza; in questo caso per passare da un utente normale all’utente “root”, ossia l’amministratore di sistema, realizzando quella che si definisce una Local Privilege Escalation.

Nel nostro caso l’exploit è uno script, ossia un file di testo interpretato dal computer come una lista di comandi da eseguire. A questo punto basta aprire nano, un editor utilizzabile da terminale e creare un file nel quale copiare il contenuto dell’exploit.

L’exploit copiato nel file creato con nano

Una volta creato il file bisogna renderlo eseguibile tramite il comando nella prima riga dell’immagine sotto e avviarlo con il comando nella seconda linea.

Avviato il nostro exploit ecco che siamo diventati l’utente root e possiamo finalmente accedere alla seconda flag: root.txt.

Il gioco è fatto!

Articolo creato 84

Articoli correlati

Inizia a scrivere il termine ricerca qua sopra e premi invio per iniziare la ricerca. Premi ESC per annullare.

Torna in alto