Drunk Admin Web Challenge

Tempo di lettura: 7 minuti
Data pubblicazione: May 18, 2017

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.

Home page del sito
Home page del sito

Footprinting

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.

Pagina pubblica di PHP
Pagina pubblica di PHP

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.

Zap in azione
Zap in azione

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.

Pagine trovate nell'applicazione
Pagine trovate nell'applicazione
Pagina di PHPinfo()
Pagina di PHPinfo()

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.

Exploit

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.

Errore durante l'upload
Errore durante l'upload

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.

Upload della shell con ZAP
Upload della shell con ZAP

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

Post Exploitation

Dopo altri giri ho trovato la cartella dell’utente bob, contenente diversi file, molto probabilmente atti a decriptare il codice precedentemente trovato.

File dell'utente bob
File dell'utente bob

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.

Soluzione e messaggio segreto
Soluzione e messaggio segreto

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#

Conclusioni

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!