第17篇:Shiro反序列化在Weblogic下无利用链的拿权限方法

2022-12-06 10:21:06 浏览数 (1)

Part1 前言

Shiro反序列化漏洞虽然出现很多年了,但是在平时的攻防比赛与红队评估项目中还是能遇到。主站也许遇不到Shiro漏洞,但是主站边缘域名、全资子公司的子域名、边缘资产、微信公众号、微信小程序啥的,总能找到。现在遇到的shiro反序列化漏洞也是越来越难了,好多都是别人搞不定的。搞不定的原因要么是key比较偏门,要么是过不了waf防护,要么就是找不到可用的利用链,导致没办法拿权限。

我记得最早在前年测试weblogic反序列化漏洞的时候,突然想到了,如果使用了shiro组件的网站是部署在weblogic中间件下,完全可以利用weblogic中间件的coherence组件的利用链来打。Weblogic反序列化漏洞大致是通过T3、IIOP协议发送一个序列化数据包,相关类只要不在weblogic黑名单中,服务器就反序列化恶意代码执行攻击语句。同样,这个序列化数据包用shiro组件来处理,只要中间件是weblogic,也应该能反序列化成功。而且通过构造的反序列化数据包不通过T3、IIOP流程,也许还不受Weblogic黑名单的限制。于是在本机搭建的一堆weblogic各种版本的虚拟机环境中,测试发现是可行的,但是中间也是踩了一大堆坑,实属不易。

Part2 技术研究过程

  • 环境搭建

首先需要搭建一个在weblogic下的shiro网站应用,于是从github上搜索了一个samples-web-1.2.42.war包,上传到weblogic中间件中进行部署。

接下来一路点击下一步,点击“激活更改”,有的新手到这一步就停了,导致环境搭建不成功。记得在“控制”选项卡下边,点击“为所有请求提供服务”,至此环境就搭建成功了。

如下图所示,搭建成功了。

  • 反序列化利用链的选择

Weblogic的Coherence组件反序列化漏洞的POC有好几个,主要包括CVE-2020-2555、CVE-2020-2883、CVE-2020-14756、CVE-2021-2135等等,每个反序列化exp其实就对应着Weblogic中间件下的一条反序列化利用链,选择也是很有技巧的,因为每个EXP都各有优缺点。比如说,CVE-2020-2555的exp用到了BadAttributeValueExpException这个类,这个类只在JDK1.8下才能用,适用范围就窄了;CVE-2021-2394与CVE-2022-21350只能发起jndi请求,因此只有在出网的情况下才能利用。后续有人把CVE-2020-2883的POC中的BadAttributeValueExpException这个类换掉,使POC更加通用。最终经过一系列对比筛选,CVE-2020-2883、CVE-2020-14756、CVE-2021-2135这三个POC看起来比较通用,而且这三个POC可以接Javascript引擎,执行任意Java代码,为后续通过shiro打weblogic内存马打下基础。于是就拿来测试了一下。

POC大致如下格式:

  • Coherence组件的SUID不同问题

接下来需要做的事情是将不同Weblogic版本的Coherence利用链整合进ysoserial工具包中,这样可以直接调用ysoserial工具来生成shiro反序列化的poc。这里就遇到了一个非常大的麻烦,Weblogic有不同版本如12.2.130、12.2.140、14.1.100等等,每个细微版本的Coherence库的SUID都不一样,在反序列化漏洞利用过程中,SUID对不上,是没法反序列化成功的。网上有文章对Weblogic下的Coherence组件的不同SUID做了总结,但是我本地反复测试的结果,好像与网上的文章给的结果不太一样。为了解决这一问题,我也不纠结了,综合考虑时间与成本,选用了最简单的URLClassLoader类加载不同版本的Coherence的jar包的方法,将不同weblogic版本的coherence POC融合进ysoserial工具包中。

接下来按照shiro组件的加密方式,生成反序列化数据包

使用burpsuite发包之后,Weblogic服务器成功弹出计算器,证明这种思路是可行的。

  • 内存马问题

这里我就不过多叙述了,可以选用网上靠谱的代码拿来直接用。建议大家看看先知社区feihong的文章https://xz.aliyun.com/t/9343,讲的非常详细。最终把feihong的代码进行整合,最终发现打内存马是成功的。

如下图所示,内存马是成功的。

Part3 总结

1. 实现weblogic回显的反序列化代码会非常大,导致生成的rememberMe的cookie值很长,记得把内存马的代码放在post body中,减少cookie的大小。

2. 如果使用weblogic利用链打不成功,那可能是目标weblogic更新了补丁,需要换一个较新的POC,实在不行,如果服务器的JDK版本低于1.8.191,可以用jndi出网的方法反弹shell。

3. 上述回显方法引用了Templates模板类,这个类用来打shiro反序列化没问题,但是用来打T3、IIOP应该是不能成功的,因为这个类被加入了weblogic的黑名单中

4. 10.3.6.0版本的weblogic用coherence打不成功,因为默认没开启。这种情况下最好用JDK-7u21、jre-8u20、CCK1、CCK3的利用链来打,其实也就与weblogic无关了。

5. 近期ABC_123写的几款工具被公布到网上了,有很多网友后台回复我,希望提供工具的官方哈希值。由于微信公众号文章发布之后,仅能修改20个字,所以为了防止工具被人恶意加入后门,ABC_123借此文章发布工具的md5哈希值如下:

(声明:ABC_123研发的工具都是内部使用的,用来打攻防比赛或者做日常渗透测试,禁止非法使用,从来不对外公开下载。工具泄露非本人自愿,本人无意愿让工具传播。也请大家不要再跟我要工具了,谢谢了。)

Struts2_19.02版本 哈希值如下:

MD5: 66B588FA4BC1969F3CDD9FCB3EB151CC

SHA1: FBDB7FF43A2DA8CCFFF7346C6BAD8E0619248E76

Struts2全版本漏洞检测工具19.06版本 哈希值如下:

MD5: 667CA10E430E2FE65AC239384F208C7F

SHA1: 39DD5FE1307E644051BCF9A7270F90D23CC0B586

Weblogic T3/IIOP反序列化工具V0.3 哈希值如下:

MD5: 91513512BBB42CB6080C36B4D06472EF

SHA1: FDD694DEBBFCC14BE7BE90EED2610AF4831FFAB0

0 人点赞