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

admin 2023年2月16日21:23:52评论30 views字数 2308阅读7分41秒阅读模式

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

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

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


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

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


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

Shiro反序列化在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大致如下格式:

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


  • 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反序列化在Weblogic下无利用链的拿权限方法


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

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


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

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


  • 内存马问题

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

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


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

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


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


原文始发于微信公众号(哈拉少安全小队):Shiro反序列化在Weblogic下无利用链的拿权限方法

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月16日21:23:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Shiro反序列化在Weblogic下无利用链的拿权限方法http://cn-sec.com/archives/1282374.html

发表评论

匿名网友 填写信息