逻辑漏洞挖掘思路
前言
在 Web 安全测试和 SRC 漏洞挖掘里,SQL 注入、XSS 这类特征型漏洞越来越少。WAF、代码检测工具、安全编码规范,能拦截绝大多数输入类漏洞。但逻辑漏洞没有统一 Payload,扫描器很难识别,也是近几年中高危漏洞的主要来源。
很多新人习惯拿着 Burp、Xray 跑扫描器,扫完就判定站点无漏洞。等到别人挖出越权、任意重置密码、金额篡改、重复领取优惠券这类高危逻辑洞,自己却一头雾水。
逻辑漏洞本质不是代码过滤不严,而是业务流程设计缺陷、权限信任错误、业务校验逻辑缺失。想要挖到逻辑漏洞,核心不是构造特殊字符,而是站在业务用户的角度,推演业务流程,寻找业务规则里的 “例外场景”。
免责声明:本文内容仅用于授权环境安全测试、网络安全学习。严禁在未获得书面授权的业务系统进行逻辑漏洞测试,任何未授权的探测、篡改操作均违反《网络安全法》,需要承担对应的法律责任。
0x01 什么是逻辑漏洞
简单一句话:程序代码语法没问题,但业务规则校验存在缺陷,攻击者可以按照业务正常流程,绕过限制,实现业务规则外的操作。
和注入、XSS 对比:
- 输入型漏洞:攻击依靠特殊字符、恶意 Payload,破坏代码执行逻辑;
- 逻辑漏洞:提交的数据格式合法,没有恶意字符,但是业务校验不完整,突破业务约束。
常见典型逻辑漏洞清单:
- 权限类:水平越权(BOLA)、垂直越权、未授权访问
- 账户类:任意用户密码重置、验证码绕过、验证码复用、短信轰炸
- 交易类:订单金额篡改、负数金额、重复支付、订单篡改
- 营销类:优惠券无限领取、积分无限刷、抽奖概率篡改、重复提交活动表单
- 业务流程类:支付状态篡改、订单取消逻辑缺陷、订单重复核销
重点:逻辑漏洞几乎无法依靠自动化扫描器发现,只能人工梳理业务流程挖掘。
0x02 逻辑漏洞通用挖掘方法论
2.1 第一步:梳理业务流程,画出业务链路
拿到目标站点,不要立刻抓包测试。优先注册普通账号,从头到尾完整走一遍业务,把业务步骤记录下来。
举几个例子:
- 密码找回:输入手机号 → 获取验证码 → 提交验证码 → 设置新密码
- 下单支付:选择商品 → 创建订单 → 提交订单 → 发起支付 → 支付回调 → 订单标记已支付
- 优惠券领取:登录账号 → 领取优惠券 → 优惠券入库,标记已领取
梳理的时候重点标记:
- 可控参数:前端传给后端的所有变量(用户 ID、订单 ID、手机号、金额、状态字段)
- 信任边界:哪些数据由前端传入,哪些由后端存储
- 身份校验节点:每一步是否校验用户身份
- 状态流转:业务状态之间的切换规则(待支付、已支付、已取消、已核销)
核心原则:永远不要信任前端传递的任何数据。前端传过来的订单金额、用户 ID、订单状态,都不能作为后端可信依据。
2.2 第二步:角色划分,多账号对照测试
逻辑漏洞测试,至少准备两个普通账号 A、B,最好再加管理员账号。
- A 账号:正常操作,抓包,记录请求参数;
- B 账号:尝试复用 A 的参数,看是否能访问 A 的数据(水平越权);
- 普通账号尝试访问管理员接口 / 管理员数据(垂直越权)。
这是发现越权漏洞最简单有效的手段,也是 SRC 最高频的高危漏洞。
2.3 第三步:思考 “业务规则限制”,尝试绕过限制
每一个业务功能,都有业务限制,我们的目标就是思考:怎么在不破坏数据包格式的前提下,绕过这个限制。
通用思考问题清单(测试时逐个对照):
- 是否限制只能操作自己的数据?修改 ID 能不能访问别人的数据?
- 是否有次数限制(领券只能领 1 次,验证码 1 分钟 1 条),能不能绕过次数限制?
- 状态机是否严格校验?能不能直接修改状态参数,跳过前置步骤?
- 价格、数量这类敏感数据,前端传参,后端有没有二次校验?
- 业务依赖的凭证(验证码、订单号)是否一次性,是否可以重复使用?
- 支付、核销这类关键动作,有没有防重放机制?同一个请求能不能重复提交?
- 业务逻辑有没有顺序依赖?能不能跳过中间步骤,直接访问最后一步接口?
2.4 第四步:参数篡改与状态篡改
业务接口大量使用状态字段,例如:is_pay=0、status=unpaid、is_receive=0。
很多开发图省事,直接使用前端传入的 status 作为业务判断依据。
示例场景:
下单接口返回is_pay:0代表未支付,修改数据包is_pay:1提交,后端直接判定订单已支付,完成业务下发。
风险:这种漏洞直接造成资金损失,属于高危。
还有数字参数测试思路:
- 修改为 0、负数、超大数字、空值、特殊编号
例如:商品购买数量,传入num=-1,部分系统会出现库存增加。
2.5 第五步:请求重放、重复提交测试
同一个业务请求,多次重复发送,测试是否有幂等控制。
适用场景:
- 提交订单
- 领取优惠券
- 积分兑换
- 核销码核销
抓包拿到正常请求包,不断点击 Repeater 重放。
如果没有唯一订单号、随机防重 token,就会出现重复领取、多次核销的逻辑缺陷。
2.6 第六步:流程顺序打乱测试(业务状态机漏洞)
业务流程是有顺序的:A→B→C→D。
尝试跳过前面步骤,直接请求 D 接口。
举例:
密码重置流程:手机号→发送验证码→校验验证码→重置密码。
直接访问重置密码接口,不带验证码,或者直接提交新密码。
如果后端没有校验前面步骤,直接重置密码,造成任意密码重置。
0x03 各类逻辑漏洞细分测试思路
3.1 权限类漏洞(最容易挖到,优先级最高)
水平越权 BOLA
场景:A 和 B 都是普通用户,A 修改请求里的 orderId=B 的订单编号,读取 / 修改 B 的数据。
测试步骤:
- A 账号查询自己订单,抓包,拿到 orderId;
- 登录 B 账号,拿到 B 的 orderId;
- A 账号的请求包,把 orderId 替换为 B 的订单 ID,发送;
- 判断是否返回 B 的订单、手机号、地址等敏感信息。
很多开发只校验登录 Token 是否有效,没有校验资源归属关系,这就是 BOLA 的根源。
垂直越权
普通用户,尝试调用管理员接口,新增用户、删除数据、查看后台全部数据。
测试思路:
- 管理员操作接口抓包,记录接口路径与参数;
- 使用普通用户 Cookie/Token,直接请求该接口;
- 看是否成功执行管理员操作。
未授权访问
无需登录 Token,直接访问接口,读取数据,不需要任何账号。
3.2 验证码类逻辑漏洞
验证码是逻辑漏洞重灾区,常见几类:
- 验证码可复用:验证码校验一次成功后,还能继续使用,多次提交;
- 验证码回显:接口直接把验证码明文返回在响应包;
- 前端校验验证码,后端不校验;
- 验证码无频率限制:短信轰炸;
- 手机号参数可控,可给任意手机号发送重置验证码,实现任意账号密码重置。
测试方法:
- 获取验证码,提交验证成功;再次使用同一个验证码提交;
- 抓包看响应,检查验证码是否直接返回;
- 删除验证码参数,直接提交;
- 修改手机号参数,测试是否可以给他人手机号下发验证码。
3.3 支付 / 订单交易逻辑漏洞(高危)
交易类逻辑漏洞,危害极高,测试重点:
- 金额由前端传递,后端没有校验商品真实价格;修改 price 参数低价购买高价商品;
- 支付回调伪造:攻击者模拟支付平台回调,直接修改订单状态为已支付;
- 重复下单、重复扣款、重复发货;
- 负数金额,充值负数,余额增加;
- 订单取消逻辑缺陷:取消订单后,商品库存没有回滚。
重点提醒:支付相关测试,在 SRC 或者授权测试环境操作,严禁在真实生产环境测试支付逻辑,极易产生资金纠纷。
3.4 营销活动逻辑漏洞
优惠券、抽奖、积分活动,开发往往安全意识薄弱,漏洞很多:
- 仅前端限制每人领一张,后端不校验,可批量领取;
- 可修改用户 ID,为其他用户领取优惠券;
- 抽奖接口的中奖概率、奖项由前端返回,篡改参数直接中大奖;
- 积分兑换,重复提交兑换请求,无限刷积分。
3.5 业务信息泄露类逻辑漏洞
接口根据 ID 遍历用户数据,例如用户 id 自增,循环请求接口批量拿到所有用户手机号、个人信息。本质属于水平越权衍生漏洞。
0x04 挖掘逻辑漏洞的通用测试 Payload 思路
逻辑漏洞没有传统注入 Payload,但有一套通用测试参数思路:
- 修改 ID 类参数:id、userId、orderId、couponId;替换为其他用户编号;
- 修改布尔状态:true ↔ false,1 ↔ 0;
- 传空值:参数删除、空字符串;
- 数字边界:负数、0、极大值;
- 重复提交:Repeater 多次重放同一请求;
- 删除关键参数:删掉验证码、token、sign 签名,观察后端处理;
- 调换参数位置,参数污染;
- 跳过前置接口,直接调用后续接口。
0x05 逻辑漏洞取证要点(SRC 提交必备)
逻辑漏洞经常因为取证不足被审核驳回,取证一定要包含:
- 两个账号的身份凭证,区分 A、B 账号;
- 完整 HTTP 请求 + 响应包,Burp 原始数据包;
- 完整复现录屏,完整展示操作全过程;
- 漏洞影响范围评估:能操作哪些数据,影响多少用户;
- 漏洞原理分析:后端缺少哪一层校验;
- 修复方案 + 临时缓解方案。
示例修复思路(越权):
问题:接口只校验登录态,未校验资源归属。
修复方案:后端查询订单时,同时查询订单对应的 user_id,和当前登录用户 id 对比,不一致直接拒绝访问,禁止仅依靠前端传入的 orderId 查询数据。
0x06 高频踩坑误区
❌误区 1:逻辑漏洞可以靠扫描器扫出来
扫描器只能识别特征,无法理解业务流程,绝大多数逻辑漏洞只能人工挖掘。
❌误区 2:只要返回 403 就是不存在越权
部分接口只拦截浏览器访问,使用接口请求可以绕过;也可以更换请求方法 GET/POST 尝试。
❌误区 3:修改前端页面 JS 变量就算漏洞
单纯前端页面展示修改,没有后端生效,不属于漏洞;必须后端业务状态发生变化才算有效漏洞。
❌误区 4:测试逻辑漏洞只改 ID,忽略状态机、重复提交
越权只是逻辑漏洞其中一类,重复领取、回调伪造这类漏洞价值同样很高。
❌误区 5:忽略业务幂等性
很多开发只考虑单次正常操作,不考虑重复请求,重放类逻辑洞经常被忽略。
0x07 标准化逻辑漏洞测试流程
- 注册多账号,完整走通整套业务流程,梳理业务状态流转;
- 标记所有可控参数,区分前端传入参数和后端可信数据;
- 基础测试:修改 ID、状态、数字参数,测试水平 / 垂直越权;
- 流程测试:跳过业务步骤、打乱业务顺序;
- 重放测试:重复提交请求,检查幂等与次数限制;
- 验证码、签名、回调接口单独测试;
- 漏洞验证,确认后端业务逻辑确实被篡改;
- 录屏、保存数据包,整理漏洞报告;
- 复测,确认漏洞稳定复现。
0x08 防御方案(防守视角)
- 后端校验为唯一可信源,所有敏感数据不能依赖前端传入;价格、权限、资源归属,全部后端查询数据库校验;
- 严格资源归属校验:任何查询、修改接口,必须校验操作人是否属于资源所有者;
- 业务状态机强校验:业务流转不能跳过步骤,每一步校验前置条件;
- 接口增加幂等控制,使用唯一业务流水号,防止重复提交;
- 验证码一次性使用,校验成功后立刻失效;增加发送频率限制;
- 敏感接口增加签名机制,参数防篡改、防重放;
- 最小权限原则,区分普通用户与管理员接口,管理员接口增加 IP 限制、二次认证;
- 日志审计:记录关键业务操作,订单修改、密码重置、大额操作留存日志。
总结
逻辑漏洞挖掘,考验的不是构造 Payload 的能力,而是对业务流程的理解能力。
核心思想:站在开发者和攻击者双重角度,寻找业务规则里的例外场景,寻找校验缺失的环节。
注入、XSS 是攻击代码;逻辑漏洞是攻击业务规则。随着基础安全不断完善,逻辑漏洞会成为 Web 安全测试、SRC 挖洞的主要方向。
日常练习不要只刷注入 XSS 靶场,多去分析各类业务系统,思考业务限制,多账号对照测试,慢慢养成业务推演的思维。
一句话记住:所有逻辑漏洞的根源,都是后端过度信任前端可控数据,缺少完备的业务校验。
最后
关于网络安全技术储备
网络安全是当今信息时代中非常重要的一环。无论是找工作还是感兴趣(黑客),都是未来职业选择中上上之选,为了保护自己的网络安全,学习网络安全知识是必不可少的。
如果你是准备学习网络安全(黑客)或者正在学习,下面这些你应该能用得上:
①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析
一、网络安全(黑客)学习路线
网络安全(黑客)学习路线,形成网络安全领域所有的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、网络安全教程视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
三、网络安全CTF实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这里带来的是CTF&SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~
四、网络安全面试题
最后,我们所有的作为都是为就业服务的,所以关键的临门一脚就是咱们的面试题内容,所以面试题板块是咱们不可或缺的部分,这里我给大家准备的就是我在面试期间准备的资料。
网安其实不难,难的是坚持和相信自己,我的经验是既然已经选定网安你就要相信它,相信它能成为你日后进阶的高效渠道,这样自己才会更有信念去学习,才能在碰到困难的时候坚持下去。
机会属于有准备的人,这是一个实力的时代。人和人之间的差距不在于智商,而在于如何利用业余时间,只要你想学习,什么时候开始都不晚,不要担心这担心那,你只需努力,剩下的交给时间!
这份完整版的网络安全学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】