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