Полный порт Impacket на Go — 63 CLI-инструмента и 24 библиотеки для атак на протоколы Windows и Active Directory, скомпилированные в один бинарный файл без зависимостей.
Автор: Jacob Paullus (@psycep_)
Полная реализация Impacket на Go — 63 инструмента и 24 библиотечных пакета для взаимодействия с сетевыми протоколами Windows, перечисления Active Directory и выполнения атак. Создан как нативный фреймворк на Go, чтобы вы могли скомпилировать один раз и запускать где угодно без зависимостей от Python.
Бета-релиз — крайне экспериментальный. gopacket находится в активной разработке. Основные инструменты протестированы в лабораторных средах Active Directory, но граничные случаи и особенности протоколов вполне ожидаемы. Если что-то не работает, протестируйте ту же операцию параллельно с Impacket и приложите оба вывода к отчёту об ошибке. Это поможет нам быстро определить, связана ли проблема со спецификой gopacket или с общим ограничением протокола.
git clone https://github.com/mandiant/gopacket
cd gopacket
# Default: Linux/macOS build + install to /usr/local/bin
./install.sh
# Run with no flags and it prompts you through the choices interactively.
# Or pick a target directly:
./install.sh --target portable # static Linux binaries in ./dist/portable/
./install.sh --target windows # Windows .exe cross-compiles in ./dist/windows/
./install.sh --target all # build every target in one run
# Build without installing (native only)
./install.sh --build-only
# Or build with make
make build
Сборка по умолчанию (--target native) требует Go 1.24.13+, GCC и заголовочные файлы разработки libpcap (apt install build-essential libpcap-dev в Debian/Ubuntu/Kali, yum install gcc libpcap-devel в RHEL/CentOS или brew install libpcap в macOS). Целевым сборкам portable и windows нужен только инструментарий Go; sniff и split в этих сборках становятся заглушками, поскольку требуют libpcap. Полную матрицу см. в разделе Поддержка платформ.
gopacket собирается на Linux, macOS и Windows. Набор работающих инструментов и доступные пути проксирования зависят от флагов сборки:
| Сборка | Доступные инструменты | Проксирование |
|---|---|---|
| Linux / macOS с cgo (по умолчанию) | Все 63 | proxychains (LD_PRELOAD) и/или -proxy SOCKS5 |
Linux с CGO_ENABLED=0 | 61 (sniff, split становятся заглушками) | только -proxy (proxychains нужен хук libc) |
Windows (GOOS=windows CGO_ENABLED=0) | 60 (заглушки sniff, split, sniffer) | только -proxy (нет LD_PRELOAD в Windows) |
sniff и split зависят от libpcap через cgo; sniffer зависит от необработанных сокетов Unix. Когда инструмент невозможно собрать для целевой платформы, gopacket подставляет заглушку, которая выводит понятное сообщение и завершается с кодом 1, поэтому go build ./... всегда завершается успешно, а структура установки остаётся согласованной на всех платформах.
Для удаления:
./install.sh --uninstall
gopacket поддерживает два независимых пути проксирования. Их также можно объединять в цепочку.
Все инструменты gopacket работают через proxychains. Бинарники Go обычно обходят proxychains, поскольку среда выполнения Go обрабатывает DNS и сетевые операции внутренне, пропуская хуки LD_PRELOAD, на которые полагается proxychains. gopacket обходит это, компонуясь с системной библиотекой C для сетевых операций, что позволяет proxychains перехватывать соединения обычным образом.
proxychains gopacket-secretsdump 'domain/user:password@target'
proxychains gopacket-smbclient -k -no-pass 'domain/[email protected]'
-proxy)Каждый инструмент принимает -proxy для маршрутизации исходящего TCP через сервер SOCKS5 без опоры на LD_PRELOAD. Поддерживаемые схемы: socks5 и socks5h. Когда -proxy не задан, в качестве запасного варианта используются переменные окружения ALL_PROXY / all_proxy.
gopacket-secretsdump -proxy socks5h://127.0.0.1:1080 'domain/user:password@target'
ALL_PROXY=socks5h://127.0.0.1:1080 gopacket-smbclient 'domain/user:password@target'
Функции, зависящие от UDP, отключаются при использовании -proxy, а не приводят к незаметной утечке пакетов (SOCKS5 UDP ASSOCIATE редко поддерживается прокси, а обход прокси для UDP раскрыл бы реальный исходный IP оператора). Затронутые функции и способы их обхода описаны в KNOWN_ISSUES.md.
Объединение в цепочку: -proxy совместим с proxychains. TCP-соединение с самим SOCKS5-прокси всё равно проходит через libc connect(), поэтому proxychains → gopacket → -proxy → target работает для сценариев вложенной маршрутизации.
Полную документацию по API, примеры кода и обзор архитектуры для создания собственных инструментов на основе 24 протокольных пакетов gopacket см. в Руководстве разработчика библиотеки.
| Инструмент | Описание |
|---|---|
| psexec | Удалённое выполнение команд через создание службы SMB |
| smbexec | Удалённое выполнение команд через SMB (скрытнее, чем psexec) |
| wmiexec | Удалённое выполнение команд через WMI |
| dcomexec | Удалённое выполнение команд через DCOM |
| atexec | Удалённое выполнение команд через планировщик задач |
| Инструмент | Описание |
|---|---|
| secretsdump | Извлечение SAM/LSA/NTDS.dit и DCSync (удалённо + офлайн) |
| dpapi | Извлечение ключа резервного копирования DPAPI |
| esentutl | Офлайн-парсер базы данных ESE (NTDS.dit) |
| registry-read | Офлайн-парсер кустов реестра Windows |
| Инструмент | Описание |
|---|---|
| getTGT | Запрос TGT с паролем, хешем или ключом AES |
| getST | Запрос служебного билета с S4U2Self/S4U2Proxy |
| GetUserSPNs | Kerberoasting — поиск и запрос SPN |
| GetNPUsers | AS-REP roasting — поиск учётных записей без предварительной аутентификации |
| ticketer | Подделка golden/silver билетов |
| ticketConverter | Преобразование между форматами ccache и kirbi |
| describeTicket | Разбор и расшифровка билетов Kerberos |
| getPac | Запрос и разбор информации PAC |
| keylistattack | Атака KERB-KEY-LIST-REQ (RODC) |
| raiseChild | Эскалация из дочернего домена в родительский через golden ticket |
| Инструмент | Описание |
|---|---|
| GetADUsers | Перечисление пользователей домена через LDAP |
| GetADComputers | Перечисление компьютеров домена через LDAP |
| GetLAPSPassword | Чтение паролей LAPS через LDAP |
| findDelegation | Поиск конфигураций делегирования |
| lookupsid | Перебор SID через LSARPC |
| samrdump | Перечисление пользователей через SAMR |
| rpcdump | Дамп конечных точек RPC через epmapper |
| rpcmap | Сканирование доступных интерфейсов RPC |
| net | Перечисление net user/group/computer через SAMR/LSARPC |
| netview | Перечисление сессий, общих ресурсов и вошедших пользователей |
| CheckLDAPStatus | Проверка требований к подписи LDAP и привязке канала |
| DumpNTLMInfo | Дамп информации аутентификации NTLM из согласования SMB |
| getArch | Определение архитектуры удалённой ОС через RPC |
| machine_role | Определение роли машины (DC, сервер, рабочая станция) |