业务视角下的金融SRC快速挖掘思路
字数 2992 2025-12-24 12:07:55

金融SRC漏洞挖掘实战教学文档

1. 注册开户场景漏洞挖掘

1.1 绕过信息校验开户

漏洞原理:前端进行格式校验但后端未严格验证必填字段

  • 手机号、邮箱、身份证号等字段仅在前端进行正则格式校验
  • 后端处理逻辑:只处理传入的字段,不强制要求所有字段都必须存在
  • 可选填字段(如推荐码)的存在导致验证逻辑不完整

攻击方法

  1. 拦截开户请求数据包
  2. 移除手机号相关字段(如mobile、phone等参数)
  3. 重放请求,观察是否成功开户

检测要点

  • 检查请求参数中是否存在非必填字段
  • 尝试删除必填字段观察后端响应
  • 验证后端是否真正进行了完整的字段校验

1.2 KYC信息复用伪造

漏洞原理:已认证资料可重复用于注册新账户

  • 系统对证件信息进行统一化处理、SDK加签后存储
  • 后端为节省资源,优先查询缓存数据库结果
  • 同一套认证资料可被多个账户重复使用

攻击流程

  1. 正常上传身份证正反面、人脸信息
  2. 获取返回的加密filekey
  3. 使用相同资料尝试注册第二个账户
  4. 观察系统是否检测到资料重复使用

关键API接口特征

POST /api/upload/identity
Content-Type: multipart/form-data

响应包含:{"filekey": "encrypted_filename"}

1.3 申请状态查询越权

漏洞原理:查询接口缺乏权限控制

  • 申请状态查询接口使用可预测的参数(id、orderNo、ticketId、userId)
  • 未验证当前用户是否有权查询指定资源

攻击方法

  1. 找到状态查询接口(如"/api/application/status")
  2. 修改request_id、order_no等参数
  3. 重放请求获取其他用户敏感信息
  4. 使用自动化脚本遍历可预测ID

敏感信息提取

  • 手机号码、身份证号、银行卡信息
  • 用户个人信息、账户余额等

2. 支付场景漏洞挖掘

2.1 高并发下单/提现

漏洞原理:缺乏分布式锁导致重复操作

  • 后端未对关键操作加锁控制
  • 高并发请求可绕过业务限制

攻击步骤

  1. 使用Burp Suite快速提交多次请求(1秒内多次请求)
  2. 观察是否创建多笔相同订单
  3. 验证资金是否被重复扣除或增加

检测工具配置

  • Burp Intruder:Turbo模式,高并发请求
  • 自定义脚本:模拟多线程并发操作

2.2 负值反冲

漏洞原理:金额参数可为负值

  • 支付/退款接口未校验金额必须为正数
  • 传入负值导致账户余额异常增加

攻击方法

POST /api/transfer
{"amount": -1000, "to_account": "xxx"}
  • 修改amount为负值
  • 观察账户余额变化

关键校验点

  • 金额参数是否允许为负数
  • 后端是否有正数校验逻辑

2.3 int64金额溢出

漏洞原理:大数值计算导致整数溢出

  • 金融计算涉及金额×精度(×10000或×100000)
  • int64最大范围:9.22×10¹⁸
  • 超大数值乘倍率后溢出变成负数或小数值

漏洞代码示例

repayAmount := precision.ConvertAmountByBase(
    bo.RepayAmount.String(),
    eaBo.MoneyMultiBase, // 可能为100000
)

攻击载荷

  • 传入极大数值:9999999999999999999
  • 观察计算后金额是否变为异常值

2.4 篡改参数免手续费

漏洞原理:手续费计算参数可被篡改

  • 转账涉及多个计算参数(渠道、汇率、活动ID等)
  • 特定参数组合可绕过手续费计算

攻击方法

  1. 分析转账接口参数结构
  2. 尝试修改campaign_id、fee_waived_amount等参数
  3. 特别关注值为0的参数情况

关键代码逻辑

if remittanceTicketReq.GetFeeWaivedAmount() != 0 {
    if remittanceTicketReq.GetCampaignId() == "" {
        return common.ErrWalletInvalidRequestParam
    }
}

3. 优惠券场景漏洞挖掘

