Weblogic CVE-2019-2725补丁JDK1.6绕过分析

18 篇文章 3 订阅

前言

简单的水一篇

这两天网上公布了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 = "1.xml";
        XMLDecoder XD =new XMLDecoder(new FileInputStream(filename));
        Object o = XD.readObject();
        System.out.println(o);
    }

输入的XML

<java>
<array method="forName">
<string>oracle.toplink.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对象,最后进行实例化,此处就不说了。
在这里插入图片描述

结尾

水水更健康。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值