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

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

相关推荐
Jayyih4 小时前
OSI七层模型和TCP/IP四层模型
网络·tcp/ip·php
黑金IT5 小时前
PHP 后台通过权限精制飞书多维表格
开发语言·php·飞书
大熊不是猫8 小时前
PHP实现企业微信 会话存档功能
开发语言·php·企业微信
第二层皮-合肥11 小时前
如何设置等长的最大走线长度
服务器·开发语言·php
百锦再1 天前
对前后端分离与前后端不分离(通常指服务端渲染)的架构进行全方位的对比分析
java·开发语言·python·架构·eclipse·php·maven
andux1 天前
layuiadmin与laravel 12 前后端分离nginx配置
php·layui·laravel·layuiadmin
m0_579146651 天前
docker desktop的容器间通信
docker·容器·php
007php0071 天前
百度面试题解析:synchronized、volatile、JMM内存模型、JVM运行时区域及堆和方法区(三)
java·开发语言·jvm·缓存·面试·golang·php
KevinLyu1 天前
内存管理篇(一)· zend_alloc 的基本概念
php
星光一影1 天前
大型酒店管理系统源码(多酒店版)
mysql·php