Zabbix Marco 注入(CVE-2024-22116)

声明

本文版权归原作者所有,未经允许禁止转载。

漏洞原理

Zabbix 后台中的 Ping 脚本参数校验不当,可直接拼接最终导致远程代码执行。

影响版本

7.0.0alpha1<=Zabbix<=7.0.0rc2 
6.4.0<=Zabbix<=6.4.15

前提条件

获取后台权限,可创建或编辑 Host。

漏洞复现

环境搭建

下载对应版本的源码,将 sql 文件放入当前目录,启动数据库:

https://cdn.zabbix.com/zabbix/sources/oldstable/6.4/zabbix-6.4.15.tar.gz

docker run -d \
  --name mysql \
  --net=host \
  -e MYSQL_DATABASE=zabbix \
  -e MYSQL_USER=zabbix \
  -e MYSQL_PASSWORD=zabbix \
  -e MYSQL_ROOT_PASSWORD=root \
  -v ./mysql_data:/var/lib/mysql \
  -v $(pwd):/docker-entrypoint-initdb.d \
  mysql:8.0.30 \
  --character-set-server=utf8 \
  --collation-server=utf8_bin \
  --max_allowed_packet=64M \
  --skip-ssl \
  --default-authentication-plugin=mysql_native_password

启动 Zabbix Server:

docker run --name zabbix \
	--net=host \
	-e DB_SERVER_HOST="127.0.0.1" \
	-e MYSQL_DATABASE="zabbix" \
	-e MYSQL_USER="zabbix" \
	-e MYSQL_PASSWORD="zabbix" \
	--restart unless-stopped \
	-d zabbix/zabbix-server-mysql:6.4.15-centos

启动 Zabbix 前端:

docker run --name zabbix-web-nginx \
	--net=host \
	-e ZBX_SERVER_HOST="localhost" \
	-e DB_SERVER_HOST="127.0.0.1" \
	-e MYSQL_DATABASE="zabbix" \
	-e MYSQL_USER="zabbix" \
	-e MYSQL_PASSWORD="zabbix" \
	--restart unless-stopped \
	-d zabbix/zabbix-web-nginx-mysql:6.4.15-centos

命令执行

进入后台:

Admin/Zabbix

创建 Host:

执行 Ping 操作,可能会出现错误,多试几次即可:

参考链接

https://mp.weixin.qq.com/s/QD—tw9RddCvWXkLwh3hMA

https://mp.weixin.qq.com/s/ofsQf1utTlRZjVX430H5kA