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。

➡️

继续阅读