java反序列化CC1 TransformedMap链
内容提要
本文介绍了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值需为注解类的方法名。