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

2024-01-25 03:40

本文主要是介绍Weblogic CVE-2019-2725补丁JDK1.6绕过分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

简单的水一篇

这两天网上公布了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对象,最后进行实例化,此处就不说了。
在这里插入图片描述

结尾

水水更健康。

这篇关于Weblogic CVE-2019-2725补丁JDK1.6绕过分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/641980

相关文章

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

关于MyISAM和InnoDB对比分析

《关于MyISAM和InnoDB对比分析》:本文主要介绍关于MyISAM和InnoDB对比分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录开篇:从交通规则看存储引擎选择理解存储引擎的基本概念技术原理对比1. 事务支持:ACID的守护者2. 锁机制:并发控制的艺

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意