Shiro反序列化在Weblogic下无利用链的拿权限方法
2023-5-3 23:1:22 Author: 渗透安全团队(查看原文) 阅读量:25 收藏

由于微信公众号推送机制改变了,快来星标不再迷路,谢谢大家!

 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无关了。


付费圈子

欢 迎 加 入 星 球 !

代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员

进成员内部群

星球的最近主题和星球内部工具一些展示

加入安全交流群

                               

关 注 有 礼

关注下方公众号回复“666”可以领取一套领取黑客成长秘籍

 还在等什么?赶紧点击下方名片关注学习吧!


干货|史上最全一句话木马

干货 | CS绕过vultr特征检测修改算法

实战 | 用中国人写的红队服务器搞一次内网穿透练习

实战 | 渗透某培训平台经历

实战 | 一次曲折的钓鱼溯源反制

免责声明
由于传播、利用本公众号渗透安全团队所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号渗透安全团队及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
好文分享收藏赞一下最美点在看哦

文章来源: http://mp.weixin.qq.com/s?__biz=MzkxNDAyNTY2NA==&mid=2247504229&idx=1&sn=a0d0ca10c8e36a7768746c5833dc4c09&chksm=c1762ccaf601a5dcbadc91a07f5109459031d3ee5e759bc162e8dc48def139090ed8a7237b5a#rd
如有侵权请联系:admin#unsafe.sh