讲讲 IIOP 和 T3 反序列化原理

1. IIOP (Internet Inter-Orb Protocol) 原理

IIOPOMG 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 Collectionsysoserial 生成的 Payload)
  • 远程代码执行(RCE):当服务器反序列化这个恶意对象时,就会触发 Gadget Chain,最终执行系统命令,从而实现 RCE

2. T3 反序列化原理

T3Oracle WebLogic Server 独有的一个网络协议。它是 WebLogic 专用的、基于 TCP/IP 的二进制协议,用于 WebLogic 服务器、客户端、集群之间的通信。T3 协议在 WebLogic 的 RMI 实现中被广泛使用,其设计目标是为了优化性能和集群通信

T3 工作原理

T3 协议的本质是在 Java 序列化之上,增加了自己的消息头和协议规范。它定义了一系列消息类型,如HELLOCLUSTERAUTHENTICATE 等。每个消息体都是一个 Java 序列化对象

  • T3 消息头:T3 协议有自己的消息头,包含版本信息、长度等
  • Java 序列化对象:消息头之后是 Java 序列化的对象数据

T3 反序列化漏洞原理

T3 反序列化漏洞是 WebLogic RCE 漏洞的经典类型,其原理与 IIOP 类似,但更具针对性

  • 漏洞触发点:攻击者发现 WebLogic T3 协议在处理某些特定消息时,没有对传入的 Java 序列化对象进行严格的验证和过滤。特别是当客户端发起一个合法的 T3 请求(如 HELLO 消息)后,服务端会接受一个后续的序列化对象
  • 攻击链:攻击者可以向 WebLogic 的 T3 端口(通常是 7001)发送一个恶意的 T3 消息。这个消息体中,包含一个精心构造的序列化对象(如 ysoserial 生成的 Payload)
  • 远程代码执行(RCE):当 WebLogic 服务器反序列化这个对象时,就会触发恶意代码,例如利用 CommonsCollectionsSpring 或其他依赖库中的 Gadget Chain,从而在服务器上执行命令
对比项 IIOP 反序列化 T3 反序列化
协议类型 标准协议(CORBA 规范) WebLogic 专用协议
触发端口 通常是 WebLogic 的 IIOP 端口(如 7002) WebLogic 的 T3 端口(如 7001)
漏洞本质 Java 反序列化 Java 反序列化
利用方式 构造恶意的 IIOP 请求,包含序列化 Payload 构造恶意的 T3 消息,包含序列化 Payload
影响范围 所有使用 IIOP 的应用服务器 主要是 Oracle WebLogic Server
Copyright © 版权信息 all right reserved,powered by Gitbook该文件修订时间: 2025-09-25 03:12:55

results matching ""

    No results matching ""