### 讲讲 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          |