cacti漏洞CVE-2022-46169的复现

一、环境搭建

1.拉取

git clone https://github.com/vulhub/vulhub

拉去成功后去官网找到cacti的安装包

下载后使用unzip解压后

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

unzip 1.2.22.zip

2.启动容器

bash 复制代码
docker restart $(docker ps -aq)

3.添加debug调试

物理机的 VScode 要安装好以下插件: Remote-ssh、Docker、dev containers。 在使用 Vcode 远程连接虚拟机,连接容器的时候需要用到。

以上插件安装好之后的具体步骤如下:

进入容器:

docker exec -it <your-container>

安装指定版本的 Xdebug:

pecl install xdebug-3.1.6。

启用 xdebug 扩展:

docker-php-ext-enable xdebug

重启容器:

docker restart <your-container>

编辑 .ini 文件:

/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini,添加如下内容: zend_extension=xdebug xdebug.mode=debug xdebug.start_with_request=yes

使用 VScode 连接容器后,为容器安装 Xdebug 插件

4.访问

安装完后使用主机IP:8080访问cacti登陆界面,使用admin/admin作为账号密码登录,并根据页面中的提示进行初始化,初始化的过程就是点击"下一步",直到安装成功即可:

5.测试

虽然响应包里没有回显,但是进入容器中即可发现/tmp/success已成功被创建:

二、代码审计

1.使用vscode远程连接cacti容器

  1. 看函数名称这是一个权限的识别,必须绕过 remote_client_authorized

再看get传递的参数,是用户可控的,一定能走进case polldata 这个开关语句,一定会触发poll_for_data 函数。

接下来有三个请求

之后,对这个数组进行一个判断,判断之后是一个查询。 再查询的时候,出现了一个函数 proc_open

如果需要执行命令,一定要将output赋值给value,否则output就会变成U,这里做了一个prepare_validate_result提前的判断,必须要绕过这个函数

这两个不相等就绕过了

三、实现

在代码里打上断点

在浏览器里搜索

然后使用burpsuilte抓包,并在header头里加上 X-Forwarded-For:127.0.0.1

在访问容器后生成了sucess文件

构造相关的命令行

传参时,防止空格的影响要进行urlencode编码

经过解码之后就会得到对应的结果

相关推荐
桃花键神2 小时前
Undetectable接入亮数据代理IP深度测评:高效、稳定、适配性极强的海外多账号运营利器
网络协议·tcp/ip·php
catchadmin3 小时前
PHP 8.5 #[\NoDiscard] 揪出“忽略返回值“的 Bug
php
oMcLin8 小时前
如何在 Debian 11 上实现基于 BGP 路由的动态负载均衡,提升跨地域数据中心的连接稳定性
debian·php·负载均衡
oMcLin8 小时前
如何在RHEL 9上配置并优化Kubernetes 1.23高可用集群,提升大规模容器化应用的自动化部署与管理?
kubernetes·自动化·php
ben9518chen9 小时前
Linux文件系统基础
linux·服务器·php
电商API&Tina21 小时前
京东 API 数据采集接口接入与行业分析
运维·服务器·网络·数据库·django·php
Sammyyyyy1 天前
Symfony AI 正式发布,PHP 原生 AI 时代开启
开发语言·人工智能·后端·php·symfony·servbay
码农水水1 天前
大疆Java面试被问:TCC事务的悬挂、空回滚问题解决方案
java·开发语言·人工智能·面试·职场和发展·单元测试·php
do better myself1 天前
php 使用IP2Location限制指定的国家访问实现
开发语言·php