java反序列化CC1 TransformedMap链

💡 原文中文,约7700字,阅读约需19分钟。
📝

内容提要

本文介绍了Java反序列化漏洞中的CC1 TransformedMap链的利用过程,通过构造Transformer执行链和ChainedTransformer对象,将其传入TransformedMap中,再通过AnnotationInvocationHandler对象进行序列化和反序列化,最终触发TransformedMap的checkSetValue方法,从而执行恶意代码。

🎯

关键要点

  • 本文介绍了Java反序列化漏洞中的CC1 TransformedMap链的利用过程。
  • 通过构造Transformer执行链和ChainedTransformer对象,将其传入TransformedMap中。
  • 利用AnnotationInvocationHandler对象进行序列化和反序列化,最终触发TransformedMap的checkSetValue方法。
  • 调用链包括ObjectInputStream.readObject()、AnnotationInvocationHandler.readObject()等。
  • InvokerTransformer.transform()方法进行反射调用,所有参数可控。
  • ChainedTransformer.transformer()方法对Transformer[]列表执行循环调用。
  • ConstantTransformer.transform()方法做简单转换,返回Runtime.class。
  • TransformedMap.checkSetValue()方法中调用this.valueTransformer的transform方法。
  • 通过decorate方法间接将this.valueTransformer定义为ChainedTransformer。
  • MapEntry.setValue方法调用checkSetValue(),触发整个攻击链。
  • AnnotationInvocationHandler.readObject中调用setValue方法,触发反序列化攻击。
  • 构造payload代码以执行反序列化攻击,最终弹出计算器。
  • 注意事项包括jdk1.8以上版本对AnnotationInvocationHandler.readObject的修改。
  • 构造TransformedMap时,Map的key值需为注解类的方法名。
➡️

继续阅读