黑名单机制必然会推动两种研究方向的发展:一是挖掘不在黑名单的新组件,是为绕过规则;二是发掘检查的盲区,是为绕过逻辑。
CVE-2020-14756
二次反序列化具有对抗检查逻辑的天生丽质,在CVE-2018-2893中就有利用字节数组和反射重建类两种方式。找找还有没有readObject
到Class.forName
的路子:
readUnsignedByte
读到的nType
为9或10时会进入readXmlSerializable
或readExternalizableLite
分支。
上述两个方法均通过自身loadClass
方法加载类,最终由Class.forName
获取类并返回。
-
readXmlSerializable
方法获取类后继续进行XML解析,是另一个XXE漏洞。
readExternalizableLite
方法获取类后继续调用readExternal
反序列化,不受黑名单限制,进而引出两个问题:
-
ExternalizableHelper
自身没有实现Serializable
接口,一定有什么地方调用它的readObject
-
loadClass
加载后强转为了ExternalizableLite
类型,它