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

e4e08aafcaf48d54eb39c5906da5e241.png

 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中间件中进行部署。

f536465f0c3949050241de364b6651cd.png

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

838f5b021d7d667e9ed91ec2ea0e7fee.png

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

294f7a4e2afe4c90b36348bfdb80c209.png

  • 反序列化利用链的选择

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大致如下格式:

171e8eebef9d4856d7124768056f911a.png

  • 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工具包中。

7e803348a56802ffd339a44c064f4a3d.png

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

b90f6a6f0ace95b4d91216f43f5a5f7a.png

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

ac0ba4919d06eee295b1987f63d3c082.png

  • 内存马问题

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

412218307f35753a8e2d4be4f709be19.png

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

5bf959fb05bba2b4ceb563ec3b0004c6.png

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

74f07a54cc7b15990b04c80cc6fa424c.png

专注于网络安全技术分享,包括红队、蓝队、日常渗透测试、安全体系建设等

每周一篇,99%原创,敬请关注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

希潭实验室

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值