root@thehacksparrow:~/writeups$ SYSTEM ONLINE
root@sparrow:~/writeups$ cat streamio.md
// writeups

StreamIO

4 Jun 2022 · 25 min read · root access
StreamIO - maquina de Hack The Box

Executive summary — StreamIO is a long chain of credentials leading to more credentials, where every link means bypassing a different control: a SQL injection behind a blacklist WAF on watch.streamio.htb dumps MD5 hashes that unlock the web portal; a hidden debug parameter in the admin panel turns out to be an LFI that exposes the source code and the credentials of a more privileged MSSQL user; that user opens up a second SQL injection which, without sysadmin rights, becomes an exfiltration channel by writing into a visible table to read a backup database holding a new domain user; that user yields user.txt and a Firefox profile with saved credentials that, through password reuse, are also valid on the domain; and that domain account turns out to own an AD group with ReadLAPSPassword over the domain controller itself, handing over the local administrator password and, with it, root.txt plus a full DCSync.

PlatformHack The Box
Operating systemWindows Server 2019 Build 17763 (Domain Controller for streamIO.htb)
DifficultyMedium
StatusRetired
Target IP10.129.48.165

Attack map

[443/HTTPS] watch.streamio.htb -- blacklist-WAF SQLi (bypass: avoid "or"/"null")
   |  UNION SELECT -> 30 MD5 hashes -> rockyou -> yoshihide (web login)
   v
[admin panel] streamio.htb -- hidden "debug" parameter
   |  LFI (php://filter) -> source -> MSSQL db_admin creds + 2nd SQLi in movie_inc.php
   v
[MSSQL] 2nd SQLi (stacked, movie_id) as db_admin -- not sysadmin, no xp_cmdshell
   |  UPDATE->UNION channel (second-order read) -> streamio_backup..users -> nikk37 (MD5)
   v
[WinRM] nikk37 : get_dem_girls2@yahoo.com -> user.txt
   |  Firefox profile (key4.db+logins.json+cert9.db) -> firefox_decrypt -> JDgodd
   v
[AD] JDgodd Owns/WriteOwner over CORE STAFF -> ReadLAPSPassword on the DC
   |  dacledit + bloodyAD -- self-membership -> reads ms-Mcs-AdmPwd
   v
[ROOT] Local Administrator (LAPS) = domain admin on the DC -> root.txt + DCSync

1. Reconnaissance

sudo nmap -p- --min-rate 3000 -T4 -Pn -oN nmap-allports.txt 10.129.48.165
sudo nmap -p53,80,88,135,139,389,443,445,464,636,3268,5985,9389 -sCV -Pn -oN nmap-services.txt 10.129.48.165

A TTL of 127 plus the port set (53/88/135/139/389/445/464/636/3268/5985/9389, on top of IIS on 80/443) identify a Windows Domain Controller with a website on top. The TLS certificate on port 443 hands over the real hostnames, common when the vhost isn't in public DNS:

443/tcp ssl/http
| ssl-cert: Subject: commonName=streamIO/countryName=EU
| Subject Alternative Name: DNS:streamIO.htb, DNS:watch.streamIO.htb
|_clock-skew: mean: 7h00m07s
echo "10.129.48.165 streamio.htb watch.streamio.htb dc.streamio.htb DC" | sudo tee -a /etc/hosts

Two separate web applications sit behind the same certificate: streamio.htb (login portal) and watch.streamio.htb (movie search). SMB rejects the null session (STATUS_ACCESS_DENIED) — expected on a properly configured DC — so the way in has to be through the web.

Worth noting, not acting on yet: the +7 hour clock skew nmap reports. Kerberos is very sensitive to clock drift, but it never became a blocker here — noted in case it matters later.

🔒 Clearance required

This content is Root Access only. Everything else on the site — the free tier, the whole public library — stays open.

See Root Access plans

No account? Create one free then upgrade from your console.