记一次小程序简单又坎坷的key泄露复现
字数 1211 2025-08-20 18:17:07
小程序Key泄露漏洞分析与复现教学文档
1. 漏洞背景
某单位小程序存在请求加密被解密替换参数的问题,攻击者能够伪造请求并成功替换关键参数发送给服务端。该漏洞的核心在于敏感密钥(sessionkey)的泄露。
2. 加密流程分析
2.1 微信用户敏感数据加密必要条件
sessionkey:会话密钥appID:小程序应用IDiv:初始化向量
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虽然公开但每次请求应不同,增加安全性
- 时间戳在请求中用于防重放攻击,需要正确处理