支付接口安全测试记录
0x1. 低价值替换高价值SKU
在IOS平台上面支付完成之后,立刻杀掉进程,然后重新开启APP抓包,此时触发补单操作,拦截包之后,修改sku字段为高价值商品,尝试是否可以成功。
或者在Burp抓支付包的时候,因为apple服务接口验证了证书,可以在burp的TLS Pass Through
配置绕过apple的域名,不对其进行抓包。
0x2. 替换订单号
首先产生一个未支付的高价值的订单号,其次正常购买低价值商品,打断后端返回的response,替换response里面的订单号为高价值订单号,然后尝试支付成功之后商品的数量。一般适用于Google支付。
0x3. 利用Google机制自动退款
Google的SDK支付成功之后,客户端会发起一个接口请求: https://play-fe.googleapis.com/fdfe/consumePurchase
Google Play结算服务官方文档中关于处理购买交易的描述:在三天内未确认购买交易,则用户会自动收到退款,并且Google Play会撤消该购买交易,可以利用此规则进行退款。这种攻击一般针对一次性消耗品,当然重复的也可以。在支付完成之后,拦截上面的请求之后丢弃,如果服务端未做正确处理,则三天之后Google会自动退款。
修复方式:后端手动调用确认接口进行二次确认acknowledge,一般400可以视为已确认,409的时候需要查询一次状态,已确认状态可以放行,否则掉单处理。
测试注意点
- 某些版本的Burp抓不到Google的消费请求,或者是Burp显示DF-DFERH-01错误,这时候多更换burp版本试试,比如社区版
- 熟练利用Burp的
TLS Pass Through
和Intercept Client Requests
功能抓包。