讲讲 IIOP 和 T3 反序列化原理
1. IIOP (Internet Inter-Orb Protocol) 原理
IIOP 是 OMG CORBA(Common Object Request Broker Architecture)规范的一部分,用于在不同平台、不同编程语言之间实现分布式对象的通信。Java 的 RMI-IIOP 是一个实现,它允许 RMI 对象通过 IIOP 协议进行通信。
IIOP 工作原理
IIOP 的核心是一个通用的远程过程调用(RPC)协议,它的目标是让远程对象调用看起来像本地调用一样简单
- 对象序列化:当客户端调用远程对象的方法时,方法名和参数会被序列化成二进制数据
- 网络传输:这些数据通过 TCP/IP 传输到服务器
- 对象反序列化:服务器接收到数据后,会将其反序列化成 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 |