Zabbix是全球流行的企业级开源监控解决方案。
CVE-2022-23134 中,攻击者可构造 cookie,伪造身份访问 setup.php 中的 step 节点,从而通过重写数据库配置,重置管理员 Admin 账号,最终可登录 Zabbix 并 getshell。
影响版本
5.4.0 - 5.4.8
6.0.0 - 6.0.0 beta1
简析
先看到 setup.php,参考 CVE-2022-23131 的分析, 其中 $step 取自 Cookie 的 zbx_session 字段,因此可控。
忽略中间设置默认语言、默认时区、默认主题等等,直接来到 class CSetupWizard 看初始化安装的过程
根据 step 可以定位到具体的 stage 中
当 step 为 6 时,看到 $this->dbConnect($db_user, $db_pass); 连接数据库
因此构造一个 poc 发起请求, 将 step 设置为 6
这就访问到了 stage6 中,由响应可见,由于默认参数配置最终进入了 stage2,提示数据库连不上。
但是没关系,接着往下看,将数据库配置写文件
其中,const CONFIG_FILE_PATH 为 '/etc/zabbix/web/zabbix.conf.php',而 getConfig() 是 用一个三元表达式从 session 中获取或取默认,因此也认为可控。
最后来到 $config 对象调用 CConfigFile 类的 save() 方法,利用 file_put_contents() 写文件
其中 $file 在 CConfigFile 初始化时赋值为 '/etc/zabbix/web/zabbix.conf.php',文件的内容在 getString() 方法中,可以看到都是可控的。
因此,漏洞利用的思路就是创建一个 FakeMySQL,利用 session 从 Cookie 中获取并且最终写了配置,让 zabbix 去连接 FakeMySQL,重置管理员账户密码,进而登录后台 getshell。
创建 FakeMySQL
(这里建议使用和目标 zabbix 版本一致或相差不远的 zabbix 数据库)
查看 zabbix users 表,看到 Admin 的 passwd 字段,这是默认密码 'zabbix' 加密后的结果,也是我们漏洞利用需要的。
导出 zabbix 数据库;
mysqldump zabbix > zabbix.sql
再在 VPS 创建 FakeMySQL Server
create database zabbix1;
Query OK, 1 row affected (0.00 sec)
mysql> use zabbix1;
Database changed
source C:UsersAdministratorDesktopzabbix_users.sql
Query OK, 0 rows affected (0.00 sec)
[...]
构造 exp 如下:
目标写数据库配置完成。
最后就是利用重置的密码登录 zabbix 后台,再 getshell,很简单不说了。
若直接用 vmx 环境做复现的话,虚拟机启动以后,默认的数据库配置文件是酱紫的。
显然,以 apache 权限运行的 zabbix 只有读权限,而无法修改 zabbix.conf.php。因此,使用 vmx 作为复现环境就需要注意先删除原本的 zabbix.conf.php 文件,才能复现成功,且后面的重复修改配置不再受影响。
瑞斯拜!!
原文始发于微信公众号(Craft Security Group):Zabbix setup.php 访问权限控制不当漏洞(CVE-2022-23134)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论