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代码

环境搭建

  1. 数据库配置

    • 修改include/config.php文件,配置正确的数据库连接信息
    • 使用phpMyAdmin或其他数据库管理工具创建数据库
    • 导入Cacti根目录下的cati.sql文件
  2. 验证环境

    • 确保能够正常访问Cacti Web界面

漏洞复现步骤

  1. 构造恶意请求,设置action参数为save
  2. dbhost参数中注入SQL代码
  3. 发送请求到pollers.php脚本

漏洞详细分析

漏洞调用链

完整的漏洞调用链如下:

action="save" → form_save() → poller_host_duplicate() → SQL注入

关键代码分析

  1. 入口点 - pollers.php第427行:
// 明显的SQL拼接漏洞点
$host = $save['dbhost'];
$sql = "SELECT id FROM host WHERE hostname = '$host'";
  1. 调用路径

    • form_save()方法(第321行)调用poller_host_duplicate()
    • poller_host_duplicate()方法中直接拼接SQL语句
  2. 参数获取

$save['dbhost'] = form_input_validate(
    get_nfilter_request_var('dbhost'), 
    'dbhost', 
    '', 
    true, 
    3
);
  1. 关键函数
    • get_nfilter_request_var():获取请求中dbhost变量的值,未进行过滤
    • form_input_validate():未对SQL注入进行有效防范

漏洞利用条件

  1. 需要两个关键参数:

    • dbhost:SQL注入点
    • action:必须设置为save
  2. 需要授权用户权限

漏洞修复建议

  1. 升级到最新版本的Cacti
  2. 对用户输入进行严格的过滤和转义
  3. 使用参数化查询或预处理语句替代直接SQL拼接

注意事项

  1. CVE编号争议:有用户指出阿里云最初记录的CVE编号与官方不一致,但后来可能已修正
  2. 该漏洞需要授权用户权限才能利用

总结

该漏洞源于Cacti在pollers.php脚本中对用户输入处理不当,导致授权用户可通过构造恶意请求执行任意SQL代码。开发人员应特别注意用户输入的处理,避免直接拼接SQL语句。

关键点

  • 漏洞位于pollers.php脚本
  • 通过dbhost参数注入
  • 需要action=save触发漏洞路径
  • 需要授权用户权限
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 脚本 漏洞详细分析 漏洞调用链 完整的漏洞调用链如下: 关键代码分析 入口点 - pollers.php 第427行: 调用路径 : form_save() 方法(第321行)调用 poller_host_duplicate() poller_host_duplicate() 方法中直接拼接SQL语句 参数获取 : 关键函数 : 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 触发漏洞路径 需要授权用户权限