cve-2019-2729 weblogic 12.1.3版本分析
字数 1504 2025-08-26 22:11:56

WebLogic CVE-2019-2729漏洞分析教学文档

1. 漏洞概述

CVE-2019-2729是Oracle WebLogic Server中的一个远程代码执行漏洞,影响WebLogic 12.1.3版本。该漏洞源于WebLogic的异步通信服务在处理XML数据时存在缺陷,允许攻击者通过构造特殊的XML请求在目标服务器上执行任意代码。

2. 漏洞背景

  • 最初公开的利用是针对WebLogic 10.3.6版本
  • 12.1.3版本的利用在阿里白帽大会上公开
  • 漏洞编号:CVE-2019-2729
  • 受影响版本:WebLogic 12.1.3

3. 技术分析

3.1 版本差异

  • 10.3.6版本利用UnitOfWorkChangeSet类,但12.1.3版本已移除该类
  • WebLogic 2715补丁禁止使用class标签
  • 需要通过DocumentHandler检查可用的其他标签和属性

3.2 可利用的XML标签

3.2.1 property标签

<property name="command"></property>  //执行getCommand方法
<property name="command"><string>calc</string></property>  //执行setCommand方法

3.2.2 field标签

  • 用于获取类中的静态属性

3.3 示例代码

3.3.1 Java示例

package com.company;

import java.io.BufferedInputStream;
import java.io.FileInputStream;

public class People {
    public static People people = new People("xxxx");
    String command;
    
    People(String command) {
        this.command = command;
    }
    
    public String getCommand() {
        System.out.println(this.command);
        return this.command;
    }
    
    public void setCommand(String command) {
        this.command = command;
    }
    
    public static void main(String[] args) {
        java.io.File file = new java.io.File("d:/people.xml");
        java.beans.XMLDecoder xd = null;
        try {
            xd = new java.beans.XMLDecoder(new BufferedInputStream(new FileInputStream(file)));
        } catch(Exception e) {
            e.printStackTrace();
        }
        Object o = xd.readObject();
        xd.close();
    }
}

3.3.2 XML利用示例

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_131" class="java.beans.XMLDecoder">
    <field class="com.company.Test" name="people" id="peopleobj"/>
    <var idref="peopleobj">
        <property name="command">
            <string>calc</string>
        </property>
        <property name="command">
        </property>
    </var>
</java>

3.4 利用思路

  1. 寻找静态属性:查找被实例化当成静态属性的危险类
  2. 利用限制
    • 类的范围被严格限制
    • 需要找到既能获取任意类,又能使用void标签进行实例化操作的类
    • 然后调用实例化类的setter/getter方法

3.5 可利用的类

  1. beanclass

    • set方法是String类型
    • get方法返回的是Class类型
  2. staticclass

    • 提取静态属性所有的class类型
    • 如果staticclass的子类是beanclass,也算入其中
  3. 具体可利用的类

    • com.bea.xbean.schema.BuiltinSchemaTypeSystem (公开的)
    • ST_ANY_TYPE (打码类)
      • class: org.apache.xmlbeans.impl.schema.SchemaTypeImpl
      • setter: FullJavaName
      • getter: JavaClass
    • NO_TYPE (打码类)
      • class: org.apache.xmlbeans.impl.schema.SchemaTypeImpl
      • setter: fullJavaName
      • getter: javaClass

3.6 利用方式

3.6.1 直接命令执行

  • 寻找可直接执行命令或进行文件操作的类
  • 示例:(打码部分)直接执行命令

3.6.2 反序列化利用

  • 使用org.slf4j.ext.EventData
    • 构造方法可以进行二次XMLDecoder
    • 参数可控

4. 漏洞利用效果

  • 最终可实现远程代码执行
  • 可构造回显

5. 参考链接

  1. 阿里白帽大会WebLogic议题
  2. Oracle XMLEncoder文档

6. 防御建议

  1. 及时安装Oracle官方发布的安全补丁
  2. 限制对WebLogic异步通信服务的访问
  3. 实施网络层面的防护措施,如WAF规则更新
  4. 监控可疑的XML请求模式

7. 总结

CVE-2019-2729漏洞通过WebLogic的XMLDecoder功能实现远程代码执行,利用特定的XML标签和属性操作Java对象的getter/setter方法。该漏洞在12.1.3版本中的利用方式与10.3.6版本有所不同,需要寻找新的可利用类和调用链。防御该漏洞的关键在于及时打补丁和限制XMLDecoder的功能使用。

WebLogic CVE-2019-2729漏洞分析教学文档 1. 漏洞概述 CVE-2019-2729是Oracle WebLogic Server中的一个远程代码执行漏洞,影响WebLogic 12.1.3版本。该漏洞源于WebLogic的异步通信服务在处理XML数据时存在缺陷,允许攻击者通过构造特殊的XML请求在目标服务器上执行任意代码。 2. 漏洞背景 最初公开的利用是针对WebLogic 10.3.6版本 12.1.3版本的利用在阿里白帽大会上公开 漏洞编号:CVE-2019-2729 受影响版本:WebLogic 12.1.3 3. 技术分析 3.1 版本差异 10.3.6版本利用 UnitOfWorkChangeSet 类,但12.1.3版本已移除该类 WebLogic 2715补丁禁止使用 class 标签 需要通过 DocumentHandler 检查可用的其他标签和属性 3.2 可利用的XML标签 3.2.1 property标签 参数限制于Java基本类型 官方文档参考: Oracle XMLEncoder文档 3.2.2 field标签 用于获取类中的静态属性 3.3 示例代码 3.3.1 Java示例 3.3.2 XML利用示例 3.4 利用思路 寻找静态属性 :查找被实例化当成静态属性的危险类 利用限制 : 类的范围被严格限制 需要找到既能获取任意类,又能使用void标签进行实例化操作的类 然后调用实例化类的setter/getter方法 3.5 可利用的类 beanclass : set方法是String类型 get方法返回的是Class类型 staticclass : 提取静态属性所有的class类型 如果staticclass的子类是beanclass,也算入其中 具体可利用的类 : com.bea.xbean.schema.BuiltinSchemaTypeSystem (公开的) ST_ANY_TYPE (打码类) class: org.apache.xmlbeans.impl.schema.SchemaTypeImpl setter: FullJavaName getter: JavaClass NO_TYPE (打码类) class: org.apache.xmlbeans.impl.schema.SchemaTypeImpl setter: fullJavaName getter: javaClass 3.6 利用方式 3.6.1 直接命令执行 寻找可直接执行命令或进行文件操作的类 示例:(打码部分)直接执行命令 3.6.2 反序列化利用 使用 org.slf4j.ext.EventData 类 构造方法可以进行二次XMLDecoder 参数可控 4. 漏洞利用效果 最终可实现远程代码执行 可构造回显 5. 参考链接 阿里白帽大会WebLogic议题 Oracle XMLEncoder文档 6. 防御建议 及时安装Oracle官方发布的安全补丁 限制对WebLogic异步通信服务的访问 实施网络层面的防护措施,如WAF规则更新 监控可疑的XML请求模式 7. 总结 CVE-2019-2729漏洞通过WebLogic的XMLDecoder功能实现远程代码执行,利用特定的XML标签和属性操作Java对象的getter/setter方法。该漏洞在12.1.3版本中的利用方式与10.3.6版本有所不同,需要寻找新的可利用类和调用链。防御该漏洞的关键在于及时打补丁和限制XMLDecoder的功能使用。