[Java反序列化]CommonsCollections3利用链学习
2021/7/25 20:37:41
本文主要是介绍[Java反序列化]CommonsCollections3利用链学习,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 利用思路
- 漏洞利用链分析
- 利用代码
利用思路
绕过了对InvokerTransformer
的利用,替代方法是这⾥⽤⼀个新的
Transformer
,org.apache.commons.collections.functors.InstantiateTransformer
,通过利⽤ InstantiateTransformer
来调⽤到TrAXFilter
的构造⽅法,再利
⽤其构造⽅法⾥的 templates.newTransformer()
调⽤到 TemplatesImpl
⾥的字节码
漏洞利用链分析
首先是AnnotationInvocationHandler.class
的readObject
方法,为了调用set方法触发回调的过程,这个来源于this.memberValues.entrySet().iterator()
(从这里不难看出需要一个传入Map)
set触发"回调"
触发了Transformer类
的回调过程
从构造的payload这里我们也不难看出是为了实例化一个TrAXFilter
类
当然再往下跟踪这里也验证了我们的猜想
到了最关键的地方了,调用newTransformer
,后面和我上一篇文章分析的过程一致[Java安全]利用TemplatesImpl执行字节码
接下来触发了TransletClassLoader
的defineClass
方法
成功通过执行defineClass加载出我们的字节码
计算器弹出来
扣个小细节_tfactory
我个人觉得可以不用加上,但可能是大师傅觉得加上这个减少报错条件,现在太菜了还是猜不透加这个原因,毕竟与这个相关的调用也在我们弹出计算器之后了
还有一个细节是
从上图中我们不难看出TemplatesImpl
中对加载的字节码是有一定要求的:这个字节码对应的类必须
是 com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet
的子类
可以看到在readObject中首先设置为-1
如果不想在这里抛出异常终止那就必须是com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet
的子类
因此最终在这里实例化我们自定义的恶意代码类
因此成功执行恶意代码,弹出了计算器
利用代码
phith0n/JavaThings
这篇关于[Java反序列化]CommonsCollections3利用链学习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-19JAVA分布式id教程:轻松入门与实践
- 2024-11-19Java高并发教程:入门与实践指南
- 2024-11-19JAVA高并发直播教程:新手入门指南
- 2024-11-19Java高并发直播教程:入门与实践指南
- 2024-11-19Java微服务教程:初学者快速入门指南
- 2024-11-19JAVA微服务教程:新手入门的详细指南
- 2024-11-19Java微服务教程:从零开始搭建你的第一个微服务应用
- 2024-11-19Java项目开发教程:初学者必备指南
- 2024-11-19Java项目开发教程:新手快速入门指南
- 2024-11-19Java项目开发教程:零基础入门到实战