weblogic-ssrf-redis

最近遇到weblogic的目标,大部分漏洞都修复了,发现了存在ssrf,但是部署了WAF。无法直接利用,后面通过脏数据的方式绕过waf。对内网进行探测,发现redis,通过定时任务方式,但反弹失败。

访问目标系统,使用weblogicscan发现了uddiexplorer目录。但是直接访问uddiexplorer/SearchPublicRegistries.jsp发现页面为空白,查看网页源码信息,发现源码都被注释。拦截响应内容,将注释符号删除,可得到正常页面。这时候发送post请求,发现被waf拦截。

Bypass-waf

在post数据中添加任意参数,并填充数值为脏数据(约180W),可成功请求。通过uddiexplorer/SetupUDDIExplorer.jsp页面获取其内网地址。编写脚本探测内网信息。

1
2
3
4
5
6
7
8
if "content-type: null" in req.text:
print("port is open:" + str(i))
elif "addresses" in req.text:
print('port not open:' + str(i))
elif "text/html" in req.text:
print("http server open:"+ str(i))
else:
print("It's filed:" + str(i))

跨了两个段之后,发现某台主机6379端口开放,发送反弹shell命令,页面成功回显命令回响。但是,未成功获取shell。原因可能是内网不通外网或者操作系统版本问题导致定时任务未成功写入。通过ssrf+dnslog验证内网是否可通外网,发现dnslog没接收到请求。因此,大概率为内网完全不通外网,导致shell无法反弹。

总结

本次关键点为waf绕过、redis服务探测。

  • WAF可使用脏数据填充方式绕过;
  • 内网探测时需注意内外网是否互通情况;
  • ssrf可用dict、file、gopher等协议进行探测。在这里尝试了多种协议,使用file报错java.lang.ClassCastException: sun.net.www.protocol.file.FileURLConnection incompatible with java.net.HttpURLConnection;使用gopher报错java.lang.ClassCastException: sun.net.www.protocol.gopher.GopherURLConnection incompatible with java.net.HttpURLConnection;使用dict报错unknown protocol: dict