[IoT]D-LINK DIR-830L路由器漏洞挖掘汇总
字数 2704 2025-08-22 12:23:30

D-LINK DIR-830L路由器漏洞挖掘与分析教程

1. 厂商与设备概述

D-Link(友讯科技)

  • 成立于1986年,全球前三大专业网络公司
  • 产品包括交换机、无线、宽带及数字家庭网络产品
  • 全球70余国设立超过160个行销据点

DIR-830L A1路由器

  • 固件版本:DIR830LA1_FW100B07
  • 固件下载地址:legacyfiles.us.dlink.com/DIR-830L/REVA/FIRMWARE/
  • 固件未加密,可使用binwalk -Me提取

2. 环境搭建与准备

仿真环境

  • 使用FirmAE进行仿真:https://github.com/pr0v3rbs/FirmAE

关键二进制文件

  • 核心文件:sbin/ncc2
  • Web与二进制文件间的桥梁:callback_xxx类型函数

3. 漏洞详细分析

3.1 cancelPing缓冲区溢出漏洞

漏洞点

  • 位于callback_ccp_ping函数
  • 触发格式:ccp_act=cancelPing&nextPage=xxxx
  • 变量char v10[260]存在栈溢出风险

PoC

  1. 使用登录cookie(空密码)
  2. 发送超长nextPage参数请求
  3. 需要发送两次请求

3.2 ping_v4命令注入漏洞

