微信小程序渗透测试
抓微信小程序的微信包,比抓网页的小程序渗包麻烦不少。网页直接开浏览器DevTools,透测小程序得先过一层代理。微信我习惯用Burp配合Proxifier,小程序渗把微信进程强制指向代理端口。透测但微信自带证书校验,微信不处理的小程序渗话全是TLS握手失败。解决办法是透测装个JustTrustMe之类的Xposed模块,或者用Frida脚本hook掉SSL Pinning。微信这一步卡住,小程序渗后面全是透测白搭。
拿到流量后,微信第一件事不是小程序渗急着测漏洞,而是透测梳理接口。小程序的前端代码是打包在wxapkg文件里的,解包工具现成的,比如wxappUnpacker。解出来看JS逻辑,找API路径、密钥、硬编码的token。很多开发者图省事,把云开发的访问密钥直接写在前端代码里——这等于把保险箱钥匙贴在保险箱外面。我见过一个电商类小程序,AccessKey直接明文躺在config.js里,拿着它就能调对象存储,里面全是用户身份证照片。
接口测什么?老几样:越权、SQL注入、逻辑绕过。但小程序的越权和网页端不太一样。网页端越权往往是改ID,小程序里经常是改openid或unionid。这两个字段是微信生态里的用户唯一标识,后端如果直接信任前端传过来的openid,那就能随意切换成任意用户。我测过一个预约挂号的小程序,把请求体里的openid换成别人的,返回的就是那个人的挂号记录,姓名、手机号、病情描述全暴露了。这种漏洞在微信小程序里特别普遍,因为很多后端开发默认小程序是“安全的”,微信帮他们做了身份认证,就不再校验了。
还有一类问题容易被忽略——云开发。微信云开发把数据库、存储、云函数都托管了,权限配置直接在控制台勾选。默认情况下,数据库的读写权限是“仅创建者可读写”,但很多人图省事改成“所有用户可读”。这就导致任意用户都能遍历集合里的所有记录。我碰到过一个社区类小程序,帖子集合的权限设成了全用户可读,但帖子内容里嵌着发布者的手机号。调一下API,不用登录,直接拉全量数据。
逻辑漏洞也别放过。小程序有分享、支付、签到这类业务场景,每个都是突破口。签到功能,如果后端没做时间戳校验,把系统时间改了就能无限签到领积分。支付功能更危险,很多小程序的支付回调没有验签,或者验签了但没校验金额。改一下支付金额参数,用一分钱买下原价几百块的商品,这种案例在众测平台上一抓一大把。还有一个常见毛病——并发问题。用脚本同时发多个请求,比如同时提交多个提现申请,后端没做幂等处理,就能把账户余额刷爆。
最后说点个人观察。微信小程序的渗透测试,难点不在技术,而在环境搭建和思路转换。很多人习惯网页端的测试流程,到了小程序就懵了,连包都抓不到。其实原理一样,只是多了层壳。另外,小程序的更新迭代特别快,今天测完的漏洞,明天可能就修复了,但也可能因为一次版本更新引入新问题。所以测试要趁早,最好在刚上线时介入。还有一点,别只盯着业务接口,小程序的本地存储、WebView组件、跳转外部链接的机制,都可能成为攻击面。WebView如果开了JavaScript桥接,就能通过DOM XSS直接调用原生能力,这比单纯XSS严重得多。
测试完记得清理环境。Frida脚本卸了,代理关了,微信缓存清了。不然下次打开小程序,卡得跟幻灯片似的,那是你自己的锅。说句实在话,微信小程序的整体安全水平比传统Web应用差一截,主要原因是开发者门槛低,很多人没受过安全培训就上手了。但换个角度看,这也意味着测试机会多,挖洞回报率高。别嫌麻烦,抓包那关过了,后面就是一片开阔地。
(责任编辑:热点)














