跨小程序请求伪造攻击
理解CMRF漏洞原理,构建自动化分析工具和恶意小程序POC
实验目标
- 理解并掌握跨小程序请求伪造(CMRF)的漏洞原理与攻击方式;
- 熟悉 JS 代码静态分析,构建自动化分析工具,检测小程序中的 CMRF 漏洞;
- 构建恶意小程序 POC,详细介绍攻击思路,理解 CMRF 攻击的危害。
前置准备
1. 理论知识学习
在进行本实验前,请先完成教材第 10 章的学习,特别是 10.1 节的小程序安全部分。
2. TaintMini
TaintMini 是一个通过静态污点分析来检测小程序中敏感数据流的框架,采用新颖的通用数据流图方法,可以捕获小程序内部和小程序之间的数据流。TaintMini 基于 pdg_js 实现,通过静态分析,TaintMini 可以有效地识别和追踪小程序中潜在的敏感数据路径,从而帮助开发者发现和修复安全漏洞。
3. 实验环境
- 小程序开发与审计环境:微信开发者工具
- Javascript 执行环境:node 和 pdg_js
任务描述
本试验提供了一个小程序源码,其中包括两个页面。在实验过程中,需要审计源码分析漏洞,并基于 TaintMini 或者自实现的 AST 分析来自动化检测 CMRF 漏洞,并在此基础上构造攻击代码实现对漏洞的利用。
具体而言,本实验分为三个任务:
- 基于教材第十章对小程序安全的介绍,使用微信开发者工具或者 VSCODE,通过代码审计定位 CMRF 漏洞存在的位置
- 利用小程序静态污点分析框架 TaintMini 或自定义分析逻辑,实现对小程序数据流追踪、条件约束提取以及漏洞的判定
- 构建恶意的小程序 POC,详细说明 CMRF 漏洞的利用思路即可。有能力的同学可以在测试环境尝试,但是严禁对真实小程序进行攻击
任务1 CMRF 漏洞分析
1. 任务说明
本次实验提供的目标小程序分别在两个小程序页面提供跨小程序请求功能,读者需要通过代码审计定位存在漏洞页面功能,分析漏洞存在原因。分析方法例如:
- 使用微信开发者工具或者 VSCODE,通过代码审计定位存在 CMRF 漏洞的页面和功能。
- 分析漏洞的存在原因,记录每个漏洞点的详细信息,包括触发路径、相关代码片段等。
任务2 静态分析工具开发
1. 任务说明
目标小程序由 3 个主要的 js 代码构成(app.js、index.js 和 logs.js),需要开发一个静态分析工具来检测 CMRF 漏洞。
- 熟悉小程序静态污点分析框架 TaintMini 或自定义分析逻辑,实现对跨小程序数据流的追踪。
- 提取数据流路径上的条件约束,判断是否缺失来源校验(appid 校验),以自动检测潜在的 CMRF 漏洞。
任务3 恶意小程序 POC 构建
1. 任务说明
本次实验仅提供存在漏洞小程序的代码,因此本任务的核心是构建恶意小程序,编写 Payload 对存在漏洞的小程序进行工具,这一任务的目的是提高漏洞利用的实战经验以及加深对 CMRF 漏洞的理解,这一任务包括 3 步:
- 根据任务1分析的小程序漏洞点,构造请求唤起受害小程序
- 在漏洞小程序上进行交互,使漏洞小程序携带敏感数据跳转回恶意小程序
- 恶意小程序在生命周期中获取传递的数据,并在 UI 界面显示攻击结果
结果提交形式
- lab9_code.zip:本次实验中的实验代码,包括 CMRF 静态分析工具代码和恶意小程序 POC 代码
- lab9.docx:本次实验的实验报告,包括对存在 CMRF 漏洞的小程序的原理分析、恶意小程序的运行逻辑和攻击流程说明、实验环境配置、实验步骤、实验结果和实验心得等
评分标准
1. 完成任务1(25%)
能够分析出存在漏洞的小程序代码位置,说明漏洞的细节
2. 完成任务2(25%)
开发小程序静态分析工具,实现 CMRF 漏洞的检测
3. 完成任务3(20%)
在任务1和2的基础上,构造恶意小程序实现 CMRF 攻击
4. 实验报告(30%)
内容完整性和原创性(20%)
- 报告包含实验目的、详细步骤、结果、总结思考等关键部分
- 代码设计遵循代码规范,有必要的解释说明
报告撰写和表达(10%)
- 报告格式规范,语言表达清晰
- 能够适当使用图表等辅助说明报告内容
实验资源
victim
存在 CMRF 漏洞的小程序源代码