CISCN2025 分区赛 awdp - web timecapsule
字数 1558 2025-08-29 08:30:06
CISCN2025 分区赛 Web题 timecapsule 详细解析与教学文档
题目概述
这是一个来自CISCN2025分区赛的AWDP Web题目,主要涉及Java反序列化漏洞和密码学知识的结合利用。题目名称为"timecapsule",核心漏洞点在于不安全的反序列化操作,但需要通过密码学相关知识来绕过加密限制。
漏洞分析
1. 不安全的反序列化
题目中存在一个明显的Java反序列化漏洞,但有以下限制条件:
- 类名过滤:只允许
java.*包或题目自身实现的一系列类 - 允许数组类型(
[B是数组的类名描述符)
2. 可利用的类分析
题目中实现了FieldGetterHandler类,其invoke方法实现了一个public属性的getter/is方法调用。这提示我们可以利用动态代理类来调用对应handler的invoke方法。
3. 攻击路线
- 通过动态代理类调用
FieldGetterHandler的invoke方法 - 实现任意getter调用
- 绕过黑名单考虑二次反序列化调用
getObject - 题目依赖提供了多个sink点,包括:
- H2数据库的JDBC RCE
- 由于项目使用JDK8,可以直接利用
TemplateImpl进行攻击
密码学部分分析
1. 加密机制
题目要求反序列化的内容必须经过AES解密,但我们无法直接获取解密密钥。需要分析加密流程:
- 加密和解密都采用CTR模式
- 解密时使用密文的前16字节作为IV进行解密
- 加密时将IV放在密文的最前面
2. CTR模式原理回顾
CTR (Counter)模式的工作原理:
- 将IV与计数器结合生成密钥流
- 密钥流与明文进行异或操作得到密文
- 每一轮计算只涉及明文、密文和对应的密钥流
- 在IV可控的情况下,相同的IV会生成相同的密钥流
3. 攻击思路
- 我们可以获取到
capsule类实例反序列化后AES加密的内容 - 这些实例的反序列化原文可以被我们操控
- 利用CTR模式的特性:
- 已知明文和密文可以计算出密钥流
- 使用相同的IV可以复现相同的密钥流
- 从而构造任意的密文来触发反序列化
漏洞利用步骤
1. 构造恶意序列化对象
- 选择一个合适的gadget chain(如
TemplateImpl) - 构造恶意序列化数据
2. 加密流程利用
- 获取正常的加密数据(
enc_data)和解密数据(dec_data) - 计算密钥流:
- 密钥流 = 明文 XOR 密文
- 构造新的恶意payload:
- 使用相同的IV
- 计算新密文 = 恶意序列化数据 XOR 密钥流
- 确保
content足够长以覆盖整个payload
3. 注意事项
- 内容长度必须足够,否则获取的密钥流无法加密过长的payload
- 需要精确控制IV和加密块的位置
- 可能需要多次尝试调整payload长度
完整利用流程
-
信息收集:
- 获取正常的加密/解密数据对
- 分析可用的类和过滤规则
-
密钥流计算:
# 伪代码 known_plaintext = dec_data known_ciphertext = enc_data[16:] # 去掉IV部分 keystream = xor(known_plaintext, known_ciphertext) -
构造恶意payload:
- 生成恶意序列化对象
- 确保长度与keystream匹配(必要时填充)
-
生成攻击密文:
malicious_ciphertext = xor(malicious_serialized_data, keystream) final_payload = original_iv + malicious_ciphertext -
发送payload触发漏洞
防御建议
-
反序列化防御:
- 使用白名单限制可反序列化的类
- 使用安全的反序列化工具如SerialKiller
-
加密改进:
- 使用认证加密模式如GCM
- 不要将IV与密文简单拼接
- 使用密钥派生函数生成加密密钥
-
其他:
- 及时更新依赖库
- 最小化暴露的攻击面
总结
这道题目结合了Java反序列化和密码学知识,考察了以下关键点:
- Java反序列化gadget chain的构造
- 动态代理类的利用
- CTR加密模式的特性和攻击方法
- 已知明文攻击的应用
通过分析加密流程和利用CTR模式的可预测性,我们能够绕过加密限制,最终触发反序列化漏洞实现RCE。