小程序渗透
新增攻击面:影子“小程序”
小程序渗透测试,以及关联通杀方案
本文档使用 MrDoc 发布
-
+
新增攻击面:影子“小程序”
> 声明:本文旨在秉持“分享至上”的原则,公开本人于今年六月发现的一个新型攻击面。特此说明:- 本文内容仅供技术交流与学习参考;- 所涉及工具均未开源,亦不提供下载或使用支持;- 任何因使用本文所述方法或思路而引发的法律后果,均由使用者自行承担;- 欢迎转载,但严禁任何形式的抄袭或篡改。 -- 牛马安全 >  ### 一、问题的起点:为什么有些小程序“搜不到”? 在对微信小程序进行安全测试时,我们常遇到一个现象:明明某企业有小程序,却无法通过微信搜索找到它。这并非小程序不存在,而是由于以下原因被“隐藏”: * 小程序尚在审核中; * 开发者关闭了“可被搜索”选项; * 内容涉及敏感领域,被平台限制收录; * 仅为内部员工或特定用户开放。 这类未公开、不可搜索但实际运行的小程序,我们称之为 “影子小程序”。 它们往往缺乏安全防护意识,可能暴露管理后台、调试接口甚至测试数据,成为高价值攻击入口。 那么,如何发现并触达这些“隐形”资产?  ### 二、第一步:从 ICP 备案入手,定位潜在小程序 尽管小程序运行在微信等封闭生态中,但其后端服务或关联官网几乎都需要完成 ICP 备案。 操作思路: 1. 通过工信部备案系统或第三方平台查询目标企业小程序备案信息; 1. 或者获取其名下所有已备案域名,进行资产收集,检查是否嵌入了小程序跳转功能如 <wx-open-launch-weapp>标签。 > 关键洞察:备案信息是连接“传统 Web 资产”与“小程序资产”的桥梁。   ### 三、关键突破:绕过搜索限制,直接跳转到目标小程序 微信官方提供了一个强大但常被忽视的 API: ``` wx.navigateToMiniProgram({ appId: '', path: 'page/index/index?id=123', extraData: { foo: 'bar' }, envVersion: 'develop', success(res) { // 打开成功 } }) ``` 核心能力: 只要知道目标小程序的 AppID,即使它未公开、不可搜索,也能从任意已上线的小程序中直接跳转访问。 这意味着:“搜不到” ≠ “不可达”。  ### 四、如何获取目标小程序的 AppID? AppID 是全局唯一的 18 位字符串(如 wx1234567890abcdef),一旦获得,即可实现定向跳转。常见泄露途径包括: #### 方法一:通过备案关联 + 第三方接口聚合查询 * 利用已公开的小程序备案数据库(部分第三方平台提供 API); * 输入企业名称,自动返回其名下关联的小程序 AppID 列表; * 我们已将此类接口本地化,支持一键批量查询。   #### 方法二:从微信公众号抓包提取 访问微信公众号平台,通过小程序管理功能点抓包,可从接口中获取到返回的 AppID    ### 五、没有自己的小程序?两种跳转替代方案 wx.navigateToMiniProgram 只能在小程序环境中调用。若你没有自有小程序,可采用以下变通方式: #### 方案 1:自建“跳板小程序” * 注册一个个人小程序(免费); * 在首页代码中写入跳转逻辑,传入目标 AppID; * 用于精准验证小程序是否存在及可访问性。  #### 方案 2:利用微信内置浏览器中转 * 构造一个网页,嵌入微信支持的 URL Scheme 或 Universal Link; * 通过短链(如 t.cn)在微信内打开该页面; * 页面自动唤起目标小程序。 > 技术本质:将微信内置浏览器作为“中转站”,绕过必须依赖自有小程序的限制。   ### 六、进阶测试:反编译 + 批量探测隐藏页面 通过上述方法,我们已成功跳转至目标“影子小程序”(即未公开、不可搜索但实际存在的小程序)。接下来,便可对其展开更深入的安全测试与攻击面挖掘。 #### 1. 反编译提取完整路由 * 使用团队自研工具对小程序包进行解包; * 还原 app-config.json 中声明的所有页面路径(如 /pages/admin/index、/pages/debug/tool); * 这些路径可能包含未在 UI 中暴露的高危页面。   #### 2. 自动化批量跳转验证 为避免人工逐页点击,我们采用半自动化方案: * 强制开启 PC 微信 F12 调试模式(需特定环境); * 在 Console 中注入脚本,循环调用 wx.navigateTo 遍历所有路由; * 同时配置 Proxifier + Burp Suite,将微信全部流量代理至 Burp。  ``` let a = ["/pages/wechat-fans/index","/pages/index/index"]; let index = 0; function navigateNext() { if (index >= a.length) return; wx.navigateTo({ url: a[index], success: () => { index++; setTimeout(navigateNext, 3000); // 下一次跳转延时 3s }, fail: () => { console.error("跳转失败"); } }); } // 启动 navigateNext(); ``` > 效果:所有页面加载触发的 API 请求、静态资源、鉴权校验等,均被捕获记录。 ### 七、高效识别接口:HaE 插件分析 面对大量 HTTP 流量,人工筛选效率低下。引入 HaE 插件: * 基于正则规则自动高亮并提取业务接口; * 快速生成 API 资产清单; * 为后续漏洞测试提供精准目标。  ### 八、AI 赋能:快速审计 小程序核心逻辑通常打包在 app-service.js 中,该文件往往存在下面几个问题: * 体积大(数万行); * 高度压缩与混淆; * 包含硬编码密钥、内部接口、跳转逻辑等敏感信息。 * 人工审计成本极高。 为此我们采用Ai辅助分析 * 将格式化后的 JS 代码 + 精心设计的 Prompt 输入大模型(如 GPT-4、Claude); * 让 AI 帮助完成: * 1.识别敏感路由(如含 /admin、/export 的路径); * 2.提取硬编码凭证(API Key、Token、内网地址); * 3.还原页面跳转关系; * 4.标记无权限校验的高风险函数。 注意:AI 结果需人工验证,但可将分析时间从数小时压缩至几分钟。   ### 十、涉及工具 * HaE:Burp 插件,用于流量特征提取与高亮; * Venom:综合渗透测试平台,支持资产发现、空间测绘、数据处理; * 部分自研工具(未开源)。
admin
2025年12月8日 18:01
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码