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 环境准备

所需工具

  1. 静态分析工具:IDA Pro
  2. 固件解包工具:binwalk
  3. 动态调试工具
    • 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远程调试

  1. 打开IDA Pro
  2. 选择"Debugger" → "Attach" → "Remote GDB debugger"
  3. 输入主机IP和端口1234
  4. 开始调试

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 漏洞触发点

  1. 登录路由器管理界面
  2. 导航至:维护 → 时间与日期 → 应用
  3. 构造恶意的datetime参数值,实现命令注入

0x06 漏洞复现总结

  1. 该漏洞存在于goahead web服务器程序中
  2. 通过时间设置功能中的datetime参数注入命令
  3. 需要先绕过登录验证才能触发漏洞
  4. QEMU模拟是分析路由器固件的有效方法

0x07 扩展分析

该固件中还可能存在其他命令执行漏洞,建议进一步分析:

  1. 检查所有用户输入点
  2. 分析其他CGI程序
  3. 检查固件更新机制

0x08 防护建议

对于D-Link路由器用户:

  1. 及时更新到最新固件版本
  2. 禁用远程管理功能
  3. 修改默认管理密码

对于开发者:

  1. 对所有用户输入进行严格过滤
  2. 避免使用system()等危险函数
  3. 实现权限最小化原则
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解包固件: 解包后会得到 squashfs-root 目录,包含完整的文件系统。 2. 定位关键文件 使用以下命令查找web根目录: 关键程序: /bin/goahead (web服务器程序) 3. 架构确认 检查程序架构: 确认是MIPS架构,需要使用qemu-mipsel进行模拟。 0x03 动态调试设置 1. 启动QEMU模拟 参数说明: -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. 访问管理界面 登录成功后访问: 0x05 漏洞触发点 登录路由器管理界面 导航至:维护 → 时间与日期 → 应用 构造恶意的 datetime 参数值,实现命令注入 0x06 漏洞复现总结 该漏洞存在于goahead web服务器程序中 通过时间设置功能中的 datetime 参数注入命令 需要先绕过登录验证才能触发漏洞 QEMU模拟是分析路由器固件的有效方法 0x07 扩展分析 该固件中还可能存在其他命令执行漏洞,建议进一步分析: 检查所有用户输入点 分析其他CGI程序 检查固件更新机制 0x08 防护建议 对于D-Link路由器用户: 及时更新到最新固件版本 禁用远程管理功能 修改默认管理密码 对于开发者: 对所有用户输入进行严格过滤 避免使用system()等危险函数 实现权限最小化原则