前言
主要是宽字节发了泛微的xstream反序列化0day,就看了下xstream的CVE-2021-21350利用
代码分析
CVE_2021_21350.java
1 | import com.thoughtworks.xstream.XStream; |
Evil.java
1 | import com.sun.org.apache.bcel.internal.classfile.Utility; |
payload如上,对官方发的payload进行修改,思路参考了宽字节安全的文章:https://mp.weixin.qq.com/s/iTP9jBypsJEsSlAIaNOnhw
该反序列化主要用到的点为利用
1 | <java.util.PriorityQueue serialization='custom'> |
调用内部xml反序列化后类的readObject,也就是调用PriortyQueue的readObject方法
1 | s.defaultReadObject() |
1 | s.readInt() |
1 | s.readObject() |
最终贴上调用链
1 | at com.sun.tools.javac.processing.JavacProcessingEnvironment$NameProcessIterator.hasNext(JavacProcessingEnvironment.java:423) |
可以看到主要还是触发com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data.toString方法,和之前一样,只不过这次触发选择了PriorityQueue反序列化进行触发。