CC1,3,6回顾( 二 )

,在其getValue?法中调?了 this.map.get , ?其hashCode?法调?了getValue?法
又在 java.util.HashMap#readObject中就可以找到 HashMap#hash()的调?
/* Gadget chain:java.io.ObjectInputStream.readObject()java.util.HashMap#readObjectjava.util.HashMap#hash()org.apache.commons.collections.keyvalue.TiedMapEntry.hashCode()org.apache.commons.collections.keyvalue.TiedMapEntry.getValue()org.apache.commons.collections.map.LazyMap.get()org.apache.commons.collections.functors.ChainedTransformer.transform()org.apache.commons.collections.functors.InvokerTransformer.transform()java.lang.reflect.Method.invoke()java.lang.Runtime.exec()*/而ysoserial中使用HashSet.readObject()来调用
java.util.HashSet.readObject()java.util.HashMap.put()java.util.HashMap.hash()逻辑也很清晰
这条链是Java7和8高版本通杀
CC3首先利?TemplatesImpl链是可以通过TemplatesImpl#newTransformer()执行代码的 。
在一个为了绕过?些规则对InvokerTransformer的限制 。所以CC3并没有使?到InvokerTransformer来调?任意?法,?是?到了另?个 类,com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter
这个类的构造?法中调?(TransformerImpl) templates.newTransformer(),免去了我们使?InvokerTransformer??调?newTransformer()?法这?步
?到?个新的Transformer,就是 org.apache.commons.collections.functors.InstantiateTransformerInstantiateTransformer也是?个实现了Transformer接?的类,他的作?就是调?构造?法.
利?InstantiateTransformer来调?到TrAXFilter的构造?法,再利?其构造?法?的templates.newTransformer()调?到TemplatesImpl?的字节码
小结知识点比较多,每一个都捋清楚后,就可以重分发散思维,各种组合利用
【CC1,3,6回顾】

推荐阅读