最近接到一个渗透任务,需要对小程序进行测试,通过搜索相关资料,最终使用proxifier成功将小程序流量导向burp,然后通过burp再导向xray。另外使用KillWxapkg对小程序进行反编译,得到了小程序发布代码。
之前做过很多web的渗透测试,先介绍一下web渗透测试的内容,主要是关注两个方面:
一、接口
1、有没sql注入等高危漏洞。设置好代理后,开启xray监听相应端口,在浏览器上访问目标网站就可以将流量导向xray进行测试。
2、接口的输入有没通过序列进行查询,可进行暴力遍历查到其他用户的数据。
3、接口的输出有没敏感数据,比如输出了密码、身份证号(未脱敏)等信息。
接口的输入和输出主要通过浏览器调试工具中的网络请求选项卡来看。
二、网页代码
通过人工查看代码,可以看到隐藏的注释信息或功能逻辑。比如早期的html文件中,经常有些程序员写的注释,可能会留有测试账号的信息。或者留有邮箱、联系电话,可以进行钓鱼或者社工攻击。还有一些隐藏的功能,在网页上没有看到,但在代码中有,我们可以使用浏览器调试工具,让js执行对应的函数,如果有隐藏的接口,也可以直接通过postman配置好对应参数进行调用。
小程序的渗透测试和web不太一样,他是由微信小程序进程加载的,网络流量不可见,代码不可见,在一定程度上增加了安全性。不过,我们可以使用以下方式,对其进行渗透分析。
Proxifier
Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链。我们可以通过Proxifier配置,把PC上运行的小程序流量导出来。配置如下:
1、代理设置
profile>proxy server>add,address填127.0.0.1,port填8080,protocol选择https。

2、转发规则
profile>proxification rules>add,name填wechat(可随意),Applications填wechatappex.exe(小程序进程);Action选择Proxy HTTPS 127.0.0.1

Burpsuite
我们用burp主要是方便看他的网络请求的接口(输入和输出的数据),以及重放和爆破。
1、代理设置
proxy增加代理监听127.0.0.1:8080(要和Proxifier的代理配置一致)

注意拦截器要切换成关闭状态,否则待会小程序访问接口会阻塞。

如果是第一次使用burp代理,使用浏览器访问127.0.0.1:8080,右上角点击下载CA证书

双击证书存放到【受信任的根证书颁发机构】

2、转发设置
connections增加上游代理服务器127.0.0.1,端口7777(对应xray监听端口)

Xray
我们用xray对接口进行自动测试,主要是检测sql注入、xss等漏洞。
1、生成证书
执行命令xray_windows_amd64 genca
会在根目录下生成ca.crt,双击导入证书
2、开始监听
执行命令xray_windows_amd64 webscan --listen 127.0.0.1:7777 --html-output proxy.html
其中7777是监听端口,要和burp的上游代理服务器设置相同。proxy.html是扫描报告输出的文件名。
如果有报错说file proxy.html already exists, please backup and remove it at first,说明xray根目录中已经有proxy.html,需要将输出文件名改个名字,或者移除proxy.html。

以上配置完毕后,我们开始在PC上访问小程序,手动点击各个页面和按钮。我们可以看到burp的站点地图里面展示出了接口请求数据。

xray也同时扫描接口。

等xray上输出[*] All pending requests have been scanned,说明已经扫描完毕,我们可以查看根目录中的proxy.html,他会分项展示扫描结果。


KillWxapkg
接下来我们开始分析小程序发布代码,我们先定位小程序存放路径,一般在C:\Users\Administrator\Documents\WeChat Files\Applet\下,有很多小程序目录。小程序目录以小程序ID命名(以wx开头,如果我们分不清楚是哪个,可以先关闭小程序,删除该目录下所有的文件夹,然后再次访问小程序。)

小程序目录中有个子文件夹(估计是小程序版本号),里面有__APP__.wxapkg文件,就是小程序的加密包。
下载可执行文件
我找了几个工具,他们的基本原理是先从小程序存放路径中获得加密包,导入解密工具进行解密,解密后会获得wxapkg程序包,然后反编译程序包得到小程序代码(这里说的代码指的是小程序发布代码,并不是项目源码,有经过一定的js压缩和混淆)。里面最好用的工具是KillWxapkg,下载链接在此。

从release中下载最新版本的可执行文件KillWxapkg_2.4.1_windows_amd64.exe
执行命令
KillWxapkg_2.4.1_windows_amd64.exe -id=小程序ID -in="C:\Users\Administrator\Documents\WeChat Files\Applet\小程序ID\版本号\__APP__.wxapkg" -out=./小程序ID -restore -pretty -sensitive
等待1分钟左右,小程序代码会输出到output目录下

从输出文件可以发现,它就是小程序发布前在开发者工具中看到的代码。

我们把项目拖进HBuilderX,对文件进行自动缩进。从上图可见,代码还是有一定的可读性,基本只是一些局部变量被简化。我们从中可以发现隐藏的逻辑和接口。比如上图所示,有个隐藏的登录接口,允许传入特定的测试账号进行登录。我们可以在burp中抓取其他的接口,对请求包进行修改,调整接口路径和传参进行测试,从而获取登录权限,进而逐步渗透。
有人问我,为何他看到的代码是混淆得没法看的。我做了个实验,使用了微信官方自带的小程序加固方案(文档在此)发布了小程序,然后再用KillWxapkg进行逆向,发现代码确实已经不具备可读性。

所以作为小程序开发者,在上传发布代码前,要使用官方自带的加固方案确保代码安全。
919

被折叠的 条评论
为什么被折叠?



