CISCN2025 分区赛 awdp - web timecapsule
字数 1558 2025-08-29 08:30:06

CISCN2025 分区赛 Web题 timecapsule 详细解析与教学文档

题目概述

这是一个来自CISCN2025分区赛的AWDP Web题目,主要涉及Java反序列化漏洞和密码学知识的结合利用。题目名称为"timecapsule",核心漏洞点在于不安全的反序列化操作,但需要通过密码学相关知识来绕过加密限制。

漏洞分析

1. 不安全的反序列化

题目中存在一个明显的Java反序列化漏洞,但有以下限制条件:

  1. 类名过滤:只允许java.*包或题目自身实现的一系列类
  2. 允许数组类型([B是数组的类名描述符)

2. 可利用的类分析

题目中实现了FieldGetterHandler类,其invoke方法实现了一个public属性的getter/is方法调用。这提示我们可以利用动态代理类来调用对应handler的invoke方法。

3. 攻击路线

  1. 通过动态代理类调用FieldGetterHandlerinvoke方法
  2. 实现任意getter调用
  3. 绕过黑名单考虑二次反序列化调用getObject
  4. 题目依赖提供了多个sink点,包括:
    • H2数据库的JDBC RCE
    • 由于项目使用JDK8,可以直接利用TemplateImpl进行攻击

密码学部分分析

1. 加密机制

题目要求反序列化的内容必须经过AES解密,但我们无法直接获取解密密钥。需要分析加密流程:

  1. 加密和解密都采用CTR模式
  2. 解密时使用密文的前16字节作为IV进行解密
  3. 加密时将IV放在密文的最前面

2. CTR模式原理回顾

CTR (Counter)模式的工作原理:

  1. 将IV与计数器结合生成密钥流
  2. 密钥流与明文进行异或操作得到密文
  3. 每一轮计算只涉及明文、密文和对应的密钥流
  4. 在IV可控的情况下,相同的IV会生成相同的密钥流

3. 攻击思路

  1. 我们可以获取到capsule类实例反序列化后AES加密的内容
  2. 这些实例的反序列化原文可以被我们操控
  3. 利用CTR模式的特性:
    • 已知明文和密文可以计算出密钥流
    • 使用相同的IV可以复现相同的密钥流
    • 从而构造任意的密文来触发反序列化

漏洞利用步骤

1. 构造恶意序列化对象

  1. 选择一个合适的gadget chain(如TemplateImpl
  2. 构造恶意序列化数据

2. 加密流程利用

  1. 获取正常的加密数据(enc_data)和解密数据(dec_data
  2. 计算密钥流:
    • 密钥流 = 明文 XOR 密文
  3. 构造新的恶意payload:
    • 使用相同的IV
    • 计算新密文 = 恶意序列化数据 XOR 密钥流
  4. 确保content足够长以覆盖整个payload

3. 注意事项

  1. 内容长度必须足够,否则获取的密钥流无法加密过长的payload
  2. 需要精确控制IV和加密块的位置
  3. 可能需要多次尝试调整payload长度

完整利用流程

  1. 信息收集

    • 获取正常的加密/解密数据对
    • 分析可用的类和过滤规则
  2. 密钥流计算

    # 伪代码
    known_plaintext = dec_data
    known_ciphertext = enc_data[16:]  # 去掉IV部分
    keystream = xor(known_plaintext, known_ciphertext)
    
  3. 构造恶意payload

    • 生成恶意序列化对象
    • 确保长度与keystream匹配(必要时填充)
  4. 生成攻击密文

    malicious_ciphertext = xor(malicious_serialized_data, keystream)
    final_payload = original_iv + malicious_ciphertext
    
  5. 发送payload触发漏洞

防御建议

  1. 反序列化防御

    • 使用白名单限制可反序列化的类
    • 使用安全的反序列化工具如SerialKiller
  2. 加密改进

    • 使用认证加密模式如GCM
    • 不要将IV与密文简单拼接
    • 使用密钥派生函数生成加密密钥
  3. 其他

    • 及时更新依赖库
    • 最小化暴露的攻击面

总结

这道题目结合了Java反序列化和密码学知识,考察了以下关键点:

  1. Java反序列化gadget chain的构造
  2. 动态代理类的利用
  3. CTR加密模式的特性和攻击方法
  4. 已知明文攻击的应用

通过分析加密流程和利用CTR模式的可预测性,我们能够绕过加密限制,最终触发反序列化漏洞实现RCE。

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长度 完整利用流程 信息收集 : 获取正常的加密/解密数据对 分析可用的类和过滤规则 密钥流计算 : 构造恶意payload : 生成恶意序列化对象 确保长度与keystream匹配(必要时填充) 生成攻击密文 : 发送payload触发漏洞 防御建议 反序列化防御 : 使用白名单限制可反序列化的类 使用安全的反序列化工具如SerialKiller 加密改进 : 使用认证加密模式如GCM 不要将IV与密文简单拼接 使用密钥派生函数生成加密密钥 其他 : 及时更新依赖库 最小化暴露的攻击面 总结 这道题目结合了Java反序列化和密码学知识,考察了以下关键点: Java反序列化gadget chain的构造 动态代理类的利用 CTR加密模式的特性和攻击方法 已知明文攻击的应用 通过分析加密流程和利用CTR模式的可预测性,我们能够绕过加密限制,最终触发反序列化漏洞实现RCE。