Getting Root: Kioptrix livello 3
Siamo al terzo livello delle macchine della serie Kioptrix. Anche questa macchina non presenta difficoltà degne di nota e credo sarà l’ultima macchina semplice prima dell’OSCP.
Per rendere le cose più interessanti, ma anche per essere il più realista possibile nei confronti dello scenario d’esame, non utilizzerò Metasploit. In questo post, vedremo quindi come mi sono riscritto il mio exploit da solo. Occasione, tra l’altro, per approfondire un po’ di Python.
Kioptrix Livello 3
Il livello 3 è disponibile a questa pagina del sito vulnhub.com.
Anche questa macchina virtuale è un box Linux su cui è montata una distribuzione Ubuntu obsoleta.
Setup dell’ambiente
La configurazione della mia piccola rete locale in VirtualBox, tra la mia Kali Linux e la macchina target, è rimasta la stessa. Entrambe non possono ragiungere il mondo esterno.
Ora che tutte le macchine, all’avvio, prenderanno un indirizzo sulla 192.168.56 possiamo partire.
Per scoprire l’indirizzo assegnato a knoptrix3.com, utilizziamo nmap.
La macchina 192.168.56.101 è una Kali Linux aggiornata e pronta all’uso. La macchina 192.168.56.104 è il nostro target. Come da note, scritte dall’autore dell’esercizio, aggiungiamo una entry nel nostro file hosts, affinche il dominio knoptrix3.com venga risolto con l’indirizzo corretto.
Recon
Il primo passaggio è quello di enumerare i servizi in ascolto sulla macchina, per cercare di capire qualcosa in più.
Takeover narrative
Essendo la versione di OpenSSH priva di exploit noti, mi dedico a quello che trovo sulla porta 80. Navigandoci, abbiamo un sito web abbastanza anonimo con una voce Login, nel menù.
Navigando sulla pagina di login, ottengo come informazione aggiuntiva, il nome del CMS utilizzato: LotusCMS.
Faccio un po’ di ricogniziona standard, quando si parla di porta 80, usando dirb e _nikto.
Analizzando l’output, scopriamo che il sito offre:
- un phpmyadmin 2.11.3
- una gallery http://kioptrix3.com/gallery/index.php creata con gallaryfic
- una versione del sito in /cache
Sia la versione di phpMyAdmin, che gallaryfic hanno exploit noti.
Voglio però, dedicarmi a LotusCMS, che mi offre sul piatto una remote code execution, con tanto di modulo per Metasploit.
Scrittura di un semplice exploit per LotusCMS
Quella che sfrutterò non è la vulnerabilità CVE-2011-0518 che ho scoperto dopo, mentre scrivevo questo post. Magari si può modificare il mio exploit per sfruttare entrambe.
Sebbene sia già presente, e funzionante, un modulo Metasploit ed un exploit fatto molto bene su exploit-db.com, ho deciso di provare a scrivere da zero il mio exploit per:
- imparare un po’ di python
- replicare lo scenario d’esame per l’OSCP
- divertirmi un po’.
Leggendo il codice dell’exploit in ruby e vedendo un altro exploit in rete scritto in python, il nocciolo della vulnerabilità risiete nella mancata validazione dell’input fornito al parametro page nella pagina index.php di un sito sviluppato con LotusCMS.
Questo input, viene inserito come argomento di una chiamata ad eval().
Quello che dobbiamo fare è inserire del codice PHP all’interno del parametro vulnerabile, codice che verrà eseguito coi privilegi con cui gira Apache sulla macchina vittima.
Come prima cosa, facciamo un test per verificare che il sito sia vulnerabile. Per fare questo, passo come parametro una print e verifico che la scritta sia presente nella risposta del mio web server.
La seconda parte dell’attacco è mandare il payload. Ho preso il codice di una reverse shell che ho trovato in rete e modificato per l’OSCP. Per questo exploit ho tolto il preambolo <?php e la stringa ?>, visto che tutto il payload sarà già eseguito all’interno del contesto PHP del webserver.
La reverse shell dovrà essere codificata in base64 per poter essere trasmessa in un flusso HTTP.
Il codice dell’exploit è disponibile su github.com. Sentitevi liberi di migliorarlo e creare delle pull request.
In un’altra finestra ho lanciato netcat in ascolto sulla porta 443 e lanciato il mio exploit, ottengo una shell non privilegiata.
Da dentro la macchina, inizio a recuperare un po’ di informazioni sulla versione della distribuzione, sui processi in esecuzione e sulla versione del kernel. Questo per cercare il giusto exploit.
![uname -a]](https://codiceinsicuro.it/assets/images/getting-root/k3/1_16_info_gathering.png)
Navigando prima nelle directory in /home, praticamente tutte hanno il permesso di lettura per tutti, noto il file /home/loneferret/CompanyPolicy.README. Una nota del CEO che invita a fare ‘sudo ht’. Sul nostro utente non ha effetti, mentre l’utente loneferret, con il comando sudo ht è in grado di impersonificare un utente amministrativo (dalla bash_history e dal .sudo_as_admin_successful)
Decido di usare DirtyCow per elevare i miei privilegi. Carico l’exploit con wget, usando la mia macchina Kali e lo compilo.
Provo a loggarmi via ssh con l’utente firefart ed ho conferma che l’exploit ha funzionato come mi aspettavo. Sono root su 192.168.56.104.
La flag è nella /root ed è un messaggio dell’autore della macchina, Steven ‘loneferret’ McElrea morto lo scorso mese di agosto.
Off by one
Grazie Steven, per Kioptrix e per tutto il pesce.
Enjoy it!
Vuoi aiutarmi a portare avanti il progetto Codice Insicuro con una donazione? Fantastico, allora non ti basta che premere il pulsante qui sotto.
Supporta il progetto