逻辑漏洞这个方向,我接触了差不多六年。带过不少新人,也面试过很多自称“会挖洞”的候选人。我的感受是:传统Web漏洞(SQL注入、XSS)其实有固定模板,初中生照着工具也能“打穿”,但逻辑漏洞完全不一样——它考验的不是你会不会用工具,而是你有没有“攻击者思维”。很多人在这一步就卡住了,学了很久还是只会对着Burp Suite发呆,不知道怎么下手。
这篇文章专门写给零基础想学逻辑漏洞的人,不讲虚的,只讲我怎么搭学习路径、用什么靶场、每一步练什么、踩过哪些坑。你不需要懂很深的技术,只要会装软件、会用浏览器,跟着这篇文章走,三个月左右可以摸到门。
1. 逻辑漏洞到底是什么——先建立正确的认知框架
1.1 逻辑漏洞和传统Web漏洞的本质区别
传统Web漏洞的根源是“代码写错了”,逻辑漏洞的根源是“业务设计想当然了”。这话怎么理解?SQL注入是因为开发者没过滤用户输入,直接拼接了SQL语句,这是开发层面的失误。而逻辑漏洞是:开发者默认“用户不会修改价格”“用户不会重复提交”“用户会老老实实按流程走”,于是代码里压根没校验这些点,或者校验得不够。攻击者没用什么高深技术,只是“不按套路出牌”,业务系统就崩了。
举个例子。一个购物网站的商品价格放在前端的hidden input里,结算时直接提交这个价格。开发者觉得“隐藏了就安全”,但攻击者用Burp Suite抓包,把这个字段从100改成1,提交后系统真的按1块钱结算了。你说这是代码漏洞吗?算,但根子在于业务逻辑假设错误——假设用户看不到隐藏字段、假设用户不会篡改请求。
所以逻辑漏洞最大的特点是:每一个漏洞都跟具体的业务绑定。同样的代码逻辑,放在订单系统里能刷单,放在积分系统里能套现,放在登录系统里可能只是账号锁定。这也是为什么逻辑漏洞“难学”:你不仅要懂技术,还要懂业务。
1.2 逻辑漏洞的常见分类(以学习路径为坐标)
我建议零基础的人不要一开始就漫无目的地找漏洞,先按分类把常见类型过一遍。分类就是你的学习地图。
| 分类 | 典型场景 | 核心思路 |
|---|---|---|
| 越权类 | 水平越权(看别人订单)、垂直越权(普通用户用管理员接口) | 找“对象ID”和“权限标识”是否分离 |
| 支付逻辑类 | 改价格、改数量、负数金额、优惠券套现 | 找“金额/价格”是否由服务端信任 |
| 验证码/短信类 | 短信轰炸、验证码绕过、验证码不失效 | 找“验证码校验点”和“业务动作”是否解耦 |
| 流程类 | 跳过支付直接下单、跳过实名认证 | 找“流程步骤”是否强制串行 |
| 接口滥用类 | 接口被刷、并发调用、竞态条件 | 找“资源消耗动作”是否有频率/次数限制 |
| 密码找回类 | 撞库、验证码返回在响应包、修改用户名密码 | 找“身份凭证”是否可预测/可篡改 |
这六大类基本覆盖了90%的业务逻辑漏洞。你按这个顺序学,每学一类,就去靶场找对应的题目练手。
1.3 为什么说“零基础学逻辑漏洞”是可行的
零基础学逻辑漏洞,最大的障碍不是技术,是心态。很多人觉得自己连HTTP协议都不懂,怎么可能搞定逻辑漏洞?但反过来想:逻辑漏洞恰恰是最不依赖底层技术的漏洞类型。你看SQL注入,你得懂数据库语法;看反序列化,你得懂编程语言特性。而逻辑漏洞只要你会“像正常人一样用网站”,然后反着来就行。
我认识一个做这块的朋友,大学专业是市场营销,代码只写过简单的HTML。他花了四个月,靠的完全是Burp Suite和PortSwigger靶场,现在已经能独立做授权范围内的业务逻辑测试。他的路径跟我在下面写的几乎一样。
当然,零基础也要有个底线:得理解Web是怎么运转的。好在你不需要成为HTTP专家,只需要知道浏览器发请求给服务器,服务器返回响应,中间Cookie和Session用来记住你是谁,这就够了。这部分花一周时间补,足够了。
2. 零基础起步:需要的最低技术底座与工具链条
2.1 最低技术底座:HTTP协议、Web基础、Burp Suite
学逻辑漏洞,工具其实只要一个Burp Suite就够。有人喜欢用Charles、Fiddler,但在Web测试这块,Burp Suite的生态和资料是最全的。你后面所有操作都围绕它展开。
但工具之前,先补三个基础概念:
- HTTP请求与响应:你要能看懂一个POST请求里有哪些东西——URL、Method、Headers、Body。响应里的状态码、Location、Set-Cookie是常看的点。
- Cookie与Session:服务端靠Session记住登录状态,Cookie里往往存着session_id或者用户信息。逻辑漏洞里常见的“越权”就发生在:服务端只靠Cookie里的用户标识来判断身份,而没校验这个标识是否属于当前登录用户。
- 前端与后端的分工:前端传参数、发请求,后端做校验、存数据。逻辑漏洞的核心就是“后端做了哪些本该做但没做的校验”。
补基础有个最直接的办法:打开Burp Suite的Proxy拦截功能,随便找一个网站,登录、下单、退出,全程看一遍请求包和响应包,看十遍你就懂了。浏览器里看到的是表面,Burp里看到的是本质。
2.2 工具链推荐:从Burp Suite到靶场
我推荐的工具链非常精简,就四样:
- Burp Suite Community Edition(社区版):免费,够用。主要用到Proxy(抓包改包)、Repeater(重放)、Intruder(爆破/枚举)这三个模块。
- PortSwigger Web Security Academy(在线靶场):免费注册,有专门的Business logic vulnerabilities模块,场景贴近真实业务,而且自带教程。
- 一个本地Web服务器环境:可以是Docker,也可以直接装一个phpstudy/xampp,用来跑DVWA或者自己写的测试小站。
- HackTricks或类似知识库:查checklist用,用来提醒自己“同类漏洞还有哪些变体”。
为什么我把在线靶场放在比本地靶场更优先的位置?因为逻辑漏洞依赖业务场景,DVWA这种经典靶场偏向注入和XSS,它的逻辑漏洞题目少且老。PortSwigger的逻辑漏洞题目是模拟真实电商、社交等业务流程的,练起来更有感觉。
2.3 环境搭建:搭建本地实验环境的具体步骤
在线靶场固然好,但本地环境可以让你随意改、随意造漏洞,练完一个流程还能重来。我的建议是两者都搭:在线靶场用于系统训练,本地环境用于自由实验。
本地环境我目前用的是Docker方案,步骤很简单:
- 安装Docker。
- 拉取DVWA镜像并启动:
DVWA里虽然逻辑漏洞不多,但它有一个View Source功能,适合新手同时看“前端校验”和“后端逻辑”的区别——这点对你理解逻辑漏洞极有帮助。docker run -d -p 80:80 vulnerables/web-dvwa - 如果你还想练更贴近真实业务的逻辑漏洞,可以在GitHub上搜“漏洞靶场”,有一些开源项目模拟了商城系统、金融系统、CMS后台。挑一个带订单和支付流程的,装好后自己写一个“测试方案”,比如:把价格改成负数、重复提交订单、删掉验证码参数再提交,看看系统怎么反应。
搭环境这件事,踩坑最多的是代理配置。我简单说下:Burp Suite默认监听127.0.0.1:8080,浏览器要用FoxyProxy之类插件把流量代理到8080。另外记得在浏览器里访问http://burp下载CA证书并导入信任,否则HTTPS站点会报证书错误,什么都抓不到。这一步初级教程里都有,但真到了实操,十个人里有三个人卡在证书上。我建议你装好Burp之后,第一步就访问一个正经HTTPS网站,把所有网络请求都抓到再开始学。
3. 学习方法论:从“看漏洞报告”到“独立挖逻辑漏洞”的进阶路线
3.1 第一阶段:读懂漏洞报告,建立“攻击者思维”
这一阶段的目标不是自己挖漏洞,而是看懂别人怎么挖。漏洞报告去哪里看?各大SRC(漏洞响应平台)的公开漏洞、安全社区里的Writeup、公众号里的技术文。我不具体列平台了,搜“支付漏洞”“越权漏洞”“逻辑漏洞案例”就能搜到大量。
怎么看一份漏洞报告?我自己的方法分四步:
- 第一步:看漏洞类型,它属于1.2节里的哪一类。
- 第二步:看复现步骤,把每一步记下来,尤其注意攻击者在哪些请求包里改了哪些参数。
- 第三步:闭上报告,自己打开一个类似业务(比如淘宝买个低价商品、注册个账号走一遍找回密码流程),用Burp复现一遍同样的思路,哪怕最后没漏洞,过程也值了。
- 第四步:问自己三个问题——开发者当时为什么没想到?这个漏洞如果修,最简单的方法是什么?如果修了,还有没有变体绕过?
这四步走下来,你才算真正消化了一份报告。我见过很多人收藏了三百篇漏洞报告,问他“讲讲这个漏洞怎么挖”,他只会念原文,这不算会。
3.2 第二阶段:业务流程拆解训练(订单、支付、优惠券等)
第二阶段的核心是“把业务当代码读”。任何一个业务功能,都有输入、处理、输出三个环节。逻辑漏洞往往藏在“处理”环节的错误假设里。
我拿支付流程举例。一个标准流程是:
- 用户把商品加入购物车;
- 后端返回商品价格,前端展示订单确认页;
- 用户点击“提交订单”,前端把商品ID、数量、价格一起POST给后端;
- 后端计算总价,生成订单;
- 用户点击“支付”,跳转支付网关。
你说这个流程里,哪些环节值得怀疑?
至少有两个:第3步,“价格”这个参数是不是前端传过去的?如果是,我改成1行不行?第5步,“支付成功回调”这个接口是不是后端主动查询的?如果服务端信任回调结果而不校验订单金额,我伪造一个回调行不行?
训练方法:拿任何一个真实网站,走一遍完整流程,把每一步的请求和响应截图记录下来。然后刻意“违反流程”——跳过某一步、把请求重放一次、把参数改成异常值。你不用真的去攻击线上系统,在你自己搭的靶场里做就可以了。关键是要养成“每个接口都问问‘如果用户不按正常人方式操作会怎样’”。
3.3 第三阶段:靶场实操与自我出题
第三阶段就是上靶场。PortSwigger的Business logic vulnerabilities模块是我见过最适合零基础系统练逻辑漏洞的地方,它的题目从易到难,每道题有实验说明和提示,做完了还有官方解答。
我的建议是不要按顺序做,而是按照我在1.2节里的六大分类,一类一类攻克。每一类先做3道题,做完以后总结共性。比如越权类的共性就是“资源ID没有与用户绑定做校验”,支付类的共性就是“金额、数量、优惠券等参数在前端可控或后端未二次校验”。
做完一轮之后,强烈推荐“自我出题”:拿一个流程里的小功能,自己问自己“如果我是攻击者,我还能怎么利用这个功能”,然后写一份漏洞报告草稿。哪怕只写给自己看,这个过程也会逼你把零散的直觉变成可复现的步骤。
3.4 第四阶段:实战演练中的授权边界与法律底线
这一阶段直接关系到你能不能在这个行业长期走下去。逻辑漏洞研究是合法的,但研究必须限定在授权范围内:你自己搭建的环境、你拥有授权的系统、正规SRC平台的白帽众测项目。任何在未授权系统上的测试,哪怕只是“看一眼”,都可能带来法律风险。
我的原则是:靶场练熟之前,绝不碰线上系统。靶场题目做完一遍,再去众测平台找初级项目,先挑“测试范围明确”“赔付流程正规”的项目练手。进入任何一个系统之前,先确认三件事:有没有书面授权?测试范围具体是哪些域名和接口?哪些操作是被禁止的(比如不允许爆破、不允许大规模扫描)?
我遇到过的新人里,最可惜的就是在简历里写“挖过某银行支付漏洞”,一问是在未授权的系统上测的。这个行业看的是长期信誉,一次违规操作就能让你在这个圈子里寸步难行。合规永远是第一位的,这不是套话,是所有人用代价换来的教训。
4. 靶场实操:以“burp靶场业务逻辑漏洞”为例的完整演练
4.1 Burp靶场(Web Security Academy)逻辑漏洞模块概览
PortSwigger的Web Security Academy,我习惯叫它“Burp靶场”,它的Business logic vulnerabilities模块是我重点推荐的,也是热门关键词“burp靶场业务逻辑漏洞”指向的经典资源。
这个模块的题目设计得很聪明:它不会直接告诉你“这里有个漏洞”,而是模拟一个正常的业务场景,比如“下单时使用优惠码”“登录后修改邮箱”“轮盘抽奖”等等。你的任务是找出这个场景里不合常理的地方,并利用它完成特定目标。
题目界面大致是这样的:
- 左边是实验描述,告诉你实验目的;
- 中间是目标站的访问入口链接,点进去就是一个真实运行中的Web应用;
- 右边是提示按钮,卡住时可以看提示;
- 底部有解答区,做完以后可以对照。
这个模块的妙处在于,每道题都像一个微缩的电商或社交系统,你在里面反复测试不会触动任何现实规则,可以放心大胆地试错。我强烈建议你把每道题都当“考试”来做:先不点提示,自己尝试,卡了一小时再看提示。
4.2 经典案例实操:价格篡改漏洞逐字段分析
第一道题我拿“价格篡改”来说,因为它是逻辑漏洞里最容易理解、也最能锻炼抓包基本功的。
实验场景通常是:一个商城页面,商品正常价格是100,实验目标是以极低价格(比如1)购买该商品。
常规操作直接下单就能成功,但Burp Suite在这里派上用场,具体步骤是:
- 打开Burp Proxy拦截,确保拦截状态为ON。
- 在商城页面点击“加入购物车”,查看拦截到的POST请求,比如:
POST /cart HTTP/1.1 Host: your-lab-id.web-security-academy.net Cookie: session=your-session-id Content-Type: application/x-www-form-urlencoded productId=1&quantity=1&price=100 - 你会在Body里看到一个参数
price=100。把200改成1,放行请求。 - 购物车显示的价格此时变成了1。再正常提交订单,完成后实验即提示成功。
这道题的核心就是:服务端盲目信任前端提交的price参数,没有在服务端重新计算价格。看似简单,但很多真实电商的漏洞就是这么出的。
你可能会问:实战中哪有这么明显的price字段?确实,真实系统会做广告用另外的名字:total、amount、fare、discount,甚至编码成Base64。所以靶场做完这道题,要用Burp的“Search”功能和“Discover Content”功能,把请求包里所有可能代表价格的字段都翻一遍。另外,有些系统会把价格放在Cookie里,有些放在响应包里再由前端JS读取,因此看响应包同样重要。
4.3 经典案例实操:权限绕过之水平越权
第二类是越权,这类题在靶场里的典型场景是:登录账号A之后,可以直接查看或修改账号B的信息。
实验目标通常是“以普通用户身份,访问并删除另一个用户的账号”或者“读取另一个用户的私密数据”。
步骤拆解如下:
- 先注册两个账号,比如alice和bob,分别登录并观察请求头里的Cookie差异。
- 登录alice,进入“个人资料”页,用Burp抓包。你会看到类似请求:
GET /account?id=100 HTTP/1.1 Host: your-lab-id.web-security-academy.net Cookie: session=your-session-idid=100就是alice的用户ID。 - 把
id=100改成id=101(假设bob的用户ID是101),在Repeater里发送。 - 如果响应包返回了bob的姓名、邮箱、手机号甚至修改密码链接,那就说明目标系统只校验了“是否登录”,没有校验“当前登录用户是否有权访问ID=101的数据”。这就是水平越权。
这个漏洞的本质是“资源ID与用户权限没有绑定”。类似场景还有:订单号、文件ID、病历号、发票号。凡是看到URL里有一串数字或者UUID,都要习惯性地试一下“改成别人的”。注意,这一步只能在靶场或者授权系统里做,千万别拿真实网站当实验品。
4.4 经典案例实操:验证码/流程顺序绕过
逻辑漏洞里还有一种很常见的类型:业务流程的顺序可以被破坏。例如,一个“密码找回”流程设计为:输入手机号→发送验证码→校验验证码→设置新密码。正常的校验点是第二步,但有的系统把“验证码是否通过”用参数传递,比如isVerified=true,那么你直接跳到设置新密码的接口也可以。
在靶场里,这种题的做法通常是:
- 正常走一遍完整流程,全程抓包,记录每一个请求的URL和参数顺序。这一步叫“画业务流程图”。
- 从流程图里找到“关键校验点”,比如验证码的确认请求。
- 用Repeater跳过这个关键校验点,直接请求后续接口,看是否返回200而不是跳回上一步。
具体操作时,我一般先看响应包。有些系统在“提交验证码”接口返回时会带一个重定向地址,里面可能带着一个token,比如/reset-password?token=123456。如果这个token是纯数字且可预测,甚至就是手机号本身,那就是逻辑漏洞。如果token是随机的,也不一定安全——再看这个token的生成时间、是否每次固定、是否在接受验证码的响应包里泄露,这些点都是逻辑漏洞的高发区。
还有一个常见变体是“验证码不失效”。你把同一个验证码请求重放十次,如果每次都成功,那就是验证码未绑定正确的时间窗口或会话。做这类题时,Burp的Intruder模块可以用起来:把某个参数设为变量,发送N次,观察响应包长度、状态码分布,判断是否存在重复利用。
4.5 靶场实操中的4个复现技巧
前面是三类经典题的拆解,我再讲几个通用的复现技巧,这些是平时教程里不太会强调的:
- 每次操作只改一个变量:想测试
price,就不要同时改数量和优惠券。变量混着改,出了问题根本分不清是谁导致的。 - 记录基线请求:开始测试前,先把正常的请求完整保存一遍,包括原始响应。这样即使你改坏了,也能快速回到“正常状态”。
- 关注响应包里的隐藏字段:很多站点把逻辑判断的结果放在响应包或JS里,比如
"isAdmin":false。你手动改成true再发回去,如果服务端不校验,就是逻辑漏洞。 - 善用浏览器的“无痕模式”:有些状态信息存储在浏览器本地,多开无痕窗口可以模拟多用户场景。测试水平越权时,我就习惯在一个普通窗口登录alice,另一个无痕窗口登录bob,两边交替操作,比来回退出登录高效得多。
5. 常见问题与避坑指南
5.1 初学者的5个典型卡点
我见过很多人学逻辑漏洞时反复卡在同样几个地方,这里整理成速查表,方便你对症下药。
| 卡点 | 表现 | 原因 | 解决建议 |
|---|---|---|---|
| 抓不到包 | 浏览器页面正常打开,Burp里一片空白 | 代理未配置或证书未安装 | 检查FoxyProxy是否正确指向127.0.0.1:8080,访问http://burp下载并信任CA证书 |
| 找不到关键参数 | 请求包里参数太多,不知道改哪个 | 缺业务理解 | 先完整操作一遍业务流程,把每个请求和界面动作对应起来,不急着改包 |
| 改了参数没反应 | 价格改成1,最终订单还是原价 | 后端在提交订单时才重新计算价格 | 观察“提交订单”和“支付”接口是否重新提交了价格参数,把篡改点放在最后一步 |
| 不知道从哪下手 | 面对一个业务功能,没有思路 | 缺分类意识和checklist | 对照1.2节的六大分类,逐一问“这个功能属于哪一类?有没有这个类型的特征?” |
| 越权测试失败 | ID改成别人的,仍然返回自己的数据 | 服务端做了随机ID校验或返回数据脱敏 | 先确认目标ID是否存在,再检查请求里是否有其他用户标识参数(如username)一并修改 |
5.2 学习资源推荐与信息筛选
学习逻辑漏洞的信息源很杂,我建议你按“靶场优先、报告辅助、知识库兜底”的原则来筛选。
- 靶场:PortSwigger Web Security Academy的Business logic vulnerabilities是主线;做完以后可以看HackTheBox、TryHackMe或国内的各类CTF平台,找业务逻辑相关的题目。
- 漏洞报告:看SRC公开的漏洞报告时,优先看那些“步骤清晰、有请求包截图”的,不要只收藏标题。同类报告对比来看,你会发现“改ID越权”在不同平台上的差异只有字段名不同。
- 知识库/速查表:HackTricks、PayloadsAllTheThings这类开源知识库里的业务逻辑checklist很适合在新手期反复翻阅,用来提醒自己还有哪些变体没试过。它们免费,质量稳定。
筛选信息时有一个原则:凡是教你不授权就测某网站,或者分享真实渗透过程不脱敏的,直接拉黑。这类内容不仅不专业,还可能把你带向危险的边缘。
5.3 合规红线:哪些测试绝不能做
这节内容我想单独拎出来,因为它和技术无关,但决定了你能走多远。
绝对不要碰未经授权的系统。这里的“未经授权”范围比很多人以为的更大:不光是别人的服务器,还包括公司网络里任何没有明确书面授权的系统。哪怕你是这家公司的员工,如果没有项目组授权和安全团队签字,测试也不能随便做。
绝对不要在未授权系统中使用自动化工具。Intruder爆破、目录扫描、大规模爬虫,这些工具如果打到线上系统,不仅可能把系统打挂,还会被判定为恶意行为。靶场里你随便跑,线上授权测试也得先和生产环境负责人确认规则。
绝对不要把漏洞报告发到公开群里“秀肌肉”。漏洞信息披露有流程,通常是先提交到官方SRC,等待修复后再决定是否公开。你在群里贴请求包截图,等于把真实用户数据暴露了,这在哪个平台都是大忌。
绝对要保留好每一步测试记录。授权体系下,测试记录是你的护身符。你可以在自己本地开一个专门目录,记录每个测试的时间、目标范围、操作内容、发现结果。一旦出了争议,这些记录能帮你说清楚“我做了什么、没做什么”。我见过合规的众测大佬,测试记录之细致,堪比实验室日志,这是职业习惯,不是形式主义。
最后再说两句
逻辑漏洞学习,技术上不难,难的是思维转变。我自己的体会是,学到这里你会发现“漏洞”不是某个软件里的bug,而是业务系统里所有“理所当然”的缝隙。你开始习惯性地问:这个系统信任了什么?如果用户不按套路出牌会怎样?
这个行业真正有价值的人,不是会用几个工具刷漏洞的人,而是能把这些“理所当然”翻译成技术验证方案、并且始终守住合规底线的人。希望这篇分享能给你一个可靠、不跑偏的起点。