La sfida di Drunk_ Admin Web Challenge_ consiste nel trovare il messaggio che Bob ha inviato ad Alice. L’applicazione (un servizio di image hosting) include una serie di vulnerabilità e livelli che bisogna superare per trovare il messaggio. Come sempre, è una sfida trovata su Vulnhub, mentre per chi non sapesse da dove iniziare, rimando al livello 1 di Kioptrix.
L’applicazione si presenta come una brutta copia di un servizio di hosting d’immagini, con la possibilità di caricarle nel server e poi visualizzarle direttamente con il browser.
Dopo aver navigato nel sito, ho notato che nel footer sono presenti alcuni link esterni ad enti di validazione, ad eccezione del link a PHP, che punta a http://192.168.56.101:8880/myphp.php?id=102.
Visto che il link presente porta solo ai crediti di PHP, ho testato la variabile id con qualche attacco, come directory traversal e code injection. Non trovando nulla, sono passato ad un attacco a dizionario al link in questione, cercando qualche file esistente.
Il file di attacco, dopo aver provato alcune stringhe casuali, l’ho creato con un semplice script in bash, definito così
#!/bin/bash
for (( i=-1000; i<1000; i++ ))
do
echo $i;
done
Per attaccare ho utilizzato il proxy web ZAP. È un software molto simile a Burp Suite, ma open source, free e libero da ogni blocco (a differenza di Burp nella versione free).
Per eseguire l’attacco basta fare click destro sull’url da attaccare e selezionare Attack->Fuzz. Da li, bisogna inserire la posizione di attacco (quindi dove andranno le stringhe da testare), impostare il file contenente le stesse ed infine si avvia.
Dopo qualche minuto alcune pagine hanno risposto, e, sebbene non fosse proprio ciò che cercavo,hanno rivelato qualche informazione utile, come il sistema operativo, l’utente con cui operavamo e altri dettagli più o meno utili.
Essendo a mio parere un vicolo cieco, sono tornato indietro e ho iniziato a testare il form di upload, ipotizzando fosse vulnerabile al File upload.
Come ben sappiamo, se si dà la possibilità agli utenti di caricare file, bisogna stare ben attenti a filtrare tutto ciò che può essere pericoloso per il sistema. L’amministratore a quanto pare non era abbastanza ubriaco, infatti file con estensioni .php, .php.jpg e simili non vengono accettati.
L’unico modo che ho trovato per caricare codice nel server è stato quello di modificare l’estensione in .jpg.php (quindi un pò ubriaco lo era in effetti..), ma una volta caricata una shell casuale mi ha ritornato un errore.
Essendo probabilmente presente qualche sistema di filtraggio ho provato altre shell, fino a trovare quella che funzionasse. Per effettuare i tentativi ho utilizzato ZAP, in modo da non dover ogni volta ricaricare la pagina, sostituendo il codice e il formato direttamente dal proxy.
Per trovare il file caricato basta andare nell’url http://192.168.56.101:8880/images/codicehash.php
Visto che la shell in questione sembra abbia un problema con l’esecuzione dei comandi, senza modificarla ho navigato nel server in cerca di qualche file interessante.
Il primo file trovato, denominato .proof, contiene un incoraggiamento a continuare ed una chiave segreta:
######################## # Drunk Admin Challenge # # by @anestisb # #########################
bob> Great work.
bob> Meet me there.
...> ?
bob> What? You don't know where?
bob> Work a little more your post exploitation skills.
Secret Code: TGglMUxecjJDSDclN1Ej
Mail me your methods at: anestis@bechtsoudis.com
Dopo altri giri ho trovato la cartella dell’utente bob, contenente diversi file, molto probabilmente atti a decriptare il codice precedentemente trovato.
Visto che sembrava non funzionare (o a causa della shell ballerina o per colpa di permessi negati) ho scaricato le diverse pagine, incluse quelle nella cartella include, sul mio dispositivo e le ho eseguite da terminale.
Per poter eseguire il codice bisogna modificare il file index.php, sostituendo la GET con la chiave precedentemente trovata decodificandola in base64.
La stringa nel file index.php era, appunto, codificata in base64. Per decodificarla è bastato fare
mrtouch@mrtouch:~$ echo "TGglMUxecjJDSDclN1Ej" | base64 -d
Lh%1L^r2CH7%7Q#
Alla fine dei conti si è rilevata un’ottima sfida, specialmente nel trovare il vettore di attacco iniziale, ossia caricare codice eseguibile tramite il form di upload. Da li in avanti è bastato ispezionare il sistema e trovare la cartella di bob con il messaggio segreto. Nel caso aveste trovato un’altra soluzione, non esitate a commentare!