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值需为注解类的方法名。
➡️