安全矩阵

 找回密码
 立即注册
搜索
查看: 2581|回复: 0

Java反序列化漏洞分析(二)-Shiro550

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-5-30 20:17:25 | 显示全部楼层 |阅读模式
原文链接:Java反序列化漏洞分析(二)-Shiro550
0x00 纠错
首先纠正一下上篇文章Java反序列化漏洞分析(一)-Shiro550的错误错误,上篇提到dnslog使用原生环境搭建没有打成功,这是错的错的错的,其实是可以打的。我给搞错了,URLDNS 这个利用链本身不依赖于任何第三方库,同时不限制jdk的版本,所以通常是用来检测反序列化的点(目标出网),我当时没打成功,是因为我做实验时,用了同一条dnslog的url打过一遍,第二遍死活不出结果,写这篇文章时又测了几次,发现是url的锅,要不停的变换才会一直出结果


Java默认有TTL缓存,DNS解析会进行缓存,所以可能会出现第一次收到DNS的log,后面可能收不到的情况。
0x01 原生Shiro550执行命令当使用URLDNS链打过去,在DNSLOG平台有回显的时候,就说明这个地方存在反序列化漏洞。
但是要利用的话还得是使用CC链等利用链去进行命令的执行(shiro550中自带的是cc3.2.1版本的组件)。
经过测试ysoserial拥有的CommonsCollections利用链从1-7都无法成功执行命令, 都是报错



无法反序列化一个数组,经常敲代码,修bug的都知道,报错的位置一般都在最下边的,去看看
at org.apache.shiro.io.DefaultSerializer.deserialize(DefaultSerializer.java:77) 直接点过去看看


可以看到在初探Java反序列化漏洞(一)中提到的重点函数readObject()函数,但是又有一点点不一样,它这里是new了一个ClassResolvingObjectInputStream,而非传统的ObjectInputStream 问题就可能出现在这里,全局搜索看下


这里是通过 ClassUtils.forName(osc.getName());来反射调用的,而前面都是通过Class.forName("java.lang.Runtime"); 来进行反射执行命令的
直接在这里下断点,然后使用CC2链打一下,调试半天也没看懂,太菜了,先记下。参考文章中说的是
Shiro resovleClass 使用的是ClassLoader.loadClass()而非Class.forName(),而ClassLoader.loadClass不支持装载数组类型的class。
别人在环境中引入了commons-collections4.0,使得ysoserial的CommonsCollections2利用链可以成功利用。这是因为CommonsCollections2用的是非数组形式的利用链,在该利用链上没有出现数组类型的对象,这使得在shiro的环境下,可以正确执行命令。(后续学习这条链)
0x01 构造新的利用链我不会。。。看半天还是没看懂,前置知识缺的有点多,直接放链接吧
https://www.anquanke.com/post/id/192619#h2-3
总结就是利用链中的ChainedTransformer这个类的利用是无法成功的,因为它的类属性iTransformers是数组类型的Transformers,最终通过使用TemplatesImpl.newTransformer函数来动态loadClass构造好的evil class bytes
通过大佬改造的https://github.com/wh1t3p1g/ysoserial CommonsCollections10 利用链打一下


这个图又是假的,淦,用大佬的CC10链打了之后,突然怀疑之前的命令搞错了,我之前是用whoami测试的,我想起了mac命令执行不太一样,重新用open -a Calculator试了一遍,发现CC2链又可以成功了,瞬间凌乱(已经把添加的commons-collections4.0版本给注释了),这两天一直在重新测试找原因,通过重新下载shiro,切换版本重新来一遍,CC2并不可以打原生的shiro550,用大佬的CC10也打不出来,原因也找不到,前置知识缺的太多了,再搞下去也是浪费时间。
最终找到我为啥可以打成功,因为我在shiro/samples/web目录下生成过war包,当时是在测试4.0版本RCE,生成的target目录没有删除,之后启动的时候应该都是使用target目录下的东西,即使去除4.0版本依旧没用,生成的war包并没有改变还是可以RCE的4.0版本,搞得我怀疑人生。还有说JRMP这个Gadget可以打,也是废了,没成功
不搞了,心累,等补充完知识,再重新来吧
接下来通过 https://github.com/frohoff/ysoserial 这个项目来学习java反序列化的利用链吧,慢慢来吧。
0x02 参考推荐一个Chrome插件---Toby for Chrome,适合舍不得关标签页,留待后续研究的。
中途参考的文章太多了,就用这个插件生成的分享链接吧
https://www.gettoby.com/p/m9955hzbsf6s


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 04:32 , Processed in 0.012797 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表