业务逻辑漏洞:为什么扫描器永远发现不了
自动化工具的盲区
扫描器的工作方式是构造常见攻击载荷并观察响应特征。它判断的是技术层面的异常,例如是否出现了数据库错误信息、是否执行了注入语句。而业务逻辑漏洞的表现是业务流程可以按非预期的方式完成,请求本身完全合法,响应也完全正常。扫描器没有业务上下文,自然无法判断某个操作在业务上是否应该被允许。
常见类型
第一,参数篡改。例如订单金额、折扣比例、数量等参数在客户端计算后提交,服务端未重新校验,导致可以低价购买或获取超额权益。
第二,流程绕过。例如支付流程可以跳过付款步骤直接进入发货状态,或者审批流程可以被绕过直接提交终态。
第三,条件竞争。在并发场景下对同一资源做重复操作,导致权益被多次使用,例如优惠券被重复核销、余额被重复扣减或积分被重复领取。
第四,数量与频率失控。接口未限制调用次数,导致可批量领取、批量发送或批量注册,造成资源消耗或垃圾数据。
第五,状态判断缺失。例如已退款订单仍可再次申请退款,或已注销账号仍能重新登录。
识别与测试思路
第一,从业务价值出发。优先分析与资金、权益、数据和权限相关的流程,这些环节的漏洞造成的实际损失最大。
第二,梳理状态机。把关键业务流程的状态与转换条件画出来,检查每次转换是否都在服务端做了完整校验。
第三,尝试反向思考。问自己如何在不满足条件的情况下达到目标状态,例如不付款如何拿到商品、低权限如何执行高权限操作。
第四,做并发测试。对涉及余额、库存、优惠券等共享资源的接口做并发调用,观察是否出现超发或重复核销。
第五,检查参数可信度。确认所有影响业务结果的参数都在服务端重新计算或校验,而不是直接信任客户端提交值。
结语
业务逻辑漏洞的发现依赖对业务的深入理解。把业务人员和安全测试人员放在一起做评审,往往比任何工具都有效。