Part1 前言
在日常的渗透测试、红队评估项目中,中间件层面的漏洞挖掘是非常重要一环,Weblogic中间件在最近几年接连被爆出很多高危漏洞,基本上都是可以直接拿到权限的。主流的Weblogic漏洞包括HTTP协议上的CVE-2017-10271、CVE-2019-2729等,但是其影响weblogic的版本为12.1.3之前版本。如果能事先判断出weblogic的版本号是大于12.1.3的,那么可以放弃测试这两种漏洞,节省很多时间。
此外还有很多T3协议、IIOP协议下的各种Java反序列化漏洞,但是这些反序列化漏洞利用起来非常非常麻烦,尤其是最近几年出现的漏洞很多都基于coherence组件,不同版本号的weblogic的coherence组件的SUID都不一样,而漏洞利用成功的前提就是漏洞利用工具的SUID和目标weblogic环境的SUID必须一致。
这就需要我们在渗透测试的时候,准确判断出Weblogic版本号,以备找到合适版本号的coherence组件去进行Java反序列化攻击。而且在得知weblogic版本号之后,不符合版本号的漏洞就不用测试了,这样会节省很多时间。接下来就给大家分享一些在各种情况下判断Weblogic细微版本号的方法。再次强调一下,依据ABC_123测试weblogic漏洞的经验,在weblogic漏洞的探测与利用之前,需要想尽各种办法去判断weblogic细微版本号,这样可以节省很多时间,也可以发最少量的数据包。因为weblogic各种漏洞非常多,非常繁杂,而且利用成功与否受weblogic版本影响特别大。
Part2 技术研究过程
- Weblogic细微版本号对照表
既然要判断Weblogic版本号,首先就要让大家了解一下weblogic各版本号的命名规则。不得不说,Oracle公司的产品,在版本号的命名上、日志结构上一向弄得很复杂。
笔者曾经遇到这么一个尴尬的事情,相信网友们也遇到过类似的情况。在一次渗透测试报告总结会中,有技术人员找到了一个Weblogic反序列化漏洞,但是他给出的修复建议是,把Weblogic 11g版本升级到12c版本。客户那边的接口人开会时就对此提出质疑和批评:我们公司部署的Weblogic中间件明明是10.3.6版本,是10版本的,你们给的修复建议居然是由11版本升级到12版本,我们没有11版本的weblogic啊?
结果在场的项目经理和技术人员都被问懵了,被客户质疑地哑口无言,楞是没答出这个问题来,一致认为修复建议给错了,于是引起了一系列误会。后来我发了如下这张图,跟大家解释了一下,其实客户跟我们说的都没错,Weblogic 10.3.6版本跟11g版本其实是一回事,只是命名规则不同。具体大家可以把下面这张图仔细看几遍,就自然明白了,我在这里就不过多叙述了。
- 判断是否使用了Weblogic
1 Weblogic指纹特征判断
判断一个网站应用是否使用了Weblogic中间件,可以通过查找指纹特征的方法去判断。输入一个不存在的URL路径,看Web服务是否返回如下“From RFC 2068Hypertext Transfer Protocol”关键字,即可判断出是否使用Weblogic中间件来。
使用Burpsuite发包返回如下:
2 Weblogic内置URL路径判断
对于有些网站屏蔽了404错误回显的情况,可以通过访问Weblogic内置Web目录是否存在去间接去判断是否使用了Weblogic中间件。比如/consolehelp/、/bea_wls_internal/、/console/等路径是Weblogic专有的,再比如说可以访问Weblogic专有的漏洞CVE-2017-10271、CVE-2019-2729等对应的URL路径(/wls-wsat/、/_async/等),但是这个方法不推荐使用,因为基本上都会被WAF拦截,更严重的情况是会导致封IP,导致后续正常路径也无法判断出来,而且大多数甲方客户修复漏洞的方法,就是直接删除存在漏洞的war包,导致这两个路径也不存在。
- 判断Weblogic详细版本号方法
1 访问特定页面可显示版本号
访问/console/目录,如果console目录应用没有删除,在页面左下角会给出一个weblogic的详细版本号。
2 通过T3协议获取
通过T3协议可以直接获取Weblogic版本号,缺点是现在Weblogic的T3直接暴露在公网上的情况很少了,很多时候在前面会放置一个nginx反向代理,这种情况下,T3识别版本号的方法就用不了了。
可以使用nmap去识别,具体命令如下:
nmap 192.168.237.235 -p 7130 --script="weblogic-t3-info.nse" -v -Pn -n -sV --open -T4
也可以自己从github上下载一个T3协议的发包代码,自己修改一下,直接把T3协议的返回包输出,就直接可以看到版本号了。
3 CVE-2022-21371文件包含漏洞判断
这个漏洞是2022年出现的漏洞,是一个文件包含漏洞,通过这个漏洞可以跳转目录对Weblogic的/WEB-INF/xml、jsp、html文件等进行文件读取。这也是被大家忽略的一个Nday漏洞,在这里,我们可以用这个漏洞,间接判断出weblogic的版本号。
思路是,fast_track.html这个文件的显示内容有个时间,每一个细微版本大致对应着一个weblogic的细微版本号,用来做版本识别恰到好处。
访问.//fast_track.html,如下图所示,对于Weblogic的12.2.1.3.0版本,此文件回显时间内容是1996,2017
如下图所示,对于Weblogic的12.1.3.0.0版本,此文件回显的时间内容是1996,2014
4 通过返回头来判断
很早之前从github上的一个脚本中复制出来放在我的笔记中的,忘记具体作者是谁了。这个方法我没有具体验证过,大家测试成功后,可以在微信公众号后台给我发消息,告诉我准确度如何。
通过返回头判断weblogic版本号:
def check_weblogic_by_header(headers):
status,msg = False,'may be not weblogic'
if 'X-Powered-By' in headers:
m = re.findall(r'Servlet/(. )s JSP/(. )',headers['X-Powered-By'])
if m :
Servlet,JSP = m[0]
if Servlet == '2.4' and JSP == '2.0':
status = True
msg = 'weblogic 9.x'
elif Servlet == '2.5' and JSP == '2.1':
status = True
msg = 'weblogic 10.x'
elif Servlet == '3.0' and JSP == '2.2':
status = True
msg = 'weblogicc 12.x'
return status,msg
Part3 总结
1. nday也是有价值的,看大家对漏洞的理解以及如何灵活运用。
2. 判断weblogic版本号方法还有很多,上述方法是我比较常用的,也给大家拓展一下思路,还有很多其它方法后续再慢慢讲。
专注于网络安全技术分享,包括红队、蓝队、日常渗透测试、安全体系建设等
每周一篇,99%原创,敬请关注