منفذ Go كامل لـ Impacket - 63 أداة CLI و24 مكتبة لهجمات بروتوكولات Windows وActive Directory، مُجمَّعة في ملف ثنائي واحد بدون تبعيات.
بواسطة Jacob Paullus (@psycep_)
تطبيق Go كامل لـ Impacket - 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 ( على
Debian/Ubuntu/Kali، على RHEL/CentOS، أو
على macOS). تحتاج أهداف و فقط
إلى سلسلة أدوات Go؛ يصبح و واجهات وهمية في تلك البنيات
لأنهما يتطلبان libpcap. راجع للحصول على
المصفوفة الكاملة.
apt install build-essential libpcap-devyum install gcc libpcap-develbrew install libpcapportablewindowssniffsplitيُبنى gopacket على Linux وmacOS وWindows. تعتمد مجموعة الأدوات العاملة ومسارات التمرير المتاحة على أعلام البناء:
| Build | Tools available | Proxying |
|---|---|---|
| Linux / macOS with cgo (default) | All 63 | proxychains (LD_PRELOAD) and/or -proxy SOCKS5 |
Linux with CGO_ENABLED=0 | 61 (sniff, split become stubs) | -proxy only (proxychains needs the libc hook) |
Windows (GOOS=windows CGO_ENABLED=0) | 60 (sniff, split, sniffer stubs) | -proxy only (no LD_PRELOAD on 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 نفسه يمر عبر connect() في libc، لذا يعمل
proxychains → gopacket → -proxy → target لسيناريوهات التوجيه المتداخلة.
راجع دليل مطوري المكتبة للحصول على توثيق API الكامل، وأمثلة الكود، ونظرة عامة على البنية لبناء أدوات مخصصة فوق حزم البروتوكولات الـ 24 الخاصة بـ gopacket.
| Tool | Description |
|---|---|
| psexec | تنفيذ أوامر عن بُعد عبر إنشاء خدمة SMB |
| smbexec | تنفيذ أوامر عن بُعد عبر SMB (أكثر تخفيًا من psexec) |
| wmiexec | تنفيذ أوامر عن بُعد عبر WMI |
| dcomexec | تنفيذ أوامر عن بُعد عبر DCOM |
| atexec | تنفيذ أوامر عن بُعد عبر Task Scheduler |
| Tool | Description |
|---|---|
| secretsdump | استخراج SAM/LSA/NTDS.dit وDCSync (عن بُعد + دون اتصال) |
| dpapi | استخراج مفتاح النسخ الاحتياطي DPAPI |
| esentutl | محلل قاعدة بيانات ESE دون اتصال (NTDS.dit) |
| registry-read | محلل خلية سجل Windows دون اتصال |
| Tool | Description |
|---|---|
| getTGT | طلب TGT بكلمة مرور أو hash أو مفتاح AES |
| getST | طلب تذكرة خدمة باستخدام S4U2Self/S4U2Proxy |
| GetUserSPNs | Kerberoasting - البحث عن SPNs وطلبها |
| GetNPUsers | AS-REP roasting - البحث عن حسابات بدون pre-auth |
| ticketer | تزوير التذاكر الذهبية/الفضية |
| ticketConverter | التحويل بين صيغ ccache وkirbi |
| describeTicket | تحليل وفك تشفير تذاكر Kerberos |
| getPac | طلب وتحليل معلومات PAC |
| keylistattack | هجوم KERB-KEY-LIST-REQ (RODC) |
| raiseChild | تصعيد من النطاق الفرعي إلى الأب عبر التذكرة الذهبية |
| Tool | Description |
|---|---|
| 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، خادم، محطة عمل) |
| Tool | Description |
|---|---|
| addcomputer | إنشاء/تعديل/حذف حسابات الأجهزة (SAMR + LDAP) |
| rbcd | التلاعب بالتفويض المقيد القائم على الموارد |
| dacledit | قراءة/كتابة DACLs على كائنات AD |
| owneredit | قراءة/تعديل ملكية الكائنات |
| samedit | انتحال اسم حساب SAM (CVE-2021-42278/42287) |
| badsuccessor | BadSuccessor / تصعيد مشغل النسخ الاحتياطي |
| changepasswd | تغيير/إعادة تعيين كلمات المرور عبر SAMR وLDAP |
| Tool | Description |
|---|---|
| smbclient | عميل SMB تفاعلي (المشاركات، ls، get، put، إلخ) |
| smbserver | خادم SMB لمشاركة الملفات |
| attrib | استعلام/تعديل سمات الملفات عبر SMB |
| filetime | استعلام/تعديل الطوابع الزمنية للملفات عبر SMB |
| services | إدارة الخدمات عن بُعد عبر SVCCTL |
| reg | عمليات السجل عن بُعد عبر WINREG |
| Get-GPPPassword | استخراج كلمات مرور Group Policy Preferences من SYSVOL |
| karmaSMB | خادم SMB خبيث لالتقاط hash |
| Tool | Description |
|---|---|
| ntlmrelayx | إطار عمل NTLM relay كامل مع دعم متعدد البروتوكولات |
يدعم ntlmrelayx:
| Tool | Description |
|---|---|
| mssqlclient | عميل MSSQL تفاعلي مع مصادقة SQL/Windows/Kerberos |
| mssqlinstance | اكتشاف نسخ MSSQL عبر SQL Browser |
| Tool | Description |
|---|---|
| wmiquery | صدفة استعلام WMI تفاعلية |
| wmipersist | استمرارية اشتراك أحداث WMI |
| Tool | Description |
|---|---|
| tstool | تعداد جلسات وعمليات خدمات الطرفية |
| Tool | Description |
|---|---|
| rdp_check | فحص مصادقة RDP |
| mqtt_check | فحص مصادقة MQTT |
| exchanger | عميل Exchange Web Services |
| Tool | Description |
|---|---|
| ntfs-read | محلل نظام ملفات NTFS دون اتصال |
| ping / ping6 | ICMP ping |
| sniff / sniffer | التقاط حزم الشبكة |
| split | تقسيم الملفات الكبيرة |
تدعم جميع أدوات الشبكة ثلاث طرق للمصادقة:
# 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'
| Flag | Description |
|---|---|
-hashes LMHASH:NTHASH | مصادقة NTLM hash (يمكن أن يكون LM hash فارغًا) |
-k | استخدام مصادقة Kerberos |
-no-pass | عدم طلب كلمة المرور (استخدم مع -k أو -hashes) |
-dc-ip IP | عنوان IP لوحدة تحكم النطاق |
-target-ip IP | عنوان IP للهدف (عند استخدام اسم المضيف لـ Kerberos) |
-port PORT | منفذ الهدف (تختلف القيم الافتراضية حسب الأداة) |
-proxy URL | توجيه TCP الصادر عبر بروكسي SOCKS5 (مثل socks5h://127.0.0.1:1080). ميزات UDP معطّلة. |
-debug | تمكين مخرجات التصحيح |
# Dump domain hashes via DCSync
gopacket-secretsdump 'corp.local/admin:[email protected]'
# Interactive SMB shell
gopacket-smbclient -hashes ':aabbccdd...' 'corp.local/admin@fileserver'
# Kerberoast
gopacket-getuserspns 'corp.local/user:[email protected]'
# Golden ticket
gopacket-ticketer -nthash <krbtgt_hash> -domain-sid S-1-5-21-... -domain corp.local admin
# NTLM relay with SOCKS proxy
sudo gopacket-ntlmrelayx -t smb://target -socks
# LDAP relay for RBCD
sudo gopacket-ntlmrelayx -t ldaps://dc01.corp.local --delegate-access
# Route all outbound traffic through a SOCKS5 proxy
gopacket-secretsdump -proxy socks5h://127.0.0.1:1080 'corp.local/admin:[email protected]'
يحتوي دليل pkg/ على 24 حزمة بروتوكول قابلة لإعادة الاستخدام يمكن استيرادها بشكل مستقل.
| Package | Description |
|---|---|
| smb | عميل SMB2/3 مع مصادقة NTLM وKerberos |
| ldap | عميل LDAP مع ربط NTLM/Kerberos |
| dcerpc | عميل DCE/RPC + 20 تطبيق خدمة (DRSUAPI، SAMR، SVCCTL، LSARPC، WINREG، NETLOGON، DCOM، TSCH، EPMAPPER، إلخ) |
| kerberos | عميل Kerberos، تزوير التذاكر (ذهبية/فضية)، S4U2Self/S4U2Proxy |
| ntlm | بروتوكول مصادقة NTLM |
| relay | إطار عمل NTLM relay (خوادم، عملاء، هجمات، SOCKS) |
| tds | بروتوكول TDS لـ SQL Server |
| ese | محلل Extensible Storage Engine |
| registry | محلل خلية سجل Windows |
| ntfs | محلل نظام ملفات NTFS |
| security | واصفات الأمان، ACLs، SIDs |
| dpapi | هياكل DPAPI |
| mqtt | عميل بروتوكول MQTT |
| session | تحليل الهدف/بيانات الاعتماد (domain/user:pass@host) |
| flags | إطار عمل موحد لأعلام CLI |
يهدف gopacket إلى تكافؤ كامل مع Impacket. ما يلي لم يتم تنفيذه بعد:
عملاء بروتوكول التمرير:
وحدات هجوم التمرير:
أدوات مستقلة:
ifmap.py (تعيين واجهة DCOM)mimikatz.py (Mimikatz محدود عبر RPC)goldenPac.py (MS14-068 - قديم على الأنظمة المصححة)smbrelayx.py (استُبدل بـ ntlmrelayx)kintercept.py (اعتراض Kerberos)هذه الفجوات ذات أولوية منخفضة - معظمها يتطلب بنية تحتية متخصصة للاختبار أو أصبح قديمًا بتقنيات أحدث.
هذه قيود على مستوى البروتوكول مشتركة مع Impacket، وليست أخطاء في gopacket:
راجع KNOWN_ISSUES.md للحصول على معلومات مفصلة حول كل مشكلة وحلولها البديلة.
هذا إصدار تجريبي. الأخطاء متوقعة، والمساهمات مرحب بها.
لأن gopacket ينفذ نفس بروتوكولات الشبكة مثل Impacket، فإن جزءًا كبيرًا من "الأخطاء" يتبين أنها بيئية، وليست خاصة بـ gopacket - وحدات تحكم مصححة، متطلبات توقيع LDAP، EPA، PKT_INTEGRITY، توقيع SMB، التحقق من NTLM MIC بعد CVE-2019-1040، SPNs مفقودة، انحراف الوقت، غرائب DNS، قواعد جدار الحماية، وما إلى ذلك. تشغيل نفس العملية مع Impacket جنبًا إلى جنب يزيل البيئة من المعادلة:
خطوة الفرز الواحدة هذه توفر الكثير من الجولات، لذا يرجى عدم تخطيها.
-debug والتقط المخرجات الكاملةcorp.internal → example.local
وdc01.corp.internal → dc01.example.local أمر مقبول - احتفظ ببنية
البيانات، فقط ليس القيم المعرِّفة. إذا كنت في شك، احجبها.افتح مشكلة GitHub تصف حالة الاستخدام ومكافئ Impacket (إن وجد). إذا كانت الميزة في قائمة "الميزات المفقودة" أعلاه، اذكر أي واحدة - يساعدنا ذلك في تحديد الأولويات.
طلبات السحب مرحب بها. قبل فتح واحد:
go build ./... وgo vet ./... وgofmt -l . وgo test ./...
وتأكد من نجاحها جميعًا بشكل نظيفينتقل الجهات الفاعلة للتهديد بعيدًا عن Python. الأدوات المترجمة بـ Go وRust (Sliver، BRC4، Geacon، والمحملات المخصصة) تحل بشكل متزايد محل Impacket في الاختراقات الواقعية. معظم أدوات الدفاع ومنطق الكشف بُنيت حول سلوك شبكة Impacket القائم على Python، وهذا التغطية تتآكل مع تحول نظام المهاجمين إلى اللغات المترجمة.
يوجد gopacket جزئيًا لمساعدة مجتمع الأمن على التقدم على هذا التحول. من خلال توفير تطبيق Go مفتوح المصدر وقابل للقراءة لنفس البروتوكولات والتقنيات، يمكن للمدافعين ومهندسي الكشف:
تكون الفجوة بين أدوات المهاجم ورؤية المدافع في أوسع حالاتها عندما تبقى الأدوات الجديدة خاصة. إتاحة gopacket كمفتوح المصدر تضيق تلك الفجوة.
KRB5CCNAME، ستبحث الأدوات عن <username>.ccache في الدليل الحالي-proxy SOCKS5 الداخلي (راجع دعم البروكسي)صدر تحت Apache License 2.0.