Java——CC链集合
💡
原文中文,约22800字,阅读约需55分钟。
📝
内容提要
本文讨论了Java中的反序列化漏洞,重点分析了Commons Collections库中的CC1链。通过研究InvokerTransformer和TransformedMap类,揭示了如何利用其transform方法执行任意命令。文章详细描述了POC的构造过程,并展示了通过反射和动态代理实现代码执行的方式。最后,强调了安全性的重要性,并提醒读者遵循相关法律法规。
🎯
关键要点
- 本文讨论了Java中的反序列化漏洞,重点分析了Commons Collections库中的CC1链。
- CC1链的源头是Commons Collections库中的Transformer接口中的transform方法,存在执行任意逻辑的漏洞。
- InvokerTransformer类可以执行任意方法,InstantiateTransformer类可以实例化任意类,构造函数触发危险逻辑。
- TransformedMap类中的checkSetValue方法调用了transform方法,成为攻击链的关键。
- 通过反射和动态代理实现代码执行的方式,利用AnnotationInvocationHandler类的readObject方法触发漏洞。
- 构造POC的过程中遇到多个问题,包括Runtime对象不可序列化和AnnotationInvocationHandler类中的判断条件。
- 最终的POC利用了ChainedTransformer类简化了多个transformer的调用。
- LazyMap类也存在类似的漏洞,通过动态代理实现代码执行。
- 文章强调了安全性的重要性,并提醒读者遵循相关法律法规。
❓
延伸问答
Java中的反序列化漏洞是什么?
Java中的反序列化漏洞是指攻击者利用反序列化过程中的漏洞,执行任意代码或命令,主要通过不安全的类和方法实现。
Commons Collections库中的CC1链是如何工作的?
CC1链通过Transformer接口中的transform方法,结合InvokerTransformer和TransformedMap类,允许执行任意逻辑,从而形成攻击链。
如何构造POC来利用Java反序列化漏洞?
构造POC需要创建一个TransformedMap实例,并通过InvokerTransformer设置恶意命令,利用AnnotationInvocationHandler的readObject方法触发漏洞。
InvokerTransformer类的作用是什么?
InvokerTransformer类用于执行任意方法,通过反射调用目标对象的方法,成为反序列化漏洞利用链中的关键组件。
TransformedMap类在反序列化漏洞中扮演什么角色?
TransformedMap类通过其checkSetValue方法调用transform方法,成为攻击链中的关键环节,允许执行恶意代码。
LazyMap类与反序列化漏洞有什么关系?
LazyMap类同样存在transform方法,可以被利用在反序列化过程中执行恶意代码,类似于TransformedMap。
➡️