当前位置: 首页 > news >正文

cacti

参考链接(官方文档):

  • https://github.com/Cacti/cacti/security/advisories/GHSA-6p93-p743-35gf
  • Cacti命令执行(CVE-2022-46169)漏洞分析

前言

RCE介绍:CE漏洞是安全领域中最危险的高危漏洞之一,攻击者能够通过漏洞在目标系统上远程执行任意代码,从而完全控制服务器或应用程序。

核心问题是应用程序未对用户输入进行严格过滤,导致攻击者注入恶意代码并让服务器执行。

典型场景:

        1.用户输入直接拼接到系统命令(如os.command(input))。

        2.反序列化不可信数据(如Java的readObject())。

        3.文件上传未校验内容(如上传含恶意代码的PHP文件)。

然后上课讲了一个cacti的案例,这里最大的难题还是一些函数比较陌生,还有环境难搞。


一、漏洞简介
Cacti 是一款开源的网络监控与绘图工具,被广泛用于企业的基础设施监控中。2022 年末,研究人员披露了一个影响 Cacti 1.2.22 及以下版本的未授权远程命令执行漏洞(CVE-2022-46169)。

攻击者可在未授权的情况下,通过构造特定请求调用 Cacti 的 remote_agent.php 文件,从而远程执行任意系统命令。该漏洞的利用依赖于特定配置:启用了 SNMP 功能并存在至少一个线性数据模板。

二、影响范围

  • 影响版本:Cacti 1.2.17 - 1.2.22
  • 漏洞类型:未授权远程命令执行(RCE)
  • 利用条件:
    • 启用了 SNMP 接口
    • 存在相关的数据采集模板(如 POLLER 类型)
    • 可通过 X-Forwarded-For 伪造来源绕过身份认证

三、环境搭建

首先要把环境下好

在dockers容器里:

proxychains wget https://github.com/Cacti/cacti/archive/refs/tags/release/1.2.22.zip

下载完后再浏览器上打开,部署成功后,访问 http://<your-ip>:8080,初始账号密码为 admin/admin,按提示完成初始化。

打开网页后就输入用户名和密码(都是admin)然后下一步安装就行了

然后可以创建一个新图形,选device-uptime然后创建就行了,创建完之后就可以退出了,我们是要以访客的状态去测试的。

require(__DIR__ . '/include/global.php');
require_once($config['base_path'] . '/lib/api_device.php');
require_once($config['base_path'] . '/lib/api_data_source.php');
include_once($config['base_path'] . '/lib/data_query.php');
require_once($config['base_path'] . '/lib/api_graph.php');
require_once($config['base_path'] . '/lib/api_tree.php');
require_once($config['base_path'] . '/lib/data_query.php');
require_once($config['base_path'] . '/lib/html_form_template.php');
require_once($config['base_path'] . '/lib/ping.php');
require_once($config['base_path'] . '/lib/poller.php');
require_once($config['base_path'] . '/lib/rrd.php');
require_once($config['base_path'] . '/lib/snmp.php');
require_once($config['base_path'] . '/lib/sort.php');
require_once($config['base_path'] . '/lib/template.php');
require_once($config['base_path'] . '/lib/utility.php');

这个主要用于加载项目所需的各种库文件和全局配置。

查看数据库怎么存储值

docker ps -a
docker exec -it f87(这里是是一条命令结果中1.2.22的mysql的前缀) /bin/bash
mysql -uroot -p
然后输入密码
mysql> show databases;然后进到cacti的数据库里mysql> use cactimysql> show tables;

remote_agent.php这个代码,定义了一个鉴权函数

这段代码的核心逻辑是权限校验,具体解析如下: - remote_client_authorized() 是一个函数,推

测其作用是检查当前访问服务的远程客户端(如用户、设备等)是否已获得授权。

!remote_client_authorized() 表示对上述检查结果取反,即“如果远程客户端未被授权”。 - 若

满足“未授权”条件,则执行:print 'FATAL: You are not authorized to use this service' 意思是:输出错误信息,提示“致命错误:你未被授权使用此服务”。

$client_name代表的就是localhost,和$poller里面的hostname是相同的所以直接返回true,能返回ture,证明鉴权就绕过了

exit :终止程序运行,阻止未授权客户端继续访问服务。 整体来看,这段代码是服务端常见的安

全校验逻辑,用于拦截未授权访问,保护服务的安全性。

查poller-item:

mysql> select * from poller_item \G

安全建议:

        升级 Cacti 至最新版本(>= 1.2.23)

        禁用不必要的数据输入方法和 SNMP 功能

        限制 remote_agent.php 的访问来源

        在 Web 应用层增加认证机制与请求头校验逻辑

        使用 Web 应用防火墙(WAF)对敏感参数行为检测

http://www.xdnf.cn/news/1253683.html

相关文章:

  • vue3 find 数组查找方法
  • TrustZone技术详解————这篇是AI写的包括图
  • [Oracle] SIGN()函数
  • 大数据存储域——Hive数据仓库工具
  • 第14届蓝桥杯Scratch_选拔赛_初级及中级(STEMA)真题2022年12月18日
  • 碰撞问题的分析
  • 链式数据结构
  • 基于最大似然估计的卡尔曼滤波与自适应模糊PID控制的单片机实现
  • 北京-4年功能测试2年空窗-报培训班学测开-第六十九天-投简历第一天-从兴奋到害怕
  • 【图像处理基石】浅谈3D城市生成中的数据融合技术
  • 从零开始用 Eclipse 写第一个 Java 程序:HelloWorld 全流程 + 避坑指南
  • 如何设计一个开放授权平台?
  • 用 “私房钱” 类比闭包:为啥它能访问外部变量?
  • 【AI智能编程】Trae-IDE工具学习
  • vector使用模拟实现
  • 排序算法(二)
  • Qt-桌面宠物
  • win10/11网络防火墙阻止网络连接?【图文详解】防火墙阻止连接网络的解决方法
  • Unity 调节 Rigidbody2D 响应速度的解决方案【资料】
  • GPT-OSS-20B vs Qwen3-14B 全面对比测试
  • AI领域的三箭齐发之夜 - genie3,gpt-oss, Opus 4.1
  • K8S的POD数量限制
  • harbor仓库搭建(配置https)
  • 数据结构(4)
  • 时间轮算法
  • 【算法训练营Day21】回溯算法part3
  • vue3 el-dialog自定义实现拖拽、限制视口范围增加了拖拽位置持久化的功能
  • DNS 服务器
  • 【golang】基于redis zset实现并行流量控制(计数锁)
  • 部署Web UI自动化测试平台:SeleniumFlaskTester