支付漏洞安全测试用例总结(不断更新ing~)
前情:
因为在上次实习过程中,经常会遇到一些支付相关的场景,对于这种支付漏洞,没有一个较为标准的测试流程,所有的具体测试用例都必须要根据实际的参数情况进行分析
漏洞分析:
下面是我总结的一些常见场景下的一些安全测试用例,根据一个大致的支付流程进行总结,并不一定完整,之后遇到会不断的进行补充~
正常类型:
支付流程大致分为以下四步:
- 用户选择商品并提交购买请求;服务器生成订单(包含商品ID、金额、折扣、订单类型、状态等关键信息),返回订单详情;
- 针对限购商品尝试并发突破,如单用户并发,多用户并发剩余1个的赏评,
- 隐藏商品购买(id)
- 金额修改,折扣商品可修改折扣
- 优惠券使用如并发获取,并发使用,优惠券额度改变,过期使用,使用他人;涉及到邀请之类获取优惠券需要判断并发是否可以同一用户多次获取,或者邀请链接是否存在渲染用户名之类参数存在反射xss等;对于积分一类和优惠券大体测试思路相同
- 特殊商品购买时是否存在不符合条件仍可购买
- 涉及到不同币种看是否存在币种转换漏洞即25欧元的商品用25人民币支付
- 如涉及到订单类型转换看是否存在不同类型订单出发异常价格
- 订单金额或者订单数量等int类型是否存在溢出导致生成的订单金额异常
- 除此之外下单也要测试csrf等漏洞,以及涉及到实物填写收货地址时csrf 可能会导致将商品发送到其他地址,还要看是否存在xss
- 用户发起支付(如调用支付接口、跳转第三方支付);
- 除了生成订单修改金额之外,在用户发起支付的时候也需要关注金额修改等问题,大多数第三方支付接口都会有严格的签名校验和后端校验,但也可能存在遗漏
- 很多商品支持不同第三方的支付,每个支付接口值都不同,如果未对不存在的支付接口做处理,可能会导致间接的支付成功
- 还有就是发起支付的时候替换不同订单去达到用a订单的价格购买b订单的商品
- 除此之外如果支付的时候出现用户id,未做校验的话可能会导致用其他用户账号支付他人商品(现在很少了)
- 服务器校验支付信息(金额是否匹配订单、订单状态是否为“待支付”等);
- 服务器在校验支付信息的时候需要测试是否对所有必要参数都进行了校验如商品的价格、数量和支付的币种之类,服务器在校验第三方返回接口的时候如果没有完整的校验也会出现问题
- 支付完成后,服务器更新订单状态为“已支付”,并触发商品交付逻辑。
- 这一块也可能存在一些问题如修改订单状态为已支付,跳过支付流程然后直接获取商品
- 原因是因为没有对支付状态的值跟实际订单支付状态进行校验,导致点击支付时抓包修改决支付或未支付的参数为支付状态的值从而达到支付成功
特殊类型:
退款操作:
- 退款并发、给他人退款
- 除此之外上面涉及到的一些金额溢出,越权退款等,具体要根据操作接口传递的参数分析
提现功能:
- 比如一些存在钱包可以提现,这时也可以通过多线程并发测试同一笔金额,没有实时的处理各种状态所导致的问题
总结:
对于支付类的逻辑漏洞,我个人认为最重要的两件事:
1.搞清楚涉及到的所有参数的作用,根据参数作用去做针对性的测试
2.则是必须要搞清楚整个支付流程,如客户端发起支付,调用第三方支付接口,服务端校验回调接口这些具体流程,因为每一个流程都有可能出现问题

浙公网安备 33010602011771号