3.1 优惠券码爆破

漏洞原理:优惠券码可预测且无限次尝试

  • 券码未采用加密或随机化生成
  • 缺乏网关限流保护

攻击方法

  1. 收集优惠券码模式(长度、字符集)
  2. 使用Intruder进行高并发遍历
  3. 根据响应差异判断券码有效性

响应差异分析

  • 存在券码:响应长度820/819字节
  • 不存在券码:响应长度798字节

3.2 优惠券无锁重复领取

漏洞原理:并发环境下缺乏锁机制

安全代码示例(加锁):

func applyCouponWithLock(amount float64) float64 {
    coupon.mu.Lock()
    defer coupon.mu.Unlock()
    
    discounted := amount - coupon.Discount
    coupon.UsageCount++
    return discounted
}

漏洞代码示例(无锁):

func applyCoupon(amount float64) float64 {
    discounted := amount - coupon.Discount
    atomic.AddInt64(&coupon.UsageCount, 1)
    return discounted
}

攻击验证:高并发请求优惠券领取接口

3.3 优惠券叠加使用

漏洞原理:互斥优惠券可同时使用

  • 系统未校验优惠券之间的互斥关系
  • 单笔订单可使用多张本应限用的优惠券

测试步骤

  1. 获取多张优惠券
  2. 单次交易中尝试同时使用
  3. 观察折扣是否叠加计算

4. 信息查询场景漏洞挖掘

4.1 越权查询敏感信息

漏洞原理:权限校验不完善

简单越权

  • 直接修改order_id、user_id等参数
  • 水平越权访问他人数据

复杂越权

  • 接口支持多种参数查询方式
  • 正常使用token中的uid,但支持post传入userid覆盖

Fuzz测试方法

  1. 收集历史返回包中的参数名(userphone、uid、role等)
  2. 组成字典进行参数fuzz
  3. 发现隐藏的查询参数

4.2 Toc&ToB网关配置错误

漏洞原理:gRPC+Gateway架构权限配置错误

攻击流程

  1. 导出管理端(a.com)的Burp历史记录
  2. 使用脚本处理为CSV格式
  3. 在用户端(b.com)测试管理接口

数据处理脚本

import xml.etree.ElementTree as ET
import base64, csv

# XML解析和Base64解码
request_data = base64.b64decode(request_element.text).decode("utf-8")
header_body_split = request_data.split("\r\n\r\n", 1)

Intruder配置

  • 模式:Pitchfork
  • Payload encoding取消勾选
  • 多参数同时测试

5. 资源存储场景漏洞挖掘

5.1 合同资料遍历

漏洞原理:文件路径可预测

  • 路径模式:/docs/contract/2025/ID_0001.pdf
  • 缺乏访问权限控制

攻击方法

  • 爆破ID:0001-9999
  • 增量遍历时间目录(2024/2025/2026)
  • 批量下载敏感文件

5.2 S3存储桶配置不当

漏洞原理:云存储权限设置为Public Read

检测工具

  • https://github.com/dark-kingA/cloudTools
  • AWS CLI:aws s3 ls s3://bucket-name/

敏感文件类型

  • 合同文档、财务报表
  • 用户身份证扫描件
  • 内部系统配置文件

5.3 SSRF及绕过

漏洞原理:外部URL请求功能可被利用

白名单绕过技术

  • 域名前缀匹配:evil.example.com.white.com
  • URL编码、特殊字符
  • HTTP重定向绕过

攻击验证

  1. 使用DNSLog平台生成测试域名
  2. 尝试各种绕过技巧
  3. 观察DNS解析记录

6. 第三方厂商相关漏洞

6.1 JWT/密码硬编码

漏洞原理:默认配置未修改

  • 初始化的appid、jwttoken密钥保持默认值
  • 攻击者可伪造任意用户Token

检测方法

  • 检查JWT签名算法
  • 尝试使用常见默认密钥签名
  • 验证Token伪造可能性

6.2 运维后门

漏洞原理:外部URL获取敏感信息

常见后门模式

curl http://password.example.com/db-prod-pass
wget http://x.x.x.x/getKey?env=prod

检测要点

  • 监控外部网络请求
  • 检查代码中的硬编码URL
  • 分析SSO接口的权限控制

