逆向Java反序列化:从漏洞挖掘者的视角拆解CC1链的发现与构造

💡 原文中文,约11400字,阅读约需27分钟。
📝

内容提要

Apache Commons Collections是一个开源Java工具库,扩展了标准集合框架的功能。通过InvokerTransformer类的反射机制,可以执行系统命令,最终实现通过序列化调用执行命令。

🎯

关键要点

  • Apache Commons Collections是一个开源Java工具库,扩展了标准集合框架的功能。
  • InvokerTransformer类通过反射机制可以执行系统命令,实现命令执行的效果。
  • 环境准备需要使用CommonsCollections 3.2.1版本,JDK版本必须在1.8.0_71以下。
  • InvokerTransformer类实现了Serializable接口,可以被反序列化。
  • 通过InvokerTransformer的transform方法可以动态调用对象的指定方法。
  • TransformedMap类的checkSetValue方法通过valueTransformer调用transform方法。
  • AbstractInputCheckedMapDecorator类的静态内部类MapEntry中的setValue调用了checkSetValue。
  • AnnotationInvocationHandler类的readObject方法调用了setValue方法,且该类实现了Serializable接口。
  • 需要通过反射实例化AnnotationInvocationHandler类,并构造合适的参数。
  • 构造的map需要包含有成员方法的注解,以便触发漏洞。
  • ConstantTransformer类的transform方法可以返回指定的常量,帮助构造调用链。
  • 最终通过ChainedTransformer组合多个InvokerTransformer和ConstantTransformer,实现复杂的对象转换或方法调用。
  • 构造的序列化调用链可以执行系统命令,如打开计算器。

延伸问答

Apache Commons Collections的主要功能是什么?

Apache Commons Collections是一个开源Java工具库,扩展了标准集合框架的功能,帮助开发者更高效地处理集合操作。

InvokerTransformer类是如何执行系统命令的?

InvokerTransformer类通过反射机制动态调用传入对象的指定方法,若传入Runtime对象并设置为执行命令的参数,则可以实现命令执行的效果。

构造CC1链需要哪些环境准备?

构造CC1链需要使用CommonsCollections 3.2.1版本,JDK版本必须在1.8.0_71以下。

如何通过反射实例化AnnotationInvocationHandler类?

可以通过反射获取AnnotationInvocationHandler类的构造方法,并设置为可访问,然后传入所需的参数进行实例化。

ConstantTransformer类的transform方法有什么作用?

ConstantTransformer类的transform方法可以返回指定的常量,帮助构造调用链。

如何构造复杂的对象转换或方法调用链?

可以通过ChainedTransformer组合多个InvokerTransformer和ConstantTransformer,实现复杂的对象转换或方法调用。

➡️

继续阅读