Weblogic CVE

阅读: 评论:0

Weblogic CVE

Weblogic CVE

前言

简单的水一篇

这两天网上公布了CVE-2019-2725的补丁使用array标签+method属性来获取Class的绕过,这里简单分析一下。

由于JDK1.7以上的XMLDecoder对每种标签支持的属性有严格的限制,所以此方法只适用于JDK1.6。

看本文之前建议先了解一下XMLDecoder的解析流程。

XMLDecoder解析流程分析

虽然文章写的是jdk1.7以上的,但是大体流程差异不大。

影响的Weblogic版本

Weblogic 10.3.6默认自带JDK1.6,但是可以选择使用系统中的JDK,有一定影响。

Weblogic 12以上要求JDK版本>1.6,所以这版本就没影响了。(感谢pyn3rd师傅提醒)

关键点分析

测试代码:

public static void main(String[] args) throws FileNotFoundException {String filename = &#l";XMLDecoder XD =new XMLDecoder(new FileInputStream(filename));Object o = XD.readObject();System.out.println(o);}

输入的XML

<java>
<array method="forName">
<string&plink.internal.sessions.UnitOfWorkChangeSet</string>
<void><array class="byte" length="2"><void index="0"><byte>-84</byte></void><void index="1"><byte>-19</byte></void></array>
</void>
</array>
</java>

2725的补丁过滤了object/new/method标签,void标签只允许用index,array的class只能用byte,并限制了长度,如上XML避开了过滤。

这里只分析关键的获取class部分,后续的实例化部分与之前的漏洞没有区别。

com.sun.beans.ObjectHandler类,进入到处理array标签的startElement函数调用,开头流程如下:

  1. 初始化属性HashMap。
  2. 创建MutableExpression对象,有关Expression看下这里,简单来说就是可以用类似表达式的形式来调用构造方法、数组读写、类函数的类。
  3. 遍历class/property/index/method属性,来设置Expression对象的Target或Method。

可以看到jdk1.6下会获取method标签的内容,并将其设置给创建的Expression对象,此处将method设置为了forName。

继续往下走,进入处理专门处理array标签的代码:

由于我们的array标签没有设置length属性由于我们的array标签没有设置length,所以var11此处为null,而后会Expression的Target设置为一个Class对象,最终本函数会将调用Class.forName的Expression对象压入表达式栈中。
后续步骤就剩下向该表达式添加类名参数并调用来获取class对象,最后进行实例化,此处就不说了。

结尾

水水更健康。

本文发布于:2024-01-27 17:54:59,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063492991759.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:Weblogic   CVE
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23