在短信、邮件调用业务或生成业务数据环节中(类:短信验证码,邮件验证码,订单生成,评论提交等),对其业务环节进行调用(重放)测试。如果业务经过调用(重放)后被多次生成有效的业务或数据结果。
a. 恶意注册
b. 短信炸弹
在测试的过程中,我们发现众多的金融交易平台仅在前端通过JS校验时间来控制短信发送按钮,但后台并未对发送做任何限制,导致可通过重放包的方式大量发送恶意短信。
案例: 某交易网逻辑漏洞(木桶原理)
看到首页有某密码重置的问题了,就来挖一挖了http://www.xxx.com/首先注册用户,手机号,发送验证码,是6位数字,不截图了这里,发送手机号1分钟能发一次,服务端有限制。
然后手机版http://m.xxx.com/
可以无限进行发送短信,造成短信轰炸,手机验证码还是6位数字
GET /user/send_msg?mobile=13800xxxxx HTTP/1.1
Host: m.ymt360.com
response {"status":1,"msg":16595}
到这里漏洞审核肯定说无危害啊,因为没有一个短信轰炸被通过的。
然后我们来到了手机APP客户端,以安卓的为例吧
首先也是短信轰炸,这个不多说了
然后就是,短信验证码为4位数字,这个爆破起来是分分钟啊
然后这个可能也没什么,其实想说的是一个设计缺陷
POST /v8/phone/verify?mac=cATa3T986UgODE7YgoSZ9h4yJoI. HTTP/1.1
X-App-Version: V3.3.2
X-User-Agent: 0
X-User-Id: 93873
X-DOMAIN: app
Content-Type: application/json
Accept-Encoding: gzip,deflate,sdch
Content-Length: 57
Host: api.ymt360.com
{"seqNo":"16768","vcode":"1111","code":"aifbc6c0eo5sgzi"}
上面就是验证验证码的的请求1111可以直接爆破。
然后验证失败response返回{"status":-1}
现在我们直接不进行爆破,截获返回包,修改为{"status":0}
则直接验证通过进入账户页面。
然后更重要的一点就是,可以知道其他用户的手机号,直接登录任意用户账号。
a. 类似案例如下
点击“获取短信验证码”,并抓取数据包内容,如下图。通过分析数据包,可以发现参数sendData/insrotxt的内容有客户端控制,可以修改为攻击者想要发送的内容
将内容修改“恭喜你获得由xx银行所提供的iphone6一部,请登录http://www.xxx.com领取,验证码为236694”并发送该数据包,手机可收到修改后的短信内容,如下图:
大多有利用的案例发生在验证码以及业务数据的时效范围上,在之前的总结也有人将12306的作为典型,故,单独分类。
a. 某网站的买票业务是每隔5s,票会刷新一次。但是这个时间确实在本地设置的间隔。于是,在控制台就可以将这个时间的关联变量重新设置成1s或者更小,这样刷新的时间就会大幅度缩短(主要更改autoSearchTime本地参数)
案例:某网站自动刷票时间可更改漏洞
某网站的自动查询可以直接修改查询间隔时间,可使查询间隔时间无限小。
我们都知道,某网站的订票现在可以开启“自动查询”,这时会5秒查一次,如果同时选了“自动提交”,那么如果查到票就会自动提交订单。好像挺方便的。
查询间隔是5秒。估计是为了服务器考虑吧。
但如果修改autoSearchTime参数,查询间隔就随便改啦。
打开console,输入想使用的自动查询间隔(毫秒)
比如:
然后再按原操作进行自动查询:
我想多久查一次多久查一次,并且的确是可以按照这个时间提交订单的,yeah。
这样一来,码农们刷票和提交定单就可以比大家快5秒啦
如果全国人民都用0.01秒的间隔,
那么某网站的服务器,嘿嘿
a. 针对某些带有时间限制的业务,修改其时间限制范围。
例如在某项时间限制范围内查询的业务,修改含有时间明文字段的请求并提交,查看能否绕过时间限制完成业务流程。
例如通过更改查询手机网厅的受理记录的month范围,可以突破默认只能查询六个月的记录。
原文始发于微信公众号(LSCteam):业务接口调用和时效绕过测试
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论