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

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

相关推荐
qq_4480111614 小时前
C语言中的动态内存分配
c语言·开发语言·php
叠层归一研究院16 小时前
AGI 系统(十一):二阶网络 — 二阶递归 × 多主体 (元符号网络)
开发语言·人工智能·算法·php·agi
数据知道17 小时前
反序列化漏洞:Java、PHP、Python 三条线各讲透
java·网络·python·安全·网络安全·php
江畔柳前堤17 小时前
Function Calling 与 Tool Calling:从认知到工程的全景深度解析
开发语言·网络·人工智能·深度学习·算法·机器学习·php
那年窗外下的雪.18 小时前
AIDC 学习日志 Day 3:OSPF Underlay 实验、故障排查与深入解析
服务器·网络·php
Hello.Reader20 小时前
REALITY 技术深度解析从 TLS 伪装、抗主动探测到 VLESS + XTLS Vision 完整实践
开发语言·php
catchadmin20 小时前
Fiber 与 PHP 8.6 Polling API 异步初探
android·开发语言·php
梅菲塔亚21 小时前
Keepalived高可用全解析
linux·运维·服务器·开发语言·网络·php
weixin_307779131 天前
PHP 大文件上传:内存占用、超时与最佳实践
linux·服务器·开发语言·nginx·php
郑州光合科技余经理1 天前
餐饮预定系统架构拆解:订单链路、权限组织与私有化源码交付
java·开发语言·前端·数据库·人工智能·系统架构·php