代码审计中,CC3链实例化与反序列化,InvokerTransformer与InstantiateTransformer有何区别?

摘要:代码审计 | CC3链 —— 实例化 vs 反序列化 InvokerTransformer vs InstantiateTransformer 目录 环境说明 CC3的设计思路 前置知识:实例化触发 vs 反序列化触发 readObject
代码审计 | CC3链 —— 实例化 vs 反序列化 InvokerTransformer vs InstantiateTransformer 目录 环境说明 CC3的设计思路 前置知识:实例化触发 vs 反序列化触发 readObject 触发实验 newInstance 触发实验 反射补充:clazz.newInstance() 的限制 构造恶意 Class:EvilClass 触发入口:TemplatesImpl.newTransformer() 为什么需要继承 AbstractTranslet 传参:反射修改私有字段 为什么需要 _tfactory 直接调用测试 桥梁:TrAXFilter 构造方法 串联:ChainedTransformer + InstantiateTransformer 完整 Payload CC3TransformedMap 版本 CC3LazyMap 版本 补充:InvokerTransformer vs InstantiateTransformer 环境说明 和之前一样: Commons Collections 3.2.1 CC3的设计思路 CC3 是建立在两条已有链的基础上拼出来的: CC1 LazyMap 版的触发链:AnnotationInvocationHandler → LazyMap.get() → ChainedTransformer TemplatesImpl 加载字节码(fastjson里学过)的流程:_bytecodes → defineClass → newTransformer() CC3 就是把这两条链拼在一起,中间加一个 TrAXFilter 作为桥梁。 最终目标是让目标服务器执行我们写的任意 Java 代码。
阅读全文