支付系统中的安全缺陷,允许攻击者非法篡改交易流程、窃取资金或用户数据。其危害性极高,可导致直接经济损失、用户隐私泄露及系统信任崩塌。
攻击链与攻击手法
一、现代社会主流使用的两种线上支付流程
第一种:支付凭证的商户对接(也叫做“浏览器跳转支付通知”)
用户通过发送支付请求到第三方平台(如银行,微信,支付宝等),第三方平台返回含有支付结果的凭证,再由用户告知商家支付的结果。
第二种:第三方平台与商家的实时对接(也叫做“服务端异步支付通知”)
用户发送支付请求并支付金额后,由第三方平台进行异步处理,向商家以及用户实时反馈支付结果
支付漏洞主要出现在第一种的商户交接(即“浏览器跳转支付通知”),因此造成的参数篡改漏洞
透过表面看本质:
参数篡改漏洞的本质是 客户端与服务器端数据校验不一致。
攻击者通过拦截并修改支付流程中的关键参数(如金额、数量、优惠券ID),利用 后端未二次验证 或 参数未加密签名 的缺陷,绕过正常支付逻辑。
关键漏洞点:
①前端依赖信任:后端直接信任客户端提交的参数(如金额),未与原始订单数据库比对。
②参数明文传输:金额、订单ID等敏感参数未加密或签名,可被Burp Suite等工具篡改。
③逻辑链断裂:支付接口未严格关联订单生成阶段的数据(如订单金额仅在生成时计算一次)。
二、攻击原理:支付环节的致命弱点
支付流程涉及身份认证、交易授权、数据传输三个核心环节,漏洞常出现在以下层面:
1. 身份认证缺陷
验证码劫持:木马程序(如“验证码大盗”)拦截短信验证码,结合钓鱼获取的账户名,可重置支付密码。第三方支付平台仅凭“账户名+验证码”即可修改密码,成为主要攻击入口。
生物认证绕过:如Apple Pay依赖安全芯片存储指纹/Token,但若设备未设生物锁,攻击者可通过支付密码绕过(Plan D)。
2. 交易授权逻辑漏洞
服务端校验缺失:未对客户端提交的金额、数量等参数二次验证,导致篡改有效。例如修改订单金额为负数,可能触发系统退款至攻击者账户。
并发请求处理错误:多线程并发支付时(如同时发起1元和6元礼包支付),系统未校验订单冲突,导致重复到账。
3. 数据传输与存储风险
中间人攻击(MITM):GSM嗅探设备降级4G为2G信号,拦截明文传输的验证码短信,结合撞库获取用户身份证、银行卡号。
密钥泄露:网站框架使用默认账号密码(如分布式开发后台),攻击者获取服务器权限后窃取支付密钥。
三、攻击手段与技术实现
支付漏洞利用手段多样,核心可归纳为以下五类:
1.参数篡改(前端/传输层)
参数篡改类型:
金额/数量篡改:抓包修改`price`、`quantity`参数(如改为负值或0.01元),绕过支付校验。
优惠券/积分溢出:修改优惠券面值为大于商品价格的值,或重复使用同一优惠券(复用漏洞)。
支付状态伪造:将支付结果参数由`failed`改为`success`,欺骗系统确认付款。
篡改对象 |
示例参数 |
攻击效果 |
金额 |
amount=100 → amount=0.01 |
低价购买高价商品 |
数量 |
quantity=1 → quantity=-5 |
总价负数导致余额增加 |
优惠券ID |
coupon_id=1 → coupon_id=9 |
使用未授权的满减券 |
支付渠道 |
channel=alipay → test |
调用测试接口实现零元支付 |
参数篡改流程图:
漏洞成因技术细节
1. 后端校验缺失代码示例
错误代码:直接使用客户端提交的金额
def pay(request):
order_id = request.POST.get('order_id')
amount = request.POST.get('amount') # 直接从客户端获取金额
# 未查询数据库校验金额是否匹配
result = third_party_pay(amount)
if result == "success":
update_order_status(order_id, "paid") # 直接标记为已支付
2. 正确校验逻辑对比
错误代码:直接使用客户端提交的金额
def pay(request):
order_id = request.POST.get('order_id')
amount = request.POST.get('amount') # 直接从客户端获取金额
# 未查询数据库校验金额是否匹配
result = third_party_pay(amount)
if result == "success":
update_order_status(order_id, "paid") # 直接标记为已支付
2. 验证码劫持与身份冒用
2.1 漏洞原理与技术细节
验证码作为身份校验核心环节,攻击者通过木马植入或GSM嗅探突破校验:
木马植入:利用用户对“色情内容、伪交易沟通(如伪装淘宝买家)”的好奇心,诱导下载含木马的APP/文件,木马后台劫持手机验证码并转发至攻击者邮箱,绕开短信校验。
GSM嗅探:伪基站强制手机设备降频至2G网络(2G协议短信加密弱),嗅探拦截短信验证码;结合撞库获取的账号密码,拼接身份信息完成盗刷。
2.2 攻击流程示意(以电商支付盗刷为例)
2.3 防护逻辑对比
错误场景(无有效防护) |
正确防护逻辑 |
未检测APP来源/权限,放任木马安装 |
应用商店校验+手机系统“未知应用拦截” |
依赖2G短信验证码作为唯一校验 |
升级为“验证码+生物识别(指纹/人脸)”双因子校验 |
3. 接口与协议层攻击
3.1 漏洞原理与技术细节
支付系统依赖接口通信与协议认证,攻击者通过篡改接口参数或滥用协议漏洞突破:
支付接口替换:抓包篡改支付请求中的接口标识(如`pay_api_url`参数),将正规支付渠道(支付宝)替换为无效/虚假接口,导致“用户付款成功但平台订单未回调更新状态”,可二次利用订单漏洞。
Kerberos认证滥用(CVE-2025-33073):恶意构造SMB服务器,伪造Kerberos协议的`AP-REQ`票据;利用协议“子密钥管理缺陷”,生成高权限(SYSTEM级别)令牌,渗透控制支付系统服务器,接管核心交易逻辑。
3.2 攻击代码片段示例(支付接口替换)
# 攻击者抓包篡改请求示例(Python requests模拟)
import requests
# 原始支付请求(正确调用支付宝接口)
payload = {
"order_id": "123456",
"pay_api_url": "https://alipay.com/valid_pay",
"amount": 100
}
# 篡改接口为虚假地址
payload["pay_api_url"] = "https://attacker.com/fake_pay"
response = requests.post("https://target.com/pay", data=payload)
3.3 防护逻辑对比
错误场景(无防护) |
正确防护逻辑 |
接口地址直接暴露在前端/可被抓包篡改 |
服务端校验接口白名单+加密接口参数签名 |
未及时修复Kerberos协议已知漏洞(如CVE-2025-33073) |
定期更新协议补丁+启用“Kerberos票据完整性校验” |
4. 业务逻辑绕过
4.1 漏洞原理与技术细节
支付流程中业务规则设计缺陷,攻击者通过参数篡改或批量操作绕过校验:
越权支付:支付请求中用户标识(如`user_id`)未做服务端强校验,攻击者修改`user_id`为受害者ID,使“攻击者创建的订单”强制由“受害者账户扣款”。
库存占用攻击:利用“创建订单≠支付订单”的逻辑间隙,批量调用“创建订单”接口生成大量待支付订单,占用商品库存;正常用户因“库存不足”无法交易,攻击者可后续选择性支付/恶意挤兑。
4.2 攻击流程示意(越权支付)
4.3 防护逻辑对比
错误场景(无防护) |
正确防护逻辑 |
支付参数仅前端校验,服务端信任用户输入 |
服务端强校验:订单归属user_id与登录态严格绑定 |
库存占用无“超时释放”“高频创建限制” |
订单创建后N分钟未支付自动释放库存+限流高频创建请求 |
5. 交互劫持与社工结合
5.1 漏洞原理与技术细节
利用用户交互习惯与内部权限漏洞,结合前端页面劫持或内部人员违规实施攻击:
点击劫持(Clickjacking):构造透明`iframe`覆盖正常页面,诱导用户点击“看似无害按钮”(如“查看详情”),实际触发PayPal扣款、协议授权等高危操作;因操作由用户“主动点击”,易绕过简单校验。 (与csrf,xss漏洞结合使用)
内部权限滥用:支付系统内部人员(如银联费率审核岗)利用职权,篡改商户费率配置(将高费率商户标记为优惠类),使交易手续费差价流入个人账户;长期隐蔽操作形成资金沉淀(如案例中“三年敛财1900万” )。
5.2 攻击页面示例(点击劫持简化代码)
<!-- 攻击者构造的点击劫持页面 -->
<!DOCTYPE html>
<html>
<style>
/* 透明iframe覆盖目标支付按钮 */
iframe {
position: absolute;
opacity: 0.1;
z-index: 9999;
width: 300px;
height: 100px;
}
/* 诱导点击的虚假按钮 */
button {
position: absolute;
top: 50px;
left: 50px;
}
</style>
<body>
<!-- 嵌入目标支付页面 -->
<iframe src="https://target.com/pay"></iframe>
<!-- 诱导用户点击的虚假按钮 -->
<button>点击领取优惠</button>
</body>
</html>
5.3 防护逻辑对比
错误场景(无防护) |
正确防护逻辑 |
支付页面未设置`X-Frame-Options`头 |
服务端强制添加`X-Frame-Options: DENY`限制iframe嵌入 |
内部权限无“操作审计”“多岗复核” |
敏感操作(如费率修改)需双因子认证+全流程日志审计 |
四、典型攻击链分析
场景1:GSM嗅探+验证码劫持盗刷
特点:无接触、夜间作案、单次损失数万元。
场景2:支付参数篡改攻击
关键点:服务端未校验参数合法性。
场景3:内部风控漏洞利用(银联案例)
1. 权限滥用:审核岗将高利润商户违规归类至0.38%优惠费率。
2. 利益输送:支付机构(如杉德支付)以“培训费”名义行贿。
3. 技术防控失效:系统未监控高频费率变更操作。
总结
支付漏洞是多重技术缺陷叠加的产物:从用户端木马植入到服务端逻辑缺陷,再到通信层协议漏洞,每个环节均可能被突破。防御需覆盖全链路——强化认证刚性、业务逻辑闭环、数据加密传输、权限最小化四位一体,才能有效抵御日益精密的支付攻击。