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

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

相关推荐
鱼鱼说测试6 小时前
Jenkins+Python自动化持续集成详细教程
开发语言·servlet·php
网硕互联的小客服10 小时前
Apache 如何支持SHTML(SSI)的配置方法
运维·服务器·网络·windows·php
苏琢玉11 小时前
如何让同事自己查数据?写一个零依赖 PHP SQL 查询工具就够了
mysql·php
全栈软件开发16 小时前
PHP域名授权系统网站源码_授权管理工单系统_精美UI_附教程
开发语言·ui·php·php域名授权·授权系统网站源码
mit6.82416 小时前
ubuntu远程桌面很卡怎么解决?
linux·ubuntu·php
奥格列的魔法拖鞋~1 天前
Docker-LNMP架构 创建多项目- 单个ngixn代理多个PHP容器服务
nginx·docker·eureka·架构·php·lnmp
皓空揽月1 天前
php+apache+nginx 更换域名
nginx·php·apache
我不是立达刘宁宇2 天前
php危险函数,二.assert()[现版本已弃用]
开发语言·php
liulanba2 天前
NAT 和 PNAT
开发语言·php
nvvas2 天前
PHP imagick扩展安装以及应用
php