记一次小程序简单又坎坷的key泄露复现
字数 1211 2025-08-20 18:17:07

小程序Key泄露漏洞分析与复现教学文档

1. 漏洞背景

某单位小程序存在请求加密被解密替换参数的问题,攻击者能够伪造请求并成功替换关键参数发送给服务端。该漏洞的核心在于敏感密钥(sessionkey)的泄露。

2. 加密流程分析

2.1 微信用户敏感数据加密必要条件

  • sessionkey:会话密钥
  • appID:小程序应用ID
  • iv:初始化向量

2.2 正常加密流程

  1. 客户端向微信发起请求获取用户加密后的数据包和iv
  2. 客户端将获取到的加密数据包发送到服务端
  3. 服务端收到加密数据包后向微信请求获取该用户的sessionkey进行解密
  4. 解密后的数据存储于服务端

3. 漏洞发现过程

3.1 初步逆向分析

  • 尝试通过逆向小程序前端破解加密
  • 定位到加密数据包并进行调试
  • 遇到障碍:测试和个人账号无权限调用微信服务端接口

3.2 突破口发现

在服务端响应数据包中发现了sessionkey的泄露,这是关键突破点。

4. 关键漏洞点分析

4.1 可获取的参数

  • iv:可从数据包中轻易获取
  • appID:可从数据包中轻易获取
  • sessionkey:本应只能通过向微信请求获取(需要appsecret)

4.2 实际漏洞

服务端在验证成功后返回的数据包中包含了sessionkey,导致:

  1. 攻击者可以获取到sessionkey
  2. 使用AES加密,其他参数固定不变
  3. 只需替换时间戳即可实现加解密效果
  4. 最终实现请求伪造

5. 漏洞复现步骤

  1. 捕获数据包:使用抓包工具捕获小程序与服务端的通信
  2. 定位加密数据:找到包含加密用户数据的请求
  3. 获取必要参数
    • 从请求中提取iv
    • 从请求或小程序源码中获取appID
  4. 寻找sessionkey泄露
    • 检查服务端响应数据包
    • 查找包含sessionkey的响应
  5. 构造伪造请求
    • 使用获取的sessionkey、appID和iv
    • 修改需要伪造的参数
    • 更新时间戳
    • 重新加密数据
  6. 发送伪造请求:将构造的请求发送给服务端验证效果

6. 漏洞原理总结

根本问题:服务端响应中泄露了敏感密钥(sessionkey)

攻击影响:攻击者可解密用户数据、伪造请求、篡改关键参数

7. 修复方案

  1. 服务端限制:在服务端验证过后,严格限制返回数据,避免出现敏感信息
  2. 密钥管理
    • 确保sessionkey只在服务端使用,绝不返回给客户端
    • 加强appsecret的保护,确保不被泄露
  3. 数据校验:增加请求参数的完整性校验机制
  4. 时效控制:缩短sessionkey的有效期

8. 安全建议

  1. 遵循微信官方的小程序安全开发规范
  2. 定期进行安全审计,检查是否有敏感信息泄露
  3. 实施最小权限原则,只返回必要的数据
  4. 对关键操作增加二次验证机制

9. 技术要点备忘

  • 微信小程序加密使用AES算法
  • sessionkey是加解密的核心,必须严格保护
  • iv虽然公开但每次请求应不同,增加安全性
  • 时间戳在请求中用于防重放攻击,需要正确处理
小程序Key泄露漏洞分析与复现教学文档 1. 漏洞背景 某单位小程序存在请求加密被解密替换参数的问题,攻击者能够伪造请求并成功替换关键参数发送给服务端。该漏洞的核心在于敏感密钥(sessionkey)的泄露。 2. 加密流程分析 2.1 微信用户敏感数据加密必要条件 sessionkey :会话密钥 appID :小程序应用ID iv :初始化向量 2.2 正常加密流程 客户端向微信发起请求获取用户加密后的数据包和iv 客户端将获取到的加密数据包发送到服务端 服务端收到加密数据包后向微信请求获取该用户的sessionkey进行解密 解密后的数据存储于服务端 3. 漏洞发现过程 3.1 初步逆向分析 尝试通过逆向小程序前端破解加密 定位到加密数据包并进行调试 遇到障碍:测试和个人账号无权限调用微信服务端接口 3.2 突破口发现 在服务端响应数据包中发现了sessionkey的泄露,这是关键突破点。 4. 关键漏洞点分析 4.1 可获取的参数 iv :可从数据包中轻易获取 appID :可从数据包中轻易获取 sessionkey :本应只能通过向微信请求获取(需要appsecret) 4.2 实际漏洞 服务端在验证成功后返回的数据包中包含了sessionkey,导致: 攻击者可以获取到sessionkey 使用AES加密,其他参数固定不变 只需替换时间戳即可实现加解密效果 最终实现请求伪造 5. 漏洞复现步骤 捕获数据包 :使用抓包工具捕获小程序与服务端的通信 定位加密数据 :找到包含加密用户数据的请求 获取必要参数 : 从请求中提取iv 从请求或小程序源码中获取appID 寻找sessionkey泄露 : 检查服务端响应数据包 查找包含sessionkey的响应 构造伪造请求 : 使用获取的sessionkey、appID和iv 修改需要伪造的参数 更新时间戳 重新加密数据 发送伪造请求 :将构造的请求发送给服务端验证效果 6. 漏洞原理总结 根本问题 :服务端响应中泄露了敏感密钥(sessionkey) 攻击影响 :攻击者可解密用户数据、伪造请求、篡改关键参数 7. 修复方案 服务端限制 :在服务端验证过后,严格限制返回数据,避免出现敏感信息 密钥管理 : 确保sessionkey只在服务端使用,绝不返回给客户端 加强appsecret的保护,确保不被泄露 数据校验 :增加请求参数的完整性校验机制 时效控制 :缩短sessionkey的有效期 8. 安全建议 遵循微信官方的小程序安全开发规范 定期进行安全审计,检查是否有敏感信息泄露 实施最小权限原则,只返回必要的数据 对关键操作增加二次验证机制 9. 技术要点备忘 微信小程序加密使用AES算法 sessionkey是加解密的核心,必须严格保护 iv虽然公开但每次请求应不同,增加安全性 时间戳在请求中用于防重放攻击,需要正确处理