D-Link路由器漏洞研究分享
字数 1217 2025-08-05 13:25:32
D-Link DIR-816 A2路由器漏洞分析与复现指南
0x00 漏洞概述
D-Link DIR-816 A2是中国台湾友讯(D-Link)公司生产的一款无线路由器,存在命令注入漏洞。攻击者可以通过构造特殊的"datetime"参数值,利用该漏洞在系统上执行任意命令。
影响版本:1.10B05及之前版本
0x01 环境准备
所需工具
- 静态分析工具:IDA Pro
- 固件解包工具:binwalk
- 动态调试工具:
- QEMU模拟器
- IDA远程调试功能
- GDB (可选)
测试环境
- 操作系统:Ubuntu 16.04虚拟机
- 模拟器:QEMU for MIPS架构
固件获取
固件下载地址:http://support.dlink.com.cn:9000/ProductInfo.aspx?m=DIR-816
0x02 固件分析流程
1. 固件解包
使用binwalk解包固件:
binwalk -Me DIR-816A2_v1.10CNB03_D77137.img
解包后会得到squashfs-root目录,包含完整的文件系统。
2. 定位关键文件
- 使用以下命令查找web根目录:
find -name "index"
- 关键程序:
/bin/goahead(web服务器程序)
3. 架构确认
检查程序架构:
file ../../bin/goahead
确认是MIPS架构,需要使用qemu-mipsel进行模拟。
0x03 动态调试设置
1. 启动QEMU模拟
sudo qemu-mipsel -L ../../ -g 1234 ../../bin/goahead
参数说明:
-g 1234:开启调试端口-L ../../:指定根目录位置
2. IDA远程调试
- 打开IDA Pro
- 选择"Debugger" → "Attach" → "Remote GDB debugger"
- 输入主机IP和端口1234
- 开始调试
0x04 关键调试断点
1. 绕过初始检查
- 断点1:0x45C728
- 修改V0寄存器值为1,防止程序退出
- 断点2:0x45cdbc
- 修改V0寄存器值为0,确保程序继续执行
2. 绕过登录验证
- 断点3:0x4570fc
- 修改V0寄存器值为0,绕过用户名检查
- 访问
http://192.168.184.133/dir_login.asp测试登录页面
3. 访问管理界面
登录成功后访问:
http://192.168.184.133/d_wizard_step1_start.asp
0x05 漏洞触发点
- 登录路由器管理界面
- 导航至:维护 → 时间与日期 → 应用
- 构造恶意的
datetime参数值,实现命令注入
0x06 漏洞复现总结
- 该漏洞存在于goahead web服务器程序中
- 通过时间设置功能中的
datetime参数注入命令 - 需要先绕过登录验证才能触发漏洞
- QEMU模拟是分析路由器固件的有效方法
0x07 扩展分析
该固件中还可能存在其他命令执行漏洞,建议进一步分析:
- 检查所有用户输入点
- 分析其他CGI程序
- 检查固件更新机制
0x08 防护建议
对于D-Link路由器用户:
- 及时更新到最新固件版本
- 禁用远程管理功能
- 修改默认管理密码
对于开发者:
- 对所有用户输入进行严格过滤
- 避免使用system()等危险函数
- 实现权限最小化原则