# CVE-2019-2725反序列化漏洞补丁绕过分析
一、CVE-2019-2725几种poc构造
CVE-2019-2725几种poc构造看我博客链接,解压密码都是afanti_
CVE-2019-2725 二次反序列化jdk7u21 gadgets
CVE-2019-2725 二次反序列化jndi注入分析
CVE-2019-2725 二次反序列化FileSystemXmlApplicationContext Gadget POC
CVE-2019-2725二次反序列化EventData Gadget POC/JdbcRowSetImpl POC构造
二、补丁信息
看下CVE-2019-2725补丁信息,与上次补丁过滤了class标签,主要的目标是找个标签代替class标签绕过补丁
三、复现分析
复现环境:jdk1.6.0_31+weblogic 10.3.6
通过<array method="forName">
,Class.forName(classname) 反射方法获取类,先把回显的poc怼出来,回显参考我写的这篇文章https://www.cnblogs.com/afanti/p/10887381.html,使用jdk7u21 gadgets,具体poc直接贴在最下方。
直接定位到处理xml标签的类:com.sun.beans.ObjectHandler类的startElement方法:
在处理array标签时跟入,this.isString为false来到else分支。
194行会实例化MutableExpression,看下这个类的方法,
查阅java手册
,可以用表达式的形式来调用构造方法、实例化对象、调用方法
这里方法名赋值为forName
跟到具体处理array标签的代码,因为array标签没有设置length属性,来到else分支,Expression的Target设置为一个Object对象
最终本函数会将调用Class.forName的Expression对象压入表达式栈中
再看一下endElement实例化恶意类的地方,将Class.forName从栈顶弹出,调用getValue的方法实例化UnitOfWorkChangeSet类
最终来到漏洞触发点,传入jdk7u21的gadgets触发漏洞。
调用栈信息:
复现情况:
复现环境:jdk1.7.0_21+weblogic 10.3.6
当jdk版本改为jdk1.7.0_21发现之前的payload不能用了,下断跟下原因,这里发现jdk1.7版本处理xml时跟jdk1.6不一样,是由一个一个Handler来处理。
来到处理array的Handler,这个类的成员变量只有length属性,没有method属性
看其父类的属性,有class属性,在向上找的话也没发现method属性,知道报错的原因了,具体跟一下
跟入父类的addAttribute
这里'method'!=class返回false
这里抛出异常
复现环境:jdk1.6.0_31+weblogic 12.1.3
在jdk1.6.0_31版本Weblogic 12服务器都不能启动,查阅资料要求weblogic 12.1.3要求jdk需要1.7以上,所以weblogic12不存在绕过。
总结
利用环境jdk1.6以下,weblogic版本10.3.6。
通过<array method="forName">
绕过。
POC:链接:https://pan.baidu.com/s/1Pa8_Bpl7XpDC6U12r1IWUw
提取码:rpkb