CC1打不通时的另外一条链CC3
💡
原文中文,约14300字,阅读约需34分钟。
📝
内容提要
CC1和CC6通过Runtime.exec调用计算器,CC3则通过动态类加载,可以通过一个路径加载恶意类,并通过链子初始化类,从而执行代码块中的代码,通过反射修改TemplatesImpl类的属性,调用newTransformer()方法,即可执行恶意类中的代码,ysoserial上还有另一条调用链,通过InstantiateTransformer类和ChainedTransformer类可以实现恶意类的调用。
🎯
关键要点
- CC1和CC6通过Runtime.exec调用计算器。
- CC3通过动态类加载加载恶意类并执行代码。
- 动态类加载允许通过路径加载恶意类,执行静态或构造代码块中的代码。
- TemplatesImpl类的defineClass方法用于动态加载类。
- 通过反射修改TemplatesImpl类的私有属性以执行恶意代码。
- 需要确保恶意类继承AbstractTranslet类以避免空指针异常。
- 使用ChainedTransformer和InvokerTransformer执行newTransformer方法。
- ysoserial提供了另一条调用链,通过InstantiateTransformer和ChainedTransformer执行恶意代码。
- 在构造函数中初始化属性值以控制Templates对象。
- 完整的CC6调用链可用于绕过InvokerTransformer的限制。
➡️