目录:
前言
通关原理
测试环境
踩坑指南
总结
全文共计2500字左右,预计阅读需要7分钟
前言
这段时间微信小程序羊了个羊很火,前两天原本想发一下通关的方法的,但觉得抓包实在太复杂,折腾了两天想找出简便的方法,一直未成功。就按照最复杂的方法来吧。
通关原理
前面微信授权登录的步骤就不多讲了,先看看正常游戏流程
作者在开发程序时存在以下两个问题,
一、是没有校验前后两关的请求逻辑,导致随意修改地图参数,即可改变地图。
二、是没有校验通关后成功的数据包逻辑是否正确,导致重放攻击,只要不停发送通关成功数据包,即可刷新通关成功次数。
三、没有进行有效的会话管理,玩游戏时候大家也可以发现,程序没有退出重新登录。第一次微信授权登录后,服务端会保存会话登录凭证参数 T, 这个T也是能够进行重放攻击的关键。经过测试,这个登录凭证可以长时间不会失效,即使退出微信,此登录凭证也不会失效。
通过上述问题分析,我们可以抓包,进行重放攻击
小程序发送两个数据包到服务器,同时请求第一关和第二关的地图;第一关地图map_id=80001, 第二关地图map_id = 900+当日日期,比如今天17号,map_id就是90017。
抓获上述两个请求地图数据包,第一关数据包放过,第二个数据将map_id 修改为80001,这样第二关返回的地图就和第一关一样,很轻松就通过了。
第二关通关后,等几秒,抓取通关成功后的数据包,然后使用burp进行重放攻击刷新通关次数。登录成功后就获取了登录凭证参数 T , 这个时候可以直接写两行代码,不停的刷,可以不用工具重放攻击。
通关很简单,此方法难点在于抓包。新版本微信抓不到包,环境配置相对复杂。由于本地物理机应用太多,为了方便使用虚拟机,新装win10系统。
测试环境
Windows 10
Java 15.01
BurpSuite 2022..3.1
Charles 4.6
Proxifier
百度云盘链接:
链接:https://pan.baidu.com/s/1kP-OvvVEbk7D17bqGdKVAw
提取码:3fp7
也可以用我配好的win10 直接VMware导入即可
BurpSuite 安装配置
1
1.1 点击BurpSuiteLoader启动Burp。有些人这一步可能无法直接启动,需要破解。具体破解步骤,不在演示,可以网上搜索一下。
1.2 启动后,进入Proxy -->Option 设置本地监听端口。默认是127.0.0.1 8080端口
1.3 监听端口设置完成后,安装burpsuite证书。
打开谷歌浏览器,输入127.0.0.1:8080 下载证书-->在设置里面搜索证书-->
然后一直点击下一步安装即可。
配置Charles
2
2.1 启动Charles , 注意:Charles启动慢,要等10秒左右
2.2 点击Help --->SSL Proxying ---> Install Charles Root Certificate 安装根证书
点击安装证书
最后点击完成即可。
2.3 设置代理。点击Proxy --> Proxy Settings 安装默认配置即可,端口默认8888 这些不用更改。
配置Proxifier
3
3.1 安装proxifier , 直接双击安装,按照默认设置安装即可。
3.2 安装完成后,设置代理服务器
添加两个代理服务器,地址都是127.0.0.1 端口分别是BurpSuite 和Charles 的代理端口 8080和8888 .
3.3 配置代理规则
点击配置文件--> 代理规则-->添加规则,分别将Charles 和Burp 端口添加进去。
其中wechatappex.exe 这个程序就是羊了个羊电脑端小程序的名字,微信打开小程序,通过任务管理器,右击查看进程对应的程序。
这样设置就是让wechatappex小程序流量走 Charles这个工具,然后从Charles将流量转发给BurpSuite
设置完成后Proxifier就开始抓取小程序的数据包了。
抓包分析
由于数据包很多,要抓包小程序的数据包建议先关闭抓包,BurpSuite 关闭抓包如下图所示:
开始抓的包为微信的数据包,数据很多。要注意观察。建议先登录微信,然后配置代理工具,代理工具配置好后,开启Burp监听状态,在打开小程序。
授权登录
最关键的一步,抓起地图包。参数为map_id=900xx 的参数全部改成80001,让第二关返回的地图和第一关一样。请求参数里面的 T 可以保存下来,这个登录凭证一直有效,可以直接写个脚本,利用这个登录凭证重放攻击,刷通关次数。
当修改参数后第一关地图不变,可以先放过拦截的其他数据包,或者直接停止抓包。
修改后第二关,如下图所示,还是和第一关一样。
在第二关通关前,一定要开启抓包,通关后会拦截到通关成功的数据包,如下图所示。请求参数不解释了,一眼就能看出来,重放攻击时也不用更改的。
然后右击,将此数据包发送到Intruder模块
清除变量
设置空Payload, 以及重放次数
以上就完成了重放攻击。抓到登录凭证参数T 后,也可以直接写个脚本跑。每次打开抓包重放攻击挺麻烦的,保存登录凭证,直接用脚本,随时随地刷。Python脚本源码及整个虚拟机环境,放到百度云盘里面。
踩坑指南
1、配置环境后由于代理工具拦截流量,所以微信可能出现断网,无法刷新消息等现象。需要将Burp拦截的包放掉。
2、小程序打不开情况:需要检查Charles 是否退出了,这个软件容易闪退。然后将Burp拦截关掉,重新进入小程序。
3、抓不到小程序请求包:小程序登录授权时候关掉拦截,登录成功后,进入羊群时再开启拦截。
4、小程序一直无法进入:这种情况是我遇到最多的,我觉得有两个原因,一是代理拦截了,而是程序服务器本身有问题,最近都在刷这个,流量很大。因为小程序一直再发地图请求包,burp上一直点forward,放过数据包多尝试几次就好了,注意将map_id = 900xx的参数改一下就好了。如果还不行,就需要退出小程序重新进来抓包了。
环境配置视频如下,由于录视频时候已经通关了,所以没法录抓包的环节
总结
小程序安全性可以说是很糟糕,以上是最复杂的一种方法。程序对发过来的数据包,缺少基本的会话管理,访问控制。除了上述方法,还有其他方法。比如:抓取第二关失败的包,将参数rank_state=2 改成1就好了,还有将返回排行榜返回参数daily_count包,本地文件修改等。由于这个游戏很火,没有进一步做测试,奉劝大家别玩的过火呀!!!
使用其他方法完全可以Burp抓取本地手机数据包,更改即可。上述方法对服务器压力很大的,朋友圈那些挂逼,刷出个天文数字。这两天我登录这个小程序有时候很卡,数据发出去了半天收不到回包。
往期推荐
【国家队牛逼】看不见就要挨打!!西北工业大学网络攻击追踪溯源
可能这才是高级渗透吧
Nginx "0day" 远程命令执行漏洞影响范围可能比你想得更大