漏洞点

  • ping_addr参数用户可控
  • 过滤不全面(仅过滤了;
  • 可使用%0a换行符绕过

PoC

ccp_act=ping_v4&ping_addr=127.0.0.1%0a[恶意命令]

3.3 ping_v6命令注入漏洞

漏洞点

  • 与ping_v4原理相同
  • ping_addr参数用户可控

PoC

ccp_act=ping_v6&ping_addr=::1%0a[恶意命令]

3.4 sub_450E7C缓冲区溢出漏洞

漏洞点

  • callback_ccp_get_set中调用sub_450E7C
  • 使用危险函数sprintf,参数完全可控
  • 访问路径:get_set.ccp

3.5 web_access.ccp目录遍历漏洞

漏洞点

  • callback_ccp_web_access函数
  • ccp_act=setfolder时调用sub_4B188C
  • 未过滤./,导致路径穿越

利用方式

  • 在任意可写路径下创建文件夹
  • 示例:在/www目录创建poc4.html

3.6 mydlink_api.ccp拒绝服务漏洞

漏洞点

  • 不传任何payload会导致网页崩溃

3.7 mydlink_api.ccp命令注入漏洞

漏洞点

  • api_page参数用户可控
  • 直接拼接至_system调用中

PoC

ccp_act=[恶意命令]&api_page=[恶意参数]

3.8 do_login硬编码凭证漏洞

漏洞点

  • sbin/ncc2do_login函数中存在硬编码凭证

3.9 pingV4Msg命令注入漏洞

初始限制

  • 会先做DNS解析,解析失败则不执行system

绕过方法

  • 使用%0a换行符绕过正则匹配

PoC

ccp_act=pingV4Msg&ping_addr=127.0.0.1%0a[恶意命令]

4. 漏洞汇总表

编号 漏洞类型 影响组件 攻击方式 修复建议
1 缓冲区溢出 cancelPing 发送超长nextPage参数 增加输入长度检查
2 命令注入 ping_v4 通过ping_addr注入,%0a绕过 严格过滤用户输入
3 命令注入 ping_v6 同上 同上
4 缓冲区溢出 sub_450E7C 发送超长Interface字段 增加输入长度检查
5 目录遍历 web_access.ccp 利用路径穿越上传文件 严格过滤路径参数
6 拒绝服务 mydlink_api.ccp 不传有效payload 增加无效输入检测
7 命令注入 mydlink_api.ccp 通过api_page注入 严格过滤api_page参数
8 硬编码凭证 do_login 使用硬编码凭证登录 删除硬编码凭证
9 命令注入 pingV4Msg 通过ping_addr注入,%0a绕过 严格过滤ping_addr参数

5. 漏洞挖掘经验总结

  1. 关键桥梁定位

    • 找到web端和bin端连接的桥梁(如callback_xxx函数)
  2. 搜索技巧

    • 使用grep -r搜索关键信息
    • 通过web端抓包参数定位关键二进制文件
  3. 绕过技巧

    • Web安全中的bypass技巧(如%0a换行符)同样适用于IoT的web端输入
  4. 漏洞模式识别

    • 关注危险函数(systemsprintf等)
    • 检查用户输入过滤是否全面
    • 注意缓冲区大小限制
  5. 测试方法

    • 对每个用户可控参数进行边界测试
    • 尝试各种特殊字符和超长输入

6. 免责声明

本文提到的所有漏洞均已报送CVE、CNVD,仅供学习交流使用,请勿用于非法用途。

D-LINK DIR-830L路由器漏洞挖掘与分析教程 1. 厂商与设备概述 D-Link(友讯科技) : 成立于1986年,全球前三大专业网络公司 产品包括交换机、无线、宽带及数字家庭网络产品 全球70余国设立超过160个行销据点 DIR-830L A1路由器 : 固件版本:DIR830LA1_ FW100B07 固件下载地址:legacyfiles.us.dlink.com/DIR-830L/REVA/FIRMWARE/ 固件未加密,可使用 binwalk -Me 提取 2. 环境搭建与准备 仿真环境 使用FirmAE进行仿真:https://github.com/pr0v3rbs/FirmAE 关键二进制文件 核心文件: sbin/ncc2 Web与二进制文件间的桥梁: callback_xxx 类型函数 3. 漏洞详细分析 3.1 cancelPing缓冲区溢出漏洞 漏洞点 : 位于 callback_ccp_ping 函数 触发格式: ccp_act=cancelPing&nextPage=xxxx 变量 char v10[260] 存在栈溢出风险 PoC : 使用登录cookie(空密码) 发送超长 nextPage 参数请求 需要发送两次请求 3.2 ping_ v4命令注入漏洞 漏洞点 : ping_addr 参数用户可控 过滤不全面(仅过滤了 ; ) 可使用 %0a 换行符绕过 PoC : 3.3 ping_ v6命令注入漏洞 漏洞点 : 与ping_ v4原理相同 ping_addr 参数用户可控 PoC : 3.4 sub_ 450E7C缓冲区溢出漏洞 漏洞点 : 在 callback_ccp_get_set 中调用 sub_450E7C 使用危险函数 sprintf ,参数完全可控 访问路径: get_set.ccp 3.5 web_ access.ccp目录遍历漏洞 漏洞点 : callback_ccp_web_access 函数 当 ccp_act=setfolder 时调用 sub_4B188C 未过滤 . 和 / ,导致路径穿越 利用方式 : 在任意可写路径下创建文件夹 示例:在 /www 目录创建poc4.html 3.6 mydlink_ api.ccp拒绝服务漏洞 漏洞点 : 不传任何payload会导致网页崩溃 3.7 mydlink_ api.ccp命令注入漏洞 漏洞点 : api_page 参数用户可控 直接拼接至 _system 调用中 PoC : 3.8 do_ login硬编码凭证漏洞 漏洞点 : sbin/ncc2 的 do_login 函数中存在硬编码凭证 3.9 pingV4Msg命令注入漏洞 初始限制 : 会先做DNS解析,解析失败则不执行system 绕过方法 : 使用 %0a 换行符绕过正则匹配 PoC : 4. 漏洞汇总表 | 编号 | 漏洞类型 | 影响组件 | 攻击方式 | 修复建议 | |------|-------------------|---------------------|-----------------------------------|-----------------------------------| | 1 | 缓冲区溢出 | cancelPing | 发送超长nextPage参数 | 增加输入长度检查 | | 2 | 命令注入 | ping_ v4 | 通过ping_ addr注入,%0a绕过 | 严格过滤用户输入 | | 3 | 命令注入 | ping_ v6 | 同上 | 同上 | | 4 | 缓冲区溢出 | sub_ 450E7C | 发送超长Interface字段 | 增加输入长度检查 | | 5 | 目录遍历 | web_ access.ccp | 利用路径穿越上传文件 | 严格过滤路径参数 | | 6 | 拒绝服务 | mydlink_ api.ccp | 不传有效payload | 增加无效输入检测 | | 7 | 命令注入 | mydlink_ api.ccp | 通过api_ page注入 | 严格过滤api_ page参数 | | 8 | 硬编码凭证 | do_ login | 使用硬编码凭证登录 | 删除硬编码凭证 | | 9 | 命令注入 | pingV4Msg | 通过ping_ addr注入,%0a绕过 | 严格过滤ping_ addr参数 | 5. 漏洞挖掘经验总结 关键桥梁定位 : 找到web端和bin端连接的桥梁(如 callback_xxx 函数) 搜索技巧 : 使用 grep -r 搜索关键信息 通过web端抓包参数定位关键二进制文件 绕过技巧 : Web安全中的bypass技巧(如 %0a 换行符)同样适用于IoT的web端输入 漏洞模式识别 : 关注危险函数( system 、 sprintf 等) 检查用户输入过滤是否全面 注意缓冲区大小限制 测试方法 : 对每个用户可控参数进行边界测试 尝试各种特殊字符和超长输入 6. 免责声明 本文提到的所有漏洞均已报送CVE、CNVD,仅供学习交流使用,请勿用于非法用途。