Cacti SQL注入漏洞分析(CVE-2023-51448)
字数 1042 2025-08-18 17:33:13
Cacti SQL注入漏洞分析(CVE-2023-51448)技术文档
漏洞概述
Cacti是一个开源的网络监控和图形化工具,用于监控网络设备和服务器性能。在1.2.25及更早版本中,存在一个SQL注入漏洞(CVE-2023-51448),允许授权用户通过pollers.php脚本执行任意SQL代码。
漏洞影响:
- 漏洞组件:
pollers.php - 影响范围:Cacti 1.2.25及更早版本
- 漏洞类型:SQL注入
- 影响程度:授权用户可执行任意SQL代码
环境搭建
-
数据库配置:
- 修改
include/config.php文件,配置正确的数据库连接信息 - 使用phpMyAdmin或其他数据库管理工具创建数据库
- 导入Cacti根目录下的
cati.sql文件
- 修改
-
验证环境:
- 确保能够正常访问Cacti Web界面
漏洞复现步骤
- 构造恶意请求,设置
action参数为save - 在
dbhost参数中注入SQL代码 - 发送请求到
pollers.php脚本
漏洞详细分析
漏洞调用链
完整的漏洞调用链如下:
action="save" → form_save() → poller_host_duplicate() → SQL注入
关键代码分析
- 入口点 -
pollers.php第427行:
// 明显的SQL拼接漏洞点
$host = $save['dbhost'];
$sql = "SELECT id FROM host WHERE hostname = '$host'";
-
调用路径:
form_save()方法(第321行)调用poller_host_duplicate()poller_host_duplicate()方法中直接拼接SQL语句
-
参数获取:
$save['dbhost'] = form_input_validate(
get_nfilter_request_var('dbhost'),
'dbhost',
'',
true,
3
);
- 关键函数:
get_nfilter_request_var():获取请求中dbhost变量的值,未进行过滤form_input_validate():未对SQL注入进行有效防范
漏洞利用条件
-
需要两个关键参数:
dbhost:SQL注入点action:必须设置为save
-
需要授权用户权限
漏洞修复建议
- 升级到最新版本的Cacti
- 对用户输入进行严格的过滤和转义
- 使用参数化查询或预处理语句替代直接SQL拼接
注意事项
- CVE编号争议:有用户指出阿里云最初记录的CVE编号与官方不一致,但后来可能已修正
- 该漏洞需要授权用户权限才能利用
总结
该漏洞源于Cacti在pollers.php脚本中对用户输入处理不当,导致授权用户可通过构造恶意请求执行任意SQL代码。开发人员应特别注意用户输入的处理,避免直接拼接SQL语句。
关键点:
- 漏洞位于
pollers.php脚本 - 通过
dbhost参数注入 - 需要
action=save触发漏洞路径 - 需要授权用户权限