### BECL 利用链使用条件及原理 **1. BECL 利用链核心原理** BECL 利用链的核心原理可以概括为:**利用一个看似无害的内部类,间接调用受限的命令执行函数** 它主要利用了 `com.bea.core.event.JmsEvent` 类及其相关类的反序列化过程。当一个 `JmsEvent` 对象被反序列化时,它会触发一系列的事件监听器,其中一个监听器会调用 `execute()` 方法来执行一个命令 BECL 的攻击链通常如下: 1. **构造恶意对象:** 攻击者首先构造一个恶意的 Java 对象,该对象包含一个指向目标命令执行函数的引用。这个对象通常会利用 Java 的**反射机制**,指向 `java.lang.Runtime` 类的 `exec()` 方法 2. **触发点:`com.bea.core.events.JmsEvent`**: 攻击者将上述恶意对象封装在一个 `JmsEvent` 对象中。当这个 `JmsEvent` 对象被反序列化时,它会触发 `readObject()` 方法 3. **事件监听:`com.bea.core.events.SerializableEventListener`**: `JmsEvent` 的反序列化会调用 `com.bea.core.events.SerializableEventListener` 的 `handleEvent()` 方法 4. **命令执行:`java.lang.Runtime.exec()`**: `SerializableEventListener` 的 `handleEvent()` 方法会进一步调用攻击者预设的恶意对象,最终导致 `java.lang.Runtime.exec()` 方法被执行,从而在服务器上执行任意系统命令 **简单来说,BECL 利用链就像一个接力赛:** - **第一棒(攻击者):** 构造恶意序列化数据 - **第二棒(`JmsEvent`):** 接收并开始反序列化 - **第三棒(`SerializableEventListener`):** 自动被触发,并调用下一步 - **第四棒(反射调用):** 恶意代码被执行,如 `Runtime.exec("your_command")` 这个过程巧妙地绕过了黑名单,因为被直接反序列化的 `JmsEvent` 类本身是 WebLogic 内部的合法组件,并不在黑名单上 **3. BECL 利用链的使用条件** 要成功利用 BECL 攻击链,必须满足以下几个关键条件: 1. **存在反序列化漏洞:** 这是所有反序列化漏洞利用的前提。目标服务器必须存在一个可被攻击者控制的、未经验证的反序列化入口点。例如,`t3`、`IIOP` 等协议都是常见的反序列化入口点 2. **目标为 WebLogic Server:** BECL 利用链的 Gadget Chain 是**WebLogic 独有的**。因为它依赖于 `com.bea.core.event` 这个特定于 WebLogic 的类库。因此,这个利用链不适用于 JBoss、Tomcat 或其他应用服务器 3. **未修补的 WebLogic 版本:** 漏洞利用链通常依赖于特定版本的软件。BECL 链主要影响**较早版本**的 WebLogic Server,特别是那些已经部署了黑名单,但仍未修复此漏洞的版本 4. **可被利用的 JRE 类库:** 尽管 BECL 的核心 Gadget 在 WebLogic 中,但它通常还需要依赖 Java 环境中的其他类,比如 `java.lang.reflect` 等,来完成反射调用