Fork me on GitHub

# 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标签绕过补丁
Alt text

三、复现分析

复现环境: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分支。
Alt text
194行会实例化MutableExpression,看下这个类的方法,
Alt text
查阅java手册
,可以用表达式的形式来调用构造方法、实例化对象、调用方法
Alt text
这里方法名赋值为forName
Alt text
跟到具体处理array标签的代码,因为array标签没有设置length属性,来到else分支,Expression的Target设置为一个Object对象
Alt text
最终本函数会将调用Class.forName的Expression对象压入表达式栈中
Alt text
再看一下endElement实例化恶意类的地方,将Class.forName从栈顶弹出,调用getValue的方法实例化UnitOfWorkChangeSet类
Alt text
最终来到漏洞触发点,传入jdk7u21的gadgets触发漏洞。
Alt text
调用栈信息:
Alt text
复现情况:
Alt text

复现环境:jdk1.7.0_21+weblogic 10.3.6

当jdk版本改为jdk1.7.0_21发现之前的payload不能用了,下断跟下原因,这里发现jdk1.7版本处理xml时跟jdk1.6不一样,是由一个一个Handler来处理。
Alt text
来到处理array的Handler,这个类的成员变量只有length属性,没有method属性
Alt text
看其父类的属性,有class属性,在向上找的话也没发现method属性,知道报错的原因了,具体跟一下
Alt text
跟入父类的addAttribute
Alt text
这里'method'!=class返回false
Alt text
这里抛出异常
Alt text
Alt text

复现环境: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

posted @ 2019-06-24 21:33  Afant1  阅读(1091)  评论(0编辑  收藏  举报