Files
Sec-Interview/Chapter14/14-3.md
T
2025-09-25 03:55:13 +08:00

32 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### 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` 等,来完成反射调用