服务器端业务逻辑,特别是涉及数据库读写时,存在着关键步骤的时序问题,如果设计或代码编写不当就可能存在竞争条件漏洞。攻击者可以利用多线程并发技术,在数据库的余额字段更新之前,同时发起多次兑换积分或购买商品请求,从中获取利益。本文将讨论如何简单地使用 iFlow 应用安全加固平台的可编程特性,对竞争条件产生的支付漏洞进行防护。
一、原始网站
这是一个在支付环节存在竞争条件漏洞的站点:用户输入一个支付数值,系统将这个数值与余额比较,如果支付数值小于余额则允许支付,并从余额中减去支付数值。
攻击者编写并执行了一个 Python 攻击脚本,使用多线程并发对支付请求 URL 进行访问。由于未能正确处理竞争条件问题,系统为多个请求同时扣除了余额。我们回到浏览器中刷新页面,可以发现余额变为了 -10 元,如下图所示。
HTTP 交互流程如下: