逆向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,实现复杂的对象转换或方法调用。
➡️