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的限制。
➡️

继续阅读