【SRC】基础思路篇13:微信小程序安全测试完全指南
文章目录
⚠️本博文所涉安全渗透测试技术、方法及案例,仅用于网络安全技术研究与合规性交流,旨在提升读者的安全防护意识与技术能力。任何个人或组织在使用相关内容前,必须获得目标网络 / 系统所有者的明确且书面授权,严禁用于未经授权的网络探测、漏洞利用、数据获取等非法行为。
前言
在SRC漏洞挖掘中,微信小程序正逐渐成为不可忽视的重要攻击面。由于小程序的封闭运行环境和微信生态的便捷登录特性,许多开发者在安全设计上容易产生认知偏差——认为"小程序环境安全,无需严格校验"。这种认知导致了大量逻辑漏洞、越权漏洞和身份认证漏洞的存在。本文将系统性地介绍微信小程序的安全测试方法论,帮助读者建立完整的小程序渗透测试思维体系。
一、小程序安全测试概述
1. 小程序 vs Web 安全测试的差异
核心区别:
| 对比项 | Web应用 | 微信小程序 |
|---|---|---|
| 运行环境 | 浏览器 | 微信内置WebView + JSBridge |
| 登录方式 | 账号密码/第三方OAuth | 微信一键登录/手机号快捷登录 |
| 代码获取 | 直接查看前端源码 | 需要反编译获取 |
| 抓包难度 | 相对简单 | 需要配置代理穿透 |
| XSS/CSRF | 常见攻击面 | 非嵌套网页时基本不存在 |
| 加密逻辑 | 可选前端加密 | 常强制前端加密 |
重要认知:小程序不是"更安全的Web应用"。如果不嵌套外部网页,确实不存在传统意义上的XSS和CSRF漏洞,但逻辑漏洞、越权漏洞、身份认证漏洞的发生率并不比Web应用低,甚至在某些场景下更高。
2. 小程序作为渗透入口的价值
为什么重视小程序:
- 小程序是独立的攻击面,与Web端的安全措施可能不一致
- 小程序后端API往往与Web端共用,但权限校验可能不同
- 小程序的前端加密逻辑更容易暴露密钥
- 低权限身份(如访客、临时用户)在小程序中往往防护更弱
- 很多厂商对小程序的安全重视程度低于Web端
核心原则:小程序是重要的渗透入口,不要忽视其安全测试价值。
二、信息收集:小程序测试的第一步
1. 抓包环境配置
Proxifier + BurpSuite
原理:小程序的网络请求不走系统代理,需要通过Proxifier将微信进程的流量强制转发到BurpSuite。
配置步骤:
- Proxifier中添加代理服务器(BurpSuite监听的IP和端口)
- 创建代理规则,将WeChat.exe的流量指向代理服务器
- 在BurpSuite中安装微信内置证书(可能需要通过小程序触发HTTPS请求后导入)
Reqable + BurpSuite
特点:Reqable是更现代的抓包工具,对小程序的支持更友好,配置相对简单。
注意事项
- 小程序首次加载时可能校验证书,需要安装系统级信任证书
- 部分小程序使用SSL Pinning,需要配合Frida等Hook工具绕过
- iOS和Android的小程序抓包难度不同,Android相对更容易
2. 小程序反编译
反编译工具链
常用工具:
- wedecode:功能完善的小程序反编译工具
- fine:支持多种小程序格式的反编译
- wxapkg:专注于小程序包解析
- UnpackMiniApp:配合PC端微信提取小程序包
PC端小程序包获取:
- PC端微信打开小程序后,本地会生成小程序包文件
- 不同页面可能对应不同的包,需要逐个提取
- 包文件路径通常在微信安装目录下的特定文件夹中
反编译后的信息提取
重点关注内容:
- API接口路径:搜索
type:"POST"、url:、path:等关键字,提取所有后端接口 - 加密算法:搜索
AES、encrypt、decrypt、key、iv、3DES等关键词 - 硬编码密钥:密钥和IV常直接写在前端代码中
- 隐藏页面路由:前端Bundle中常打包所有页面路由,包括未开放的隐藏页面
- 环境配置:开发/测试/生产环境的API基址、AppID等配置信息
3. 框架识别
为什么要识别框架:
- 不同框架有标准的接口路径和已知漏洞模式
- 可以快速定位有效API,提高测试效率
常见框架特征:
- 若依框架:
/getInfo、/getRouters、/system/user/list - JeecgBoot:
/jeecg-boot/前缀 - 自研框架:通过URL结构和响应格式判断
识别方法:
- 从抓包中的API路径特征判断
- 从响应数据的字段结构判断
- 从静态资源URL判断
三、登录认证测试
1. 手机号快捷登录
场景描述:小程序通过微信提供的getPhoneNumber接口获取用户手机号,实现一键登录。
核心风险:如果后端仅依赖手机号做身份认证,未校验请求信息的完整性,可能导致任意用户登录。
测试思路
方法一:修改请求体中的加密数据
前提条件:小程序登录流程中,前端获取加密数据后发送给后端解密。如果拦截并修改加密数据中的用户标识,后端可能直接使用修改后的值。
测试步骤:
- 正常登录流程中抓包,获取登录请求中的加密数据
- 拦截请求,不立即放行
- 分析加密数据结构,找到用户标识字段(如手机号、openId)
- 修改用户标识为目标用户
- 重新发送请求,观察是否以目标用户身份登录
关键观察:登录后需要查看其他功能是否同步显示目标用户的数据,确认是否真正接管了目标账号。
方法二:修改响应体中的身份字段
测试步骤:
- 使用自己账号正常登录
- 拦截登录响应包
- 修改响应中的身份字段(如
phoneNumber、purePhoneNumber、userId) - 放行修改后的响应包
- 观察小程序后续请求是否使用修改后的身份标识
核心原理:如果服务端在登录后仅以客户端传入的身份标识为准,不校验Token与身份的绑定关系,则可通过篡改响应包实现身份伪造。
加密数据解密测试
核心原则:当发现HTTP响应中包含加密敏感数据时,直接逆向前端代码。
判断方法:
- 确定是"后端控制返回"还是"前端控制解密"
- 如果前端判断权限后解密,则后端已经返回了全部数据
逆向步骤:
- 抓包确认加密数据的存在
- 反编译小程序获取源码
- 搜索加密关键词(AES/encrypt/decrypt/key/iv/3DES)
- 定位密钥和算法参数
- 编写解密脚本验证
常见缺陷:密钥直接硬编码在客户端代码中,可通过反编译直接获取。
2. 弱口令探测
测试思路:
- 不要被前端输入限制迷惑(如仅限手机号输入),后端可能未做格式校验
- 尝试非预期输入:在手机号登录框尝试
admin等常见用户名 - 登录成功后,对URL路径中的数字型参数进行遍历测试
- 弱口令(如
123456)配合参数篡改,可能直接获取高权限身份
3. 忘记密码功能
核心思路:不要只盯着登录口,找回密码/重置密码功能往往漏洞更多。
测试重点:
- 是否需要短信/邮箱验证
- 验证逻辑是否可以跳过
- 重置后的新密码是否可以预测
- 重置接口是否存在参数篡改空间
四、逆向分析技术
1. WMPFDebugger 调试
核心功能:强制开启小程序的F12调试能力,突破微信对开发者工具的封锁。
使用方法:
- 使用WMPFDebugger工具注入微信进程
- 在小程序中打开目标页面
- 按F12呼出开发者工具
- 在敏感函数(如
getPhoneNumber、login、encryptData)附近设置断点 - 触发对应操作时,断点处可获取加密参数、密钥等敏感信息
适用场景:
- 需要获取前端加密参数的明文值
- 需要分析前端加密/解密流程
- 需要定位密钥的生成逻辑
2. 加密接口逆向与自动化
场景描述:小程序中的查询接口使用前端加密传输,无法直接篡改参数。
测试思路:
步骤1:识别加密传输
- 抓包发现请求体或响应体是加密数据(如Base64字符串、十六进制字符串)
- 发现数据加密传输时,推断可能存在未授权访问(因为开发者认为"加密了就是安全的")
步骤2:逆向获取加密逻辑
- 反编译小程序源码
- 全局搜索加密关键词(
encrypt、decrypt、key、iv) - 定位加密算法和密钥
步骤3:植入自动化工具
- 将逆向获取的加密逻辑提取出来
- 植入Yakit热加载、BurpSuite插件或自定义脚本
- 实现自动加密/解密,进行批量测试
步骤4:批量爆破
- 重点关注手机号查询类接口,此类接口常缺乏鉴权
- 使用自动化工具对加密接口进行批量参数测试
3. VIP/付费限制绕过
核心原则:HTTP响应中看到加密的敏感数据,直接逆向前端代码。
判断逻辑:
- 分析业务限制逻辑,判断是"后端控制返回"还是"前端控制解密"
- 如果后端已返回完整加密数据,前端仅做权限判断后解密
- 反编译获取解密算法和密钥
- 直接解密响应包中的加密数据,绕过前端权限限制
常见场景:
- VIP视频/音频内容加密传输
- 付费文档/资料的加密响应
- 会员专属功能的加密数据
五、越权测试
1. ID参数遍历
测试思路:
- 从正常业务流程的返回数据包中提取记录ID
- 修改ID参数进行越权查询测试
- 验证服务端是否校验资源归属
常见可遍历参数:
userid、uid、idorderid、order_idarticleid、postid
注意:如果参数需要猜测,危害较小,部分平台不收录。有规律的参数(如自增ID)才具有高价值。
2. 水平越权
测试方法:
- 登录成功后,对URL路径中的数字型参数进行遍历
- 修改参数值尝试访问其他用户的数据
- 使用低权限身份跑一遍所有接口,发现未授权访问
3. 短参数爆破
场景描述:小程序中存在短位参数(如邀请码、房间号)。
优化策略:
- 分析参数位数和字符集
- 采用"固定部分位数 + 爆破剩余位"的策略
- 结合业务特征缩小范围
六、凭证泄漏与利用
1. AppID 与 AppSecret 泄漏
泄漏场景:
- 小程序前端代码中硬编码
- 配置文件泄漏
- 反编译后的源码中暴露
危害:
- 调用微信公众号/小程序官方接口
- 生成访问Token
- 调用公众号接口获取敏感信息
2. AccessToken 泄漏
获取途径:
- 接口响应中直接返回
- 前端代码中硬编码
- 日志/调试信息中暴露
利用方式:直接调用小程序/公众号的API接口。
3. OpenID 泄漏
风险点:
- 某些接口登录后,通过OpenID进行鉴权
- 同个公司下的不同小程序/公众号可能共用OpenID
- 泄漏OpenID后可在同公司的其他应用中伪造身份
4. SessionKey 与 IV 泄漏
核心风险:SessionKey和IV是解密前端加密数据的关键参数。如果泄漏,攻击者可以解密用户敏感信息(如手机号、地址)。
泄漏场景:
- 接口响应中直接返回
- 前端代码中硬编码
- 日志信息中暴露
利用方式:
- 使用解密工具(如wx_sessionkey_decrypt)解密加密数据
- 修改解密后的用户数据,重新加密发送给服务端
七、前端源码中的信息收集
1. API路径提取
核心方法:SPA/小程序前端Bundle中常打包所有API路径,是天然的"信息收集突破口"。
搜索关键词:
type:"POST"、type:"GET"post("、get("url:、url:"、url:'path:、path:"action?
2. 隐藏功能发现
测试方法:
- 分析前端源码中的条件渲染逻辑(如
ng-if="role != 'admin'") - 发现隐藏的界面或功能
- 直接调用对应的后端接口,绕过前端限制
3. 环境配置信息
常见泄漏:
- 开发/测试/生产环境的API基址
- 第三方服务的配置信息
- 调试模式的开关配置
八、工具链
1. 抓包工具
- Proxifier:强制转发微信进程流量到代理
- Reqable:现代化抓包工具,对小程序支持友好
- BurpSuite:核心抓包和重放工具
2. 反编译工具
- wedecode:https://github.com/biggerstar/wedecode
- fine:https://github.com/fasnow/fine
- wxapkg:https://github.com/wux1an/wxapkg
- UnpackMiniApp:配合PC端微信提取小程序包
3. 调试工具
- WMPFDebugger:强制开启小程序F12调试
- 微信开发者工具:官方调试工具
- 微信官方调试平台:http://mp.weixin.qq.com/debug/
4. 解密工具
- wx_sessionkey_decrypt:https://github.com/mrknow001/wx_sessionkey_decrypt
- API-Explorer:https://github.com/mrknow001/API-Explorer
5. 综合工具
- TscanPlus:内置小程序反编译工具
九、实战心得
1. 小程序是重要的独立攻击面
不要只测试Web端就结束。小程序后端API往往与Web端共用,但安全校验可能完全不同。很多厂商对小程序的安全重视程度低于Web端,正是突破口。
2. 加密不等于安全
前端加密(AES、3DES等)只是保护传输,不验证身份。如果密钥硬编码在前端代码中,加密形同虚设。核心原则:看到加密数据,直接逆向。
3. 手机号验证 ≠ 安全登录
仅通过手机号验证身份是常见的设计缺陷。如果服务端仅校验手机号而不校验请求来源的合法性,攻击者可通过信息泄露获取他人手机号后实现账号接管。
4. 前端限制不可信
前端输入框的限制(如只能输入手机号)、按钮的禁用状态,都不是安全防线。后端必须独立验证所有输入。
5. 双开测试提高效率
同时启动两个微信进程(start WeChat.exe两次),一个登录普通账号,一个登录目标账号,方便进行越权对比测试。
6. 从信息泄露到身份伪造
信息泄露和身份伪造是小程序测试中常见的组合。从非登录功能(如审批领导查询、用户列表)中获取敏感信息,再用于登录接口的身份伪造,是高效的攻击链。
7. 框架知识加速挖掘
熟悉若依、JeecgBoot等常见框架的默认接口路径和行为模式,可快速定位有效API,提高测试效率。
十、结语
微信小程序的安全测试是一个兼具技术深度和业务理解要求的领域。从抓包配置到反编译分析,从登录认证到越权测试,从加密逆向到凭证利用,每一个环节都需要系统化的方法论支撑。本文从小程序与Web测试的差异出发,系统性地介绍了信息收集、登录认证、逆向分析、越权测试和凭证利用的完整方法论,希望能帮助读者建立系统化的小程序渗透测试思维体系。
核心要点回顾
1. 信息收集是基础:
- 抓包环境配置(Proxifier/Reqable + BurpSuite)
- 反编译提取API路径和加密密钥
- 框架识别加速测试
2. 登录认证是突破口:
- 手机号快捷登录的请求体/响应体篡改
- 加密数据的逆向解密
- 忘记密码功能的深度测试
3. 逆向分析是利器:
- WMPFDebugger强制开启调试
- 加密接口的逆向与自动化
- VIP限制的绕过
4. 越权测试要全面:
- ID参数遍历
- 低权限身份跑全量接口
- 短参数爆破优化
5. 凭证泄漏要重视:
- AppID/AppSecret、AccessToken、OpenID、SessionKey的提取与利用
防御建议
对于防守方来说,小程序的安全防护需要注意:
- 服务端独立校验:所有身份认证逻辑在后端完成,不依赖前端传入的身份标识
- 加密密钥管理:密钥不硬编码在客户端,使用服务端密钥管理
- 接口权限校验:每个API接口都校验用户权限和资源归属
- 敏感信息脱敏:响应中不返回敏感凭证信息
- 输入严格校验:后端对所有输入参数进行格式、类型、范围校验
- 反编译防护:使用代码混淆工具增加反编译难度
更多推荐



所有评论(0)