只为对所学知识做一个简单的梳理,如果有表达存在问题的地方,麻烦帮忙指认出来。我们一起为了遇见更好的自己而努力💪!
支付的定义
支付又称付出、付给,多指付款,是发生在购买者和销售者之间的金融交换,是社会经济活动所引起的货币债权转移的过程。支付包括交易、清算和结算。
以前的支付,一般用物品做交换,最早是以物易物,然后在就有了钱币的概念,最近就是纸币和已经存在有一段时间的虚拟货币(正在推行中的中央数字货币也属于虚拟货币的一种)
在交易中,以前就有漏洞的存在,一般是出在物品或者钱币本身,如对物品或钱币造假,现在的线上交易,大多数是问题就在交易过程当中了,如对数据做更改,已达到篡改金额或者数量的效果
先了解一下现在线上快捷支付的原理:
-
浏览器跳转
基于用户访问的浏览器,如果用户在银行页面支付成功之后,直接关闭了页面,并未等待银行跳转到支付页面,那么商户网站就很容易收不到支付结果,导致支付结果难以处理。而且浏览器端数据较容易被篡改,会大大降低交易安全性。
-
服务器端异步通知
该方法是支付公司的服务器后台直接向用户指定的异步通知URL发送参数,采用的是POST和GET的传参方式。商户网站接收到异步参数的URL对应的程序中,要对支付公司返回的支付结果进行签名验证,成功后进行支付逻辑处理,如验证金额,订单信息是否与发起支付时一致,验证正常则对订单进行状态处理或为用户进行网站入账等。
支付漏洞属于逻辑漏洞,挖掘时,思维要尽量发散,不按常理来,会有更好的效果
需要注意的是,因为涉及金额这样的敏感数据,所以尽量选择金额较小的去尝试。
常见支付漏洞类型
-
修改支付价格
支付三部 订购-订单-付款三个步骤当中的随便哪一个步骤进行修改金额的测试,如果前面两个步骤有验证机制,那么就在最后的付款时进行抓包修改,如果在最后一步没有做好验证,那么问题就会在那出现,在修改金额时,选择小金额或者负数尝试。
-
修改订单状态
订单完成—未完成
将未完成的支付订单改为完成 -
修改订单数量
一般采取用负数的方式来尝试。 -
修改附属值
如优惠卷这样的东西,大多数情况下商品只能用一张优惠卷,但可以将其限制个数的附属值改变,就能同时使用很多张。
支付漏洞靶场演练
靶场貌似是一个CMS,随便尝试一个账号进入
看到这里有买东西的地方,进去测试一下
穿越火线充值卡,尝试在前面加了个-号 让其变成负数试试
这里报出了错误,还能看到执行语句和文件目录,在看看其他地方
在这居然看到我的这个账号的账户金额居然多了钱进来,刚刚的负号,让我不但不用给钱,反倒给我了钱。
在数字加大一点看看(正常情况下不建议这么做,涉案金额过大,容易出事情。)
在余额界面看到了flag
漏洞总结
这里在说一下有关这个支付漏洞的防护方法:
- 后端检查每一项的值,包括支付订单状态
- 校验价格,数量参数,比如产品数量只能为正数,并限购数量
- 与第三方支付平台检查,实际支付的金额是否与订单一致
- 支付参数用MD5加密,解密,数字签名及验证,这个可以有效的避免数据修改,重放攻击中的各种问题
- 金额超过阈值,进行人工审核。
《最好的防御,是明白其怎么实施的攻击》