7. 漏洞挖掘方法论

7.1 业务逻辑分析

  • 深入理解资金流转规则
  • 分析风控策略和账户体系
  • 识别业务链路的关键节点

7.2 测试优先级

  1. 资金相关操作(支付、转账、提现)
  2. 用户敏感信息查询
  3. 身份认证和授权机制
  4. 文件存储和访问控制

7.3 自动化检测

  • 定制化脚本针对特定业务逻辑
  • Burp插件开发辅助测试
  • 持续监控和回归测试

8. 防御建议

8.1 技术层面

  • 实施完整的参数校验机制
  • 关键操作添加分布式锁
  • 使用decimal类型处理金融计算
  • 实施最小权限原则

8.2 流程层面

  • 安全开发生命周期管理
  • 第三方组件安全评估
  • 定期安全审计和渗透测试

本教学文档涵盖了金融SRC漏洞挖掘的完整知识体系,重点突出了业务逻辑漏洞的识别和利用技巧,为安全测试人员提供实用的方法论指导。

金融SRC漏洞挖掘实战教学文档 1. 注册开户场景漏洞挖掘 1.1 绕过信息校验开户 漏洞原理 :前端进行格式校验但后端未严格验证必填字段 手机号、邮箱、身份证号等字段仅在前端进行正则格式校验 后端处理逻辑:只处理传入的字段,不强制要求所有字段都必须存在 可选填字段(如推荐码)的存在导致验证逻辑不完整 攻击方法 : 拦截开户请求数据包 移除手机号相关字段(如mobile、phone等参数) 重放请求,观察是否成功开户 检测要点 : 检查请求参数中是否存在非必填字段 尝试删除必填字段观察后端响应 验证后端是否真正进行了完整的字段校验 1.2 KYC信息复用伪造 漏洞原理 :已认证资料可重复用于注册新账户 系统对证件信息进行统一化处理、SDK加签后存储 后端为节省资源,优先查询缓存数据库结果 同一套认证资料可被多个账户重复使用 攻击流程 : 正常上传身份证正反面、人脸信息 获取返回的加密filekey 使用相同资料尝试注册第二个账户 观察系统是否检测到资料重复使用 关键API接口特征 : 1.3 申请状态查询越权 漏洞原理 :查询接口缺乏权限控制 申请状态查询接口使用可预测的参数(id、orderNo、ticketId、userId) 未验证当前用户是否有权查询指定资源 攻击方法 : 找到状态查询接口(如"/api/application/status") 修改request_ id、order_ no等参数 重放请求获取其他用户敏感信息 使用自动化脚本遍历可预测ID 敏感信息提取 : 手机号码、身份证号、银行卡信息 用户个人信息、账户余额等 2. 支付场景漏洞挖掘 2.1 高并发下单/提现 漏洞原理 :缺乏分布式锁导致重复操作 后端未对关键操作加锁控制 高并发请求可绕过业务限制 攻击步骤 : 使用Burp Suite快速提交多次请求(1秒内多次请求) 观察是否创建多笔相同订单 验证资金是否被重复扣除或增加 检测工具配置 : Burp Intruder:Turbo模式,高并发请求 自定义脚本:模拟多线程并发操作 2.2 负值反冲 漏洞原理 :金额参数可为负值 支付/退款接口未校验金额必须为正数 传入负值导致账户余额异常增加 攻击方法 : 修改amount为负值 观察账户余额变化 关键校验点 : 金额参数是否允许为负数 后端是否有正数校验逻辑 2.3 int64金额溢出 漏洞原理 :大数值计算导致整数溢出 金融计算涉及金额×精度(×10000或×100000) int64最大范围:9.22×10¹⁸ 超大数值乘倍率后溢出变成负数或小数值 漏洞代码示例 : 攻击载荷 : 传入极大数值:9999999999999999999 观察计算后金额是否变为异常值 2.4 篡改参数免手续费 漏洞原理 :手续费计算参数可被篡改 转账涉及多个计算参数(渠道、汇率、活动ID等) 特定参数组合可绕过手续费计算 攻击方法 : 分析转账接口参数结构 尝试修改campaign_ id、fee_ waived_ amount等参数 特别关注值为0的参数情况 关键代码逻辑 : 3. 优惠券场景漏洞挖掘 3.1 优惠券码爆破 漏洞原理 :优惠券码可预测且无限次尝试 券码未采用加密或随机化生成 缺乏网关限流保护 攻击方法 : 收集优惠券码模式(长度、字符集) 使用Intruder进行高并发遍历 根据响应差异判断券码有效性 响应差异分析 : 存在券码:响应长度820/819字节 不存在券码:响应长度798字节 3.2 优惠券无锁重复领取 漏洞原理 :并发环境下缺乏锁机制 安全代码示例 (加锁): 漏洞代码示例 (无锁): 攻击验证 :高并发请求优惠券领取接口 3.3 优惠券叠加使用 漏洞原理 :互斥优惠券可同时使用 系统未校验优惠券之间的互斥关系 单笔订单可使用多张本应限用的优惠券 测试步骤 : 获取多张优惠券 单次交易中尝试同时使用 观察折扣是否叠加计算 4. 信息查询场景漏洞挖掘 4.1 越权查询敏感信息 漏洞原理 :权限校验不完善 简单越权 : 直接修改order_ id、user_ id等参数 水平越权访问他人数据 复杂越权 : 接口支持多种参数查询方式 正常使用token中的uid,但支持post传入userid覆盖 Fuzz测试方法 : 收集历史返回包中的参数名(userphone、uid、role等) 组成字典进行参数fuzz 发现隐藏的查询参数 4.2 Toc&ToB网关配置错误 漏洞原理 :gRPC+Gateway架构权限配置错误 攻击流程 : 导出管理端(a.com)的Burp历史记录 使用脚本处理为CSV格式 在用户端(b.com)测试管理接口 数据处理脚本 : Intruder配置 : 模式:Pitchfork Payload encoding取消勾选 多参数同时测试 5. 资源存储场景漏洞挖掘 5.1 合同资料遍历 漏洞原理 :文件路径可预测 路径模式: /docs/contract/2025/ID_0001.pdf 缺乏访问权限控制 攻击方法 : 爆破ID:0001-9999 增量遍历时间目录(2024/2025/2026) 批量下载敏感文件 5.2 S3存储桶配置不当 漏洞原理 :云存储权限设置为Public Read 检测工具 : https://github.com/dark-kingA/cloudTools AWS CLI:aws s3 ls s3://bucket-name/ 敏感文件类型 : 合同文档、财务报表 用户身份证扫描件 内部系统配置文件 5.3 SSRF及绕过 漏洞原理 :外部URL请求功能可被利用 白名单绕过技术 : 域名前缀匹配:evil.example.com.white.com URL编码、特殊字符 HTTP重定向绕过 攻击验证 : 使用DNSLog平台生成测试域名 尝试各种绕过技巧 观察DNS解析记录 6. 第三方厂商相关漏洞 6.1 JWT/密码硬编码 漏洞原理 :默认配置未修改 初始化的appid、jwttoken密钥保持默认值 攻击者可伪造任意用户Token 检测方法 : 检查JWT签名算法 尝试使用常见默认密钥签名 验证Token伪造可能性 6.2 运维后门 漏洞原理 :外部URL获取敏感信息 常见后门模式 : 检测要点 : 监控外部网络请求 检查代码中的硬编码URL 分析SSO接口的权限控制 7. 漏洞挖掘方法论 7.1 业务逻辑分析 深入理解资金流转规则 分析风控策略和账户体系 识别业务链路的关键节点 7.2 测试优先级 资金相关操作(支付、转账、提现) 用户敏感信息查询 身份认证和授权机制 文件存储和访问控制 7.3 自动化检测 定制化脚本针对特定业务逻辑 Burp插件开发辅助测试 持续监控和回归测试 8. 防御建议 8.1 技术层面 实施完整的参数校验机制 关键操作添加分布式锁 使用decimal类型处理金融计算 实施最小权限原则 8.2 流程层面 安全开发生命周期管理 第三方组件安全评估 定期安全审计和渗透测试 本教学文档涵盖了金融SRC漏洞挖掘的完整知识体系,重点突出了业务逻辑漏洞的识别和利用技巧,为安全测试人员提供实用的方法论指导。