
Impacketの完全なGo移植版 - WindowsおよびActive Directoryプロトコル攻撃用の63のCLIツールと24のライブラリを、依存関係のない単一バイナリにコンパイル。
Jacob Paullus (@psycep_) 著
Impacket の完全な Go 実装 - Windows ネットワークプロトコル操作、Active Directory 列挙、攻撃実行のための 63 のツールと 24 のライブラリパッケージ。ネイティブ 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 開発ヘッダーが必要です (Debian/Ubuntu/Kali では apt install build-essential libpcap-dev、RHEL/CentOS では yum install gcc libpcap-devel、macOS では brew install libpcap)。portable と windows ターゲットは Go ツールチェーンのみが必要です。これらのビルドでは libpcap が必要なため、sniff と split はスタブになります。完全なマトリックスについては プラットフォームサポート を参照してください。
gopacket は Linux、macOS、Windows でビルドできます。動作するツールのセットと利用可能なプロキシパスはビルドフラグによって異なります:
| ビルド | 利用可能なツール | プロキシ |
|---|---|---|
| Linux / macOS with cgo (default) | 全 63 | proxychains (LD_PRELOAD) および/または -proxy SOCKS5 |
Linux with CGO_ENABLED=0 | 61 (sniff、split はスタブ) | -proxy のみ (proxychains は libc フックが必要) |
Windows (GOOS=windows CGO_ENABLED=0) | 60 (sniff、split、sniffer スタブ) | -proxy のみ (Windows に LD_PRELOAD なし) |
sniff と split は cgo 経由で libpcap に依存し、sniffer は Unix 生ソケットに依存します。ツールがターゲット用にビルドできない場合、gopacket は明確なメッセージを出力して終了コード 1 で終了するスタブに置き換えるため、go build ./... は常に成功し、インストールレイアウトはプラットフォーム間で一貫しています。
アンインストールするには:
./install.sh --uninstall
gopacket は 2 つの独立したプロキシパスをサポートしています。これらはチェーンすることもできます。
すべての gopacket ツールは proxychains を通じて動作します。Go バイナリは通常 proxychains をバイパスします。Go ランタイムは DNS とネットワークを内部的に処理し、proxychains が依存する LD_PRELOAD フックをスキップするためです。gopacket はネットワーク操作のためにシステム C ライブラリにリンクすることでこれを回避し、proxychains が通常通り接続を傍受できるようにします。
proxychains gopacket-secretsdump 'domain/user:password@target'
proxychains gopacket-smbclient -k -no-pass 'domain/[email protected]'
-proxy)すべてのツールは -proxy を受け付け、LD_PRELOAD に依存せずに送信 TCP を SOCKS5 サーバー経由でルーティングします。受け入れられるスキーム: 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 と互換性があります。SOCKS5 プロキシ自体への TCP 接続は依然として libc の connect() を経由するため、proxychains → gopacket → -proxy → target はネストされたルーティングシナリオで機能します。
gopacket の 24 のプロトコルパッケージ上にカスタムツールを構築するための完全な API ドキュメント、コード例、アーキテクチャ概要については、ライブラリ開発者ガイド を参照してください。
| ツール | 説明 |
|---|---|
| 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 | パスワード、ハッシュ、または AES キーで TGT を要求 |
| getST | S4U2Self/S4U2Proxy でサービスチケットを要求 |
| GetUserSPNs | Kerberoasting - SPN を検索して要求 |
| GetNPUsers | AS-REP roasting - 事前認証なしのアカウントを検索 |
| ticketer | ゴールデン/シルバーチケットの偽造 |
| ticketConverter | ccache と kirbi 形式間の変換 |
| describeTicket | Kerberos チケットの解析と復号 |
| getPac | PAC 情報の要求と解析 |
| keylistattack | KERB-KEY-LIST-REQ 攻撃 (RODC) |
| raiseChild | ゴールデンチケットによる子から親ドメインへの昇格 |
| ツール | 説明 |
|---|---|
| GetADUsers | LDAP 経由でドメインユーザーを列挙 |
| GetADComputers | LDAP 経由でドメインコンピューターを列挙 |
| GetLAPSPassword | LDAP 経由で LAPS パスワードを読み取り |
| findDelegation | 委任設定を検索 |
| lookupsid | LSARPC 経由の SID ブルートフォース |
| samrdump | SAMR 経由でユーザーを列挙 |
| rpcdump | epmapper 経由で RPC エンドポイントをダンプ |
| rpcmap | アクセス可能な RPC インターフェースをスキャン |
| net | SAMR/LSARPC 経由の net user/group/computer 列挙 |
| netview | セッション、共有、ログオンユーザーを列挙 |
| CheckLDAPStatus | LDAP 署名とチャネルバインディング要件を確認 |
| DumpNTLMInfo | SMB ネゴシエーションから NTLM 認証情報をダンプ |
| getArch | RPC 経由でリモート OS アーキテクチャを検出 |
| machine_role | マシンロール (DC、サーバー、ワークステーション) を検出 |
| ツール | 説明 |
|---|---|
| addcomputer | マシンアカウントの作成/変更/削除 (SAMR + LDAP) |
| rbcd | リソースベースの制約付き委任の操作 |
| dacledit | AD オブジェクトの DACL の読み取り/書き込み |
| owneredit | オブジェクトの所有権の読み取り/変更 |
| samedit | SAM アカウント名スプーフィング (CVE-2021-42278/42287) |
| badsuccessor | BadSuccessor / バックアップオペレーター昇格 |
| changepasswd | SAMR と LDAP 経由でパスワードを変更/リセット |
| ツール | 説明 |
|---|---|
| smbclient | 対話型 SMB クライアント (共有、ls、get、put など) |
| smbserver | ファイル共有用の SMB サーバー |
| attrib | SMB 経由でファイル属性を照会/変更 |
| filetime | SMB 経由でファイルタイムスタンプを照会/変更 |
| services | SVCCTL 経由のリモートサービス管理 |
| reg | WINREG 経由のリモートレジストリ操作 |
| Get-GPPPassword | SYSVOL からグループポリシー設定のパスワードを抽出 |
| karmaSMB | ハッシュキャプチャ用の不正 SMB サーバー |
| ツール | 説明 |
|---|---|
| ntlmrelayx | マルチプロトコルサポートを備えた完全な NTLM リレーフレームワーク |
ntlmrelayx は以下をサポートします:
| ツール | 説明 |
|---|---|
| mssqlclient | SQL/Windows/Kerberos 認証を備えた対話型 MSSQL クライアント |
| mssqlinstance | SQL Browser 経由の MSSQL インスタンス検出 |
| ツール | 説明 |
|---|---|
| wmiquery | 対話型 WMI クエリシェル |
| wmipersist | WMI イベントサブスクリプションの永続化 |
| ツール | 説明 |
|---|---|
| tstool | ターミナルサービスセッションとプロセスの列挙 |
| ツール | 説明 |
|---|---|
| rdp_check | RDP 認証チェック |
| mqtt_check | MQTT 認証チェック |
| exchanger | Exchange Web Services クライアント |
| ツール | 説明 |
|---|---|
| ntfs-read | オフライン NTFS ファイルシステムパーサー |
| ping / ping6 | ICMP ping |
| sniff / sniffer | ネットワークパケットキャプチャ |
| split | 大きなファイルの分割 |
すべてのネットワークツールは 3 つの認証方法をサポートしています:
# Password
gopacket-secretsdump 'domain/user:password@target'
# NTLM hash (pass-the-hash)
gopacket-secretsdump -hashes ':nthash' 'domain/user@target'
# Kerberos (pass-the-ticket)
KRB5CCNAME=ticket.ccache gopacket-secretsdump -k -no-pass 'domain/user@target'