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

50 lines
4.1 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.
### 讲讲 IIOP 和 T3 反序列化原理
**1. IIOP (Internet Inter-Orb Protocol) 原理**
**IIOP****OMG CORBA**Common Object Request Broker Architecture)规范的一部分,用于在不同平台、不同编程语言之间实现分布式对象的通信。Java 的 RMI-IIOP 是一个实现,它允许 RMI 对象通过 IIOP 协议进行通信。
**IIOP 工作原理**
IIOP 的核心是一个**通用的远程过程调用(RPC)**协议,它的目标是让远程对象调用看起来像本地调用一样简单
1. **对象序列化**:当客户端调用远程对象的方法时,方法名和参数会被序列化成二进制数据
2. **网络传输**:这些数据通过 TCP/IP 传输到服务器
3. **对象反序列化**:服务器接收到数据后,会将其反序列化成 Java 对象,并在远程对象上执行相应的方法
这个过程依赖于**通用互操作性**。IIOP 协议本身不限制传输的数据类型,任何实现了 `java.io.Serializable` 接口的对象都可以通过 IIOP 传输
**IIOP 反序列化漏洞原理**
IIOP 反序列化漏洞的原理与**RMI 反序列化**非常相似,因为它也基于 Java 的序列化机制
- **漏洞触发点**IIOP 服务器(如 WebLogic)在处理客户端发送的请求时,会**自动对请求体中的对象进行反序列化**
- **攻击链**:攻击者可以构造一个恶意的 IIOP 请求,其请求体中包含一个恶意的序列化对象,这个对象中嵌入了 Gadget Chain(如 `Apache Commons Collections``ysoserial` 生成的 Payload
- **远程代码执行(RCE)**:当服务器反序列化这个恶意对象时,就会触发 Gadget Chain,最终执行系统命令,从而实现 RCE
**2. T3 反序列化原理**
**T3****Oracle WebLogic Server** 独有的一个网络协议。它是 WebLogic 专用的、基于 TCP/IP 的二进制协议,用于 WebLogic 服务器、客户端、集群之间的通信。T3 协议在 WebLogic 的 RMI 实现中被广泛使用,其设计目标是为了优化性能和集群通信
**T3 工作原理**
T3 协议的本质是**在 Java 序列化之上,增加了自己的消息头和协议规范**。它定义了一系列消息类型,如`HELLO``CLUSTER``AUTHENTICATE` 等。每个消息体都是一个 Java 序列化对象
- **T3 消息头**:T3 协议有自己的消息头,包含版本信息、长度等
- **Java 序列化对象**:消息头之后是 Java 序列化的对象数据
**T3 反序列化漏洞原理**
T3 反序列化漏洞是 WebLogic RCE 漏洞的经典类型,其原理与 IIOP 类似,但更具针对性
- **漏洞触发点**:攻击者发现 WebLogic T3 协议在处理某些特定消息时,**没有对传入的 Java 序列化对象进行严格的验证和过滤**。特别是当客户端发起一个合法的 T3 请求(如 `HELLO` 消息)后,服务端会接受一个后续的序列化对象
- **攻击链**:攻击者可以向 WebLogic 的 T3 端口(通常是 7001)发送一个恶意的 T3 消息。这个消息体中,包含一个精心构造的序列化对象(如 `ysoserial` 生成的 Payload
- **远程代码执行(RCE)**:当 WebLogic 服务器反序列化这个对象时,就会触发恶意代码,例如利用 `CommonsCollections``Spring` 或其他依赖库中的 Gadget Chain,从而在服务器上执行命令
| 对比项 | IIOP 反序列化 | T3 反序列化 |
| -------- | ---------------------------------------- | -------------------------------------- |
| 协议类型 | 标准协议(CORBA 规范) | WebLogic 专用协议 |
| 触发端口 | 通常是 WebLogic 的 IIOP 端口(如 7002 | WebLogic 的 T3 端口(如 7001 |
| 漏洞本质 | Java 反序列化 | Java 反序列化 |
| 利用方式 | 构造恶意的 IIOP 请求,包含序列化 Payload | 构造恶意的 T3 消息,包含序列化 Payload |
| 影响范围 | 所有使用 IIOP 的应用服务器 | 主要是 Oracle WebLogic Server |