前言
住某酒店,一看就是个“正规”酒店。刚刷卡进门,就看到门缝里的小卡片了,床头上还贴这一个,个人微信的一个二维码美其名曰SPA。还贴心的提供了自助售货机购买TT。好奇扫码看了下。是个微信小程序,看界面,感觉可以测试下。发现里面东西的销量真不错哦。
正好在等外卖,掏出测试机,开启神器BURP。开始测试。
测试环境
小程序抓包的时候要注意下安卓系统版本,在安卓7.0之后默认不信任用户安装的系统证书。所以手机在安装burp证书的时候,需要将证书安装为系统信任的证书。方法如下
手机需要先进行 ROOT
- 证书格式转换
# 1. 证书转换,已经是pem格式的证书不需要执行这一步
openssl x509 -inform DER -in cacert.cer -out cacert.pem
# 2. 进行MD5的hash显示
# openssl版本在1.0以上的版本的执行这一句
openssl x509 -inform PEM -subject_hash_old -in cacert.pem
# openssl版本在1.0以下的版本的执行这一句
openssl x509 -inform PEM -subject_hash -in cacert.pem
- 证书重命名,数字为上面计算出的hash
mv cacert.pem 347bacb5.0
- 将新证书放到系统目录下
/system/etc/security/cacerts
chmod 644 /system/etc/security/cacerts/<hash>.0
chgrp root <hash>.0
过程
简单抓包看下过程中的包,点击物品的时候,会发包获取物品信息。post中的id参数还是可以遍历的,可以获取到每个房间里的物品信息。
看到这个ID能遍历,感觉有机会的样子,看上图可以发现包中是不存在 cookie 的,只有一个 token,所有包中的 token 都是不会变化的。
尝试修改返回包中的 price 相关的所有字段,看看能否修改支付价格。前端显示的价格确实是改变了,但支付的时候,还是按原价支付。
重新回顾整个购买流程,购买可以分为两个操作。一个是点击物品,进入物品详情页面,可以看到物品的售价等信息。然后是点击支付按钮后,进入支付操作。目前只测试了点击物品之后的数据包,经过测试是无法修改价格的。
接下来开启burp的包拦截,拦住点击支付按钮时发出的包,发现POST中存在一个 discount 参数默认为0,这个单词是折扣的意思。
哦吼,那是不是只要改动这个参数就可以获得购买折扣了?尝试下,先将0改为1试试,支付的时候,金额成功减少了 1。
尝试性的用此方法购买一个TT,看看是否可以以此来打开这个柜子的门,当我支付完一毛钱,哐当一声,柜子的门打开了,一个TT出现在我面前。惊Σ(っ °Д °;)っ。
作为新时代好青年,(主要是我也用不到,哭/(ㄒoㄒ)/),将TT放回了格子中,默默关上了门。
总结
对于逻辑漏洞的挖掘,重点是需要关注流程中每一个包每一个参数的含义和作用。上文的支付逻辑漏洞比较简单,参数也都是以英文单词命名,比较容易猜测参数的具体作用。有些开发的参数设置很奇怪,会以拼音首字母开头,这时候往往就比较难猜测参数的实际含义了,需要不断的改包测试,修改一个参数后会影响什么。