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方法
- 参数限制于Java基本类型
- 官方文档参考:Oracle XMLEncoder文档
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 利用思路
- 寻找静态属性:查找被实例化当成静态属性的危险类
- 利用限制:
- 类的范围被严格限制
- 需要找到既能获取任意类,又能使用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
- class:
NO_TYPE(打码类)- class:
org.apache.xmlbeans.impl.schema.SchemaTypeImpl - setter:
fullJavaName - getter:
javaClass
- class:
3.6 利用方式
3.6.1 直接命令执行
- 寻找可直接执行命令或进行文件操作的类
- 示例:(打码部分)直接执行命令
3.6.2 反序列化利用
- 使用
org.slf4j.ext.EventData类- 构造方法可以进行二次XMLDecoder
- 参数可控
4. 漏洞利用效果
- 最终可实现远程代码执行
- 可构造回显
5. 参考链接
6. 防御建议
- 及时安装Oracle官方发布的安全补丁
- 限制对WebLogic异步通信服务的访问
- 实施网络层面的防护措施,如WAF规则更新
- 监控可疑的XML请求模式
7. 总结
CVE-2019-2729漏洞通过WebLogic的XMLDecoder功能实现远程代码执行,利用特定的XML标签和属性操作Java对象的getter/setter方法。该漏洞在12.1.3版本中的利用方式与10.3.6版本有所不同,需要寻找新的可利用类和调用链。防御该漏洞的关键在于及时打补丁和限制XMLDecoder的功能使用。