若是你的Zabbix的Admin口令太弱或者使用了默认口令(Admin/zabbix),而被***破解了口令的话,Zabbix服务器在***面前就已经毫无抵抗力了。***能够建立“system.run[command,<mode>]”监控项执行命令,甚至获取服务器shell,获取root权限。linux
先介绍下“system.run[command,<mode>]”,这个监控项是agent自带的,使zabbix server能够远程在agent的机器上执行任意命令。方法有二:一是创建监控项,二是经过zabbix_get命令直接远程调用。使agent启用这个监控项要在配置文件里设置EnableRemoteCommands=1。命令执行权限限制于zabbix agent的启动用户,若是你为了方便,把agent的启动用户设置为root的话(AllowRoot=1),这是很是危险的。shell
下面模拟一个场景,展现***在获取Zabbix Admin口令的状况下,如何获取服务器的shell,甚至root权限:安全
这里利用NetCat(nc)命令打开shell,若是你的系统是RedHat/CentOS系列,nc能够经过yum下载到。bash
选择【Administration】->【Scripts】,建立一个script,以下图:服务器
“Execute on”选择Zabbix server,“Commands”里输入:ide
mkfifo /tmp/tmp_fifo cat /tmp/tmp_fifo | /bin/bash -i 2>&1 | nc -l 2222 > /tmp/tmp_fifo
上面的意思是打开一个shell,监听2222端口。spa
进入【Dashboard】界面,在下面随便点击一个Host,会弹出一个“Scripts”选项卡,点击上面建立的“create shell”,这样上面的命令就会被执行。.net
到zabbix server服务器上能够看到2222号端口已经在监听了。3d
下面咱们在本身的机器上,用nc命令链接到server的shell:server
上图显示咱们成功获取了zabbix服务器的shell,并且是root权限!这是由于个人zabbix server是以root启动的。
下面说一下如何对zabbix安全加固,防止这种状况发生:
一、很重要的一点,zabbix的登陆口令必定要复杂,不要用默认口令或弱口令。
二、zabbix的server和agent都不要以root启动,不要设置AllowRoot=1。
三、禁止agent执行system.run,不要设置EnableRemoteCommands=1。
四、常常打安全补丁,若是系统内核版本太低有漏洞的话,即便在zabbix用户下照样能获取root权限。
参考
sohu漏洞案例:
http://www.wooyun.org/bugs/wooyun-2013-023089
Netcat 命令: