Cacti命令执行漏洞分析(CVE-2022-46169)
2023-11-06 15:50:32

https://mp.weixin.qq.com/s/6crwl8ggMkiHdeTtTApv3A
https://github.com/vulhub/vulhub/blob/master/cacti/CVE-2022-46169/README.zh-cn.md

漏洞概述

Cacti是一个服务器监控与管理平台。在其1.2.17-1.2.22版本中存在一处命令注入漏洞,攻击者可以通过X-Forwarded-For请求头绕过服务端校验并在其中执行任意命令。

环境搭建

https://github.com/vulhub/vulhub/tree/master/cacti/CVE-2022-46169
使用vulhub搭建本地测试环境
image.png
image.png在docker文件夹中使用docker-compose up -d搭建即可

访问8080端口,默认密码admin/admin对Cacti进行一系列的安装操作
这个漏洞的利用需要Cacti应用中至少存在一个类似是POLLER_ACTION_SCRIPT_PHP的采集器。所以,我们在Cacti后台首页创建一个新的Grap
安装完成后选择创建图形
image.png
选择Uptime并创建即可
image.png
完成创建后即可复现漏洞

漏洞复现

GET /remote_agent.php?action=polldata&local_data_ids[0]=6&host_id=1&poller_id=`touch+/tmp/1` HTTP/1.1
Host: 192.168.1.13:8080
Cache-Control: max-age=0
X-Forwarded-For: 127.0.0.1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0
Connection: close

  

image.png
image.png
可见成功执行了命令

漏洞分析

从漏洞补丁可以看出,本次漏洞点主要存在于lib/functions.php、remote_agent.php,2个文件中。
https://github.com/Cacti/cacti/commit/7f0e16312dd5ce20f93744ef8b9c3b0f1ece2216

function.php
增加了一系列对于header的处理
image.png

remote_agent.php
对于接受的参数使用get_filter_request_var函数进行过滤,下面还用了cacti_escapeshellarg对$poller_id参数进行了转义
image.png

查看存在漏洞版本的源码
image.png
可以看见调用了remote_client_authorized函数进行了一个检测
其中又调用了get_client_addr函数
image.png
查看其逻辑
image.png
这里实际上就是使用$_SERVER来匹配这些http headers头,如果存在该headers头,就用explode去对数据进行分隔处理,不为空则进入if判断,又检测其是否为IP,进行了一个取反,所以进入了else,对client_addr进行了赋值,使用了break 2跳出了二层循环,返回了值

image.png
获取了client_addr后,还会进行一系列处理,判断是否为空,再次检测是不是ip,然后使用gethostbyaddr函数获取到localhost,

调用数据库查询,数据库中默认的hostname就是localhost,所以最终返回true,成功绕过了鉴权
image.png
image.png

绕过了鉴权,后续会提取参数进入一个switch,这里控制action为polldata,进入poll_for_data
image.png
获取local_data_ids host_id poller_id
image.png

接着就会在数据库中进行查询,将数据处理后switch判断action的值
image.png

当action的值为POLLER_ACTION_SCRIPT_PHP时,便可进入执行命令的逻辑
image.png
image.png
image.png
这条数据其实就是刚刚搭建环境时新增的Grap,在真实的渗透场景中,这两个值就需要去爆破

最终就会将数据拼接近proc_open中,这里我们可以用linux执行命令的特性,linux会率先执行中的命令
image.png

总结

漏洞利用实际上挺有限制,必须要去爆破两个id的值,总体上来说不算是特别难的漏洞

Prev
2023-11-06 15:50:32
Next