Basic Pentesting

Walkthrough

CTF DI TRYHACKME

2/11/2023

Difficoltà: Facile
Tools usati:

  • Nmap

  • GoBuster

  • enum4linux

  • linPEAS

  • John

ATTENZIONE: Lungo il walkthrough si potrà notare che l'IP della macchina bersaglio cambia: questo perché ho dovuto fare qualche prova ed ho riavviato la macchina oppure perché era scaduto il tempo, ma il modo per risolvere il CTF rimane lo stesso.

Qual è il nome della cartella nascosta sul webserver?

Come prima cosa eseguiamo uno scan con Nmap della macchina bersaglio:

Dal risultato dello scan possiamo vedere che sono attualmente aperte 6 porte: 22, 80, 139, 445, 8009 e 8080.
Ora utilizziamo GoBuster per cercare la cartella nascosta

Trovata! La cartella che cercavamo si chiama "development", possiamo ora rispondere alla prima domanda.

Qual è l'username?


Andando a vedere il contenuto della cartella troviamo due file:

  • dev.txt, che recita:
    2018-04-23: I've been messing with that struts stuff, and it's pretty cool! I think it might be neat to host that on this server too. Haven't made any real web apps yet, but I have tried that example you get to show off how it works (and it's the REST version of the example!). Oh, and right now I'm using version 2.5.12, because other versions were giving me trouble. -K
    2018-04-22: SMB has been configured. -K
    2018-04-21: I got Apache set up. Will put in our content later. -j

  • j.txt, che recita:
    For J:
    I've been auditing the contents of /etc/shadow to make sure we don't have any weak credentials,
    and I was able to crack your hash really easily. You know our password policy, so please follow
    it? Change that password ASAP.
    -K

Mmmh, abbiamo due iniziali (K e J) e sappiamo che è stato configurato SMB.
A questo punto usiamo il tool "enum4linux" per cercare di ottenere più informazioni e, chissà, magari troviamo i nomi che si nascondono dietro alle due iniziali.
Il comando generale è [percorso_enum4linux.pl] [IP_bersaglio]
Attendiamo un attimo che il tool faccia il suo lavoro, poi ci mettiamo a leggere l'output sperando di trovare qualcosa di utile.

Alla fine del lungo output troviamo quello che ci interessa: i due nomi utenti kay e jan!
Ottimo! Rispondiamo alla seconda domanda con "jan" e alla quinta domanda con "kay"

Qual è la password?

Per rispondere a questa domanda utilizziamo Hydra, un tool di brute-forcing che può essere usato su moltissimi servizi:

Fatto!
Ora che abbiamo ottenuto le credenziali dell'utente jan possiamo utilizzarle per collegarci tramite SSH (che è anche la risposta alla quarta domanda).

Qual è la password finale ottenuta?


Una volta collegati, possiamo andare alla ricerca manuale di un vettore di PrivEx (Privilege Escalation, processo tramite il quale si passa da un utente con privilegi più bassi ad un utente con privilegi più alti), oppure possiamo utilizzare un tool come linPEAS per automatizzare il tutto.
Dopo aver cercato un po' in giro decido di usare linPEAS.
Ora dobbiamo trasferire questo tool dalla nostra macchina alla macchina bersaglio e possiamo farlo tramite un server http python oppure, visto che abbiamo le credenziali SSH di un utente, possiamo utilizzare il comando "scp file_da_trasferire nome_utente@IP_BERSAGLIO:/cartella_di_destinazione"
In questo caso il comando è
scp linpeas.sh jan@10.10.90.11:/tmp

Ora dovremmo aver trasferito il tool, ma dobbiamo assegnargli il permesso d'esecuzione prima di poterlo avviare, quindi digitiamo
chmod +x linpeas.sh

Ora possiamo avviare il tool e salviamo il suo output in un file .txt per poterlo leggere comodamente:

./linpeas.sh | tee risultati.txt (il comando "tee" serve per sdoppiare l'output a schermo in un file che vogliamo noi).

Lasciamo che il tool finisca il suo lavoro ed andiamo ad aprire il file ottenuto tramite il comando more (qui utilizzato perché il file che andiamo ad aprire è piuttosto grande, ed il comando cat non ci permetterebbe di consultarlo comodamente).

Scorrendo il nostro file che sembra essere infinito, arriviamo alla parte in cui troviamo la chiave RSA per l'account kay, che in questo caso è l'amministratore (root, nei sistemi Linux).
Nella nostra macchina copiamo la chiave e la salviamo come chiave_rsa.txt, poi cambiamo i permessi del file con
chmod 600 chiave_rsa.txt (ogni chiave deve avere questi permessi per poter funzionare) e proviamo a collegarci tramite SSH con l'utente kay e la sua chiave RSA:

Ah, c'è una password che protegge la chiave.
Possiamo cercare di crackarla tramite John, prima però dobbiamo trasformare il file chiave_rsa.txt in un formato che John possa leggere. Usiamo quindi un'utility di John chiamata "ssh2john.py":

/usr/share/john/ssh2john.py chiave_rsa.txt > per_john.txt

Ora non ci resta che dare il file ottenuto in pasto a John e lasciare che faccia il suo lavoro:

John ha trovato la password, ottimo!
Ora non ci resta che collegarci tramite SSH e usare il nome utente kay, la sua chiave RSA e inseriamo la password appena trovata quando ci viene richiesto, et voilà: siamo collegati!

Come ultimo passaggio dobbiamo leggere il contenuto del file pass.bak per poter risolvere l'ultima domanda del CTF:
cat pass.bak

Ta dan! CTF risolto, complimenti!