0×01 看见你很高兴
做了一个近期遇到的逻辑漏洞思维导图,再拿几个案例跟大家分享交流一下。
0×02 思维导图
0×03 实际案例
一、修改优惠券金额
某系统提供了在线购买套餐的功能,新用户都可领取到一张20元的优惠券。先是尝试了商品数量漏洞,确实存在该问题,但构造不出低价,都是百元以上的价格,遂分析一下提交订单时的数据包。
一眼锁定了 couponInstance 这个参数,代表的就是优惠券的值,开始仅修改了 couponInstance 的值就放行了包,回显支付失败。
经过几次测试之后,得到只要符合这么一个公式就能成功跳转支付: 总价 – 优惠券金额 = 付款金额
也就是图中的红字
total - couponInstance = piadOther
修改couponInstance值为879,paidOther值为1,totalFel保持原价880不变,放行数据包即可成功1元购买。
二、修改充值所需付金额
某店系统提供会员充值的功能,金额存储到电子会员卡内。先把充值的流程走了一边,分析了下数据包,最后成功0.01充值任意金额。
关键就在开头的两个数据包,猜测程序逻辑如下:
用户输入充值的金额 2000 –> 服务器接收到充值2000的请求,等待用户付款成功即充值2000。
发送订单信息(其中包含价格参数)–> 付款 –> 服务器接收到付款成功的请求,为用户充值2000。
那么就大概可以达到一个类似于欺骗的方法,告诉服务器我要充值2000,实际我只付款1分钱,但我确实是付款成功了,服务器接收到付款成功就充值了2000。
三、修改充值赠送金额的id
某系统会员充值功能,多充多送,充1000送100,充10000送3500,最后达到充1块钱可获得3500的赠送金额。
就四个参数,关键就在于money参与rule_id
这里money是充值的金额,也是付款的金额。
rule_id 对应的就是充值赠送的规则,大概如图所示
这里就将money修改为最低值,这个系统不允许money<1,所以最低只能填1了。
rule_id改为充值赠送3500的id值,包放行,付款1元成功获得3500的赠额。
0×04 番外
Brupsuite、Fillder手机抓包设置 从Http –> Https
手机需要和电脑连接到同一个wifi下,然后在burpsuite做如下设置,端口可自行更改,这里以ios举例,android也基本一样。
如此设置之后在电脑上的Burpsuite就能抓到手机的Http包了,导入Burpsuite自带的证书可抓取到少部分的Https包。
Fillder的设置也是大同小异,不过Fillder设置好以后要访问下代理的IP地址安装下他的证书。开启完全信任即可抓取到少部分Https的包。
还是以ios为例,设置 –> 通用 –> 关于本机 –> 证书信任设置(最底下)
我个人觉得Fillder对Https的支持比较好(也可能是我不会用Burpsuite),因为它可以抓取到隧道连接的请求,类似这样的
从而我们可以访问url去获取他的证书并安装从而抓取到他的Https包。
以https访问会在Firefox会这样显示,别的浏览器我不清楚,点击高级 –> 添加例外 –> 确认安全例外。
再到Firefox右上角 选项 –> 隐私与安全 –> 查看证书
导出刚刚所添加的证书,发到手机上信任就可以抓到他的Https包了
但是一些网站这样做了还是抓不到它的Https包,希望知道怎么抓的大佬分享一下。
0×05 总结
人是最大的安全漏洞,开发的功能越多,所存在的问题就越多,多尝试一些思路,往往有意想不到的结果。可能有说错的或说的不好的地方,请各位指出,谢谢!