ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

零基础学逻辑漏洞:从攻击者思维到靶场实战的完整路径

零基础学逻辑漏洞:从攻击者思维到靶场实战的完整路径 逻辑漏洞这个方向我接触了差不多六年。带过不少新人也面试过很多自称“会挖洞”的候选人。我的感受是传统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镜像并启动docker run -d -p 80:80 vulnerables/web-dvwaDVWA里虽然逻辑漏洞不多但它有一个View Source功能适合新手同时看“前端校验”和“后端逻辑”的区别——这点对你理解逻辑漏洞极有帮助。如果你还想练更贴近真实业务的逻辑漏洞可以在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: sessionyour-session-id Content-Type: application/x-www-form-urlencoded productId1quantity1price100你会在Body里看到一个参数price100。把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?id100 HTTP/1.1 Host: your-lab-id.web-security-academy.net Cookie: sessionyour-session-idid100就是alice的用户ID。把id100改成id101假设bob的用户ID是101在Repeater里发送。如果响应包返回了bob的姓名、邮箱、手机号甚至修改密码链接那就说明目标系统只校验了“是否登录”没有校验“当前登录用户是否有权访问ID101的数据”。这就是水平越权。这个漏洞的本质是“资源ID与用户权限没有绑定”。类似场景还有订单号、文件ID、病历号、发票号。凡是看到URL里有一串数字或者UUID都要习惯性地试一下“改成别人的”。注意这一步只能在靶场或者授权系统里做千万别拿真实网站当实验品。4.4 经典案例实操验证码/流程顺序绕过逻辑漏洞里还有一种很常见的类型业务流程的顺序可以被破坏。例如一个“密码找回”流程设计为输入手机号→发送验证码→校验验证码→设置新密码。正常的校验点是第二步但有的系统把“验证码是否通过”用参数传递比如isVerifiedtrue那么你直接跳到设置新密码的接口也可以。在靶场里这种题的做法通常是正常走一遍完整流程全程抓包记录每一个请求的URL和参数顺序。这一步叫“画业务流程图”。从流程图里找到“关键校验点”比如验证码的确认请求。用Repeater跳过这个关键校验点直接请求后续接口看是否返回200而不是跳回上一步。具体操作时我一般先看响应包。有些系统在“提交验证码”接口返回时会带一个重定向地址里面可能带着一个token比如/reset-password?token123456。如果这个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而是业务系统里所有“理所当然”的缝隙。你开始习惯性地问这个系统信任了什么如果用户不按套路出牌会怎样这个行业真正有价值的人不是会用几个工具刷漏洞的人而是能把这些“理所当然”翻译成技术验证方案、并且始终守住合规底线的人。希望这篇分享能给你一个可靠、不跑偏的起点。
返回列表