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编码

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

相关推荐
两个人的幸福5 天前
Windows 桌面应用自研 PHP 队列(下):完整代码与六大工程化优化
php
BingoGo7 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack7 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户3074596982078 天前
PHP 扩展——从入门到理解
php
鹏仔先生8 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
云水一下9 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
xingpanvip9 天前
星盘接口开发文档:本命盘接口指南
android·开发语言·css·php·lua
酉鬼女又兒9 天前
零基础入门计算机网络运输层:端到端通信核心作用、端口号分类规则、复用分用工作机制及UDP与TCP协议全方位对比详解
网络·网络协议·tcp/ip·计算机网络·考研·udp·php
dog2509 天前
不要再继续优化 TCP
网络协议·tcp/ip·php
Channing Lewis9 天前
PHP 解析 Excel 的那些坑:一次“行号错位”引发的数据丢失
开发语言·php·excel