小技巧之利用微信公众号、小程序信息收集

前言

在以往的比赛打点过程中,通常都是使用搜索引擎来获取目标资产信息,往往因为太麻烦或时间太短忽视了公众号、小程序的信息收集导致可能会遗漏一些安全漏洞。所以在这里简单说一下如何对微信平台进行信息收集

小程序调试业务功能点

一般情况下微信小程序可通过抓包工具获取业务交互流量,测试人员可通过对流量进行操作来挖掘部分业务漏洞。当业务交互流量存在加密时利用手机或pc端打开的小程序无法通过f12或添加开发者工具获取前端信息来进一步调试js,导致无法修改请求、返回包的数据通过RSA、SM4等复杂加密算法加密数据可能会丢失许多有价值的漏洞

Proxifier抓取微信小程序流量数据

MAC微信小程序应用默认路径:/Applications/WeChat.app/Contents/MacOS/Mini Program.app

Windows微信小程序默认应用路径:C:\Program Files (x86)\Tencent\WeChat\WeChatApp.exe(微信版本2.9.5.56)

image.png

打开目录后可COMMAND+SHITFT+G输入小程序默认路径:/Applications/WeChat.app/Contents/MacOS 选中MiniProgram即可

image.png

Windows版本同理,不同版本微信可能小程序安装位置不同,若本地环境与文中提供的路径不符,按本地真实路径添加代理即可

传输参数加密后情况

image.png

传输参数未加密或部分加密情况

image.png

提取小程序前端代码

通过ROOT过的安卓或模拟器提取小程序wxapkg包

提取默认路径:/data/data/com.tencent.mm/MicroMsg/{随机字符}/appbrand/pkg

image.png

利用wxappUnpacker将wxapkg进行前端代码还原

注:Windows和Mac版本下无法直接获取wxapkg,后面会提到PC端如何获取wxapkg

安装npm所需依赖

npm install esprima
npm install css-tree
npm install cssbeautify
npm install vm2
npm install uglify-es
npm install js-beautify

还原成功后会在wxapkg包目录下生成同名文件夹并存在还原后的前端代码

注:还原的前端代码不一定是全部信息,如果有些小程序如果存在js懒加载的情况需要多点击一些功能点,防止存在js未加载的情况

image.png

到这一步已经可以获取前端加密相关的逻辑了

image.png

为了方便调试,可以利用微信小程序开发者工具进行线上调试

下载链接:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

安装后使用游客模式登录即可

image.png

image.png

导入后就可以按常规操作进行前端调试了

image.png

PC端获取wxapkg

PC版微信小程序包经过了加密,需要先解密再解包

默认位置在:C:\Users\user\Documents\WeChat Files\Applet

我们看到的包名统一为:__APP__.wxapkg

借助大佬的开源工具来解密:https://github.com/BlackTrace/pc_wxapkg_decrypt,同时也有编译后的程序,直接用即可。

pc_wxapkg_decrypt.exe -h
Usage of pc_wxapkg_decrypt.exe:
   -in string
         需要解密的wxapkg的文件路径 (default "__APP__.wxapkg")
   -iv string
         AES加密的IV,默认不需要设置,如果版本有变化,设置 (default "the iv: 16 bytes")
   -out string
         解密后的wxapkg的文件路径 (default "dec.wxapkg")
   -salt string
         pbkdf2用到的salt,默认不需要设置 (default "saltiest")
   -wxid string
         小程序的id

获取到的wxapkg利用前面的方法进行还原即可

公众号调试业务功能点

正常情况下微信公众号的一些业务点只能通过微信内置浏览器才能打开

内置浏览器可正常访问,但没办法通过f12调试js或查看接口通信情况

image.png

使用普通浏览器打开链接会有如图提示

image.png

因为微信内置浏览器使用的为chrome内核,所以可以用devtools进行开发者调试

微信版本不同可能会导致浏览器内核不同,所以在未使用文中提供的微信版本时可通过内置浏览器打开下面代码获取内核版本并下载对应的devtools

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>PC端 - 查看微信内置浏览器版本</title>
</head>
<body>
    <script>
        window.open("chrome://version");
    </script>
</body>
</html>

测试微信版本 2.9.5.56

image.png

查看wechatweb启动时加载的资源路径(--resources-dir-path)

wmic process get caption,commandline /value|find "wechat"

image.png

将devtools复制到资源路径和微信根目录

image.png

微信启动快捷方式中添加 -remote-debugging-port=8000

image.png

打开微信公众号业务点可成功获取开发者控件调试js

image.png

image.png

文章参考文献

小程序反编译代码审计出奇迹

-->