☰
零基础漏洞挖掘进阶路线:信息收集、逻辑漏洞与Web安全实战
2026/10/20 6:14:27 网站建设 项目流程

1. 先想清楚:为什么你挖不到漏洞

我刚开始接触漏洞挖掘那阵,整整三个月,一个有效漏洞都没交上去,每天对着扫描器发呆,看着屏幕上滚动的路径列表,感觉自己在做一件毫无意义的事。后来我翻了一整圈各种结论之后才想明白一件事——大部分零基础入门的人挖不到漏洞,不是输在智商或工具的差距上,而是输在思维模式上。很多人把“挖漏洞”理解成“扫描器扫一遍、哪里报错就提交哪里”,这其实是把这件事想窄了,想浅了。

这篇内容不打算只给你甩一份工具清单或者漏洞类型列表,我真正想聊的是:为什么同样一套工具、同样一个目标,有人能挖出一堆有效漏洞,有人连一个都找不到?这中间的差距到底在哪,以及从零基础到能持续稳定产出,需要经过哪几个必经阶段。适合正在入门、不知道从哪着手,或者已经学了好一阵但始终没产出的朋友,按这个思路走,能少踩很多我当年踩过的坑。

1.1 挖洞不是考证书,而是拼信息差

我见过不少把大量时间花在刷课程、刷证书上的人,总觉得学得不够多,所以不敢动手。证书当然有它的作用,它给你一张系统的知识地图,但漏洞挖掘的本质不是把知识背下来,而是在真实的环境里发现“别人设计时没想到、开发时没注意、运维时忽略掉”的环节。换句话说,你挖不到漏洞,往往不是因为你知道得少,而是因为你不知道目标有哪些细节值得你去试。

举个例子,一个网站上线之前,开发会修掉所有已发现的bug,但总有他们看不到的角度——一个低价优惠券的组合逻辑、一个密码重置流程里对手机号的校验、一个旧接口忘了下线、一段测试环境的备注信息留在JS文件里——这些都是信息差,漏洞往往就藏在这些地方。如果你只会对着一个搜索框注入测试或者扫目录,你的视野是单一维度的;真正的挖掘是“全视角观察目标,找到对方自己都没意识到的地方”。

所以我建议所有新人调整心态:你不是在跟目标的技术对抗,你是在跟“对方对自己系统的熟悉程度”赛跑。他熟悉自己写的代码,不熟悉的是被其他业务环节相互嵌套后产生的组合效果,这就是你的机会。慢慢你会发现,挖漏洞越到后面,越拼的是你的信息收集能力和联想能力,而不是你会不会某个冷门技巧。

1.2 新手最常见的五个认知误区

误区一:以为挖漏洞必须写得出复杂的脚本。很多新人被GitHub上那些看起来高大上的工具吓住了,觉得自己连Python都还没精通,根本不配挖洞。实际上脚本只是提升效率的手段,大部分漏洞的发现路径是“用工具做基础扫描、人工做逻辑判断”,真正动手做判断的是你的脑子,不是脚本本身。

误区二:觉得漏洞一定是高危的、能拿大奖的那种。实际上SRC或众测平台上大量有效漏洞是中低危的,比如水平越权看到一个不该看到的订单、短信轰炸、任意用户登录之后的某个小问题。这些漏洞的价值就在于它们能证明业务逻辑确实存在缺陷。新手如果只盯着“必须挖到RCE”这种目标,很容易眼高手低,什么也提交不上去。

误区三:扫描器扫不出来就等于没漏洞。扫描器能发现的只是它插件库里的那些已知且偏特征化的东西,业务逻辑漏洞、越权漏洞、条件竞争这类问题几乎都要靠人工一层层分析。我见过太多人扫描结果为空之后就换目标,其实他离漏洞可能只差一个手动验证的步骤。

误区四:不重视授权边界,看到什么就想试什么。这个不只是认知问题,更是底线问题。漏洞挖掘合法与否,取决于你是否有目标所有者的书面授权。没有授权的任何探测行为都是越界的。这条必须刻在脑子里。

误区五:以为挖洞是短平快的娱乐。真实的挖掘是一个“长时间沉漫在目标里、反复翻看各种功能和接口”的过程。很多新人兴奋地注册一个账号,测了十分钟没结果就索然无味地退出,自然很难碰触到那些藏在深层逻辑中的问题。

2. 地基决定上限:零基础必须先搭好的知识框架

如果你是完全零基础,我不建议你直接上手去扫任何东西,因为你连“目标返回什么意味着什么”都看不明白,就更别提利用和判定漏洞了。磨刀不误砍柴工,先花一到两个月把知识框架补起来,这是决定你将来能不能走到“精通”这一层的关键,也是区分“业余选手”和“从业者”的分水岭。

2.1 网络协议与Web基础:看懂数据在说什么

硬核基础里的第一块,是计算机网络的基本功。你要清楚一次浏览器访问网站的全过程——DNS解析、TCP三次握手、HTTP请求的构成(方法、路径、请求头、请求体)、响应状态码含义、Cookie和Session的机制。这些不是考试题,而是你在挖掘时判断问题的参考依据。

我举一个很简单的例子:当你提交一个请求后,服务器返回302跳转,你就知道它是要求你跟随重定向;返回403,意味着这里存在访问控制;返回200但在页面里多了一段错误信息,就可能暴露了后端的一些数据结构。如果这些你都看不懂,扫描器给你一万条输出你也不知道哪些是有价值线索。

第二个重要的点是Web前后端的基本知识——HTML、CSS、JavaScript、HTTP与后端的交互方式。至少要能看懂一段JS里请求了什么接口、带上了哪些参数。很多新人连浏览器的开发者工具都没真正用过,其实按钮在哪里、请求长什么样、哪里能改参数重放,这种基础操作如果都不熟练,后面的所有分析都会寸步难行。

数据库知识也是一块绕不开的。你要理解SQL的基本增删改查,理解表和字段的概念,知道一个登录验证大概是怎么查数据的,这样你才能想象“参数拼接进SQL语句”之后会发生什么。这一块不需要你写得多么复杂的语句,能看懂、能推断就够用了。

2.2 工具链不等于能力:先搞懂工具替你做了什么

零基础的朋友很容易陷入“收集工具”的快乐里,但工具只是替你把重复操作自动化了。打个比方,如果你不明白“目录扫描”在本质上是在做“根据字典批量发送请求并判断响应”,你就很难在扫描结果里选出真正有价值的信息,更别提去调整字典和配置。同理,如果你不知道代理抓包工具是在“把你浏览器发出的请求接管并转发”,你就不会想到去修改其中的参数、重放请求或拼接逻辑。

我建议你把常用工具分好类,逐个弄清楚原理再上手使用。代理抓包工具解决的是“看请求、改请求、重放请求”的问题,扫描器解决的是“大规模路径探测和已知漏洞匹配”的问题,子域名收集工具解决的是“从一个主域名扩展出更多资产”的问题。每一类工具你都应该搞清楚:它到底在做什么、它的输出是依据什么判断的、它的误报通常出现在哪里。带着这种认知去用工具,你才算一个挖掘者,而不是一个按钮操作员。

另外强烈推荐把浏览器开发者工具用成自己的主力工作台。别小看它,里面能看到每一个请求的完整信息、响应结果、请求来源,甚至能直接在控制台里调用接口查看返回细节。我后来的很多逻辑漏洞挖掘,全程都只需要浏览器加代理工具,扫描器反而用得很少。

3. 信息收集就是一切:挖洞前七成时间都花在这里

很多人问我为什么总是挖不到漏洞,我第一个反问就是:你花多少时间做信息收集?很多人的答案是不超过十分钟,看到什么就直接开扫。这完全本末倒置了。信息收集是漏洞挖掘里耗时最长、也最出成果的阶段,你连目标有几层资产、几个子系统、哪些是核心业务都搞不清楚,凭什么能找到别人找不到的问题?

3.1 域名与资产收集:你连目标有几扇门都不知道

大多数情况下,我们面对的不是一台服务器,而是一整个业务体系:主站、管理后台、移动端API、客服系统、旧版网站、各地部署的分支节点、第三方合作的服务……这些资产里,主站往往防护得滴水不漏,但某个七年前上线的旧子系统可能还裸奔着,甚至还在用默认口令。

我见过一位前辈分享过一个案例:目标公司的主站非常干净,所有常规测试点都做了过滤,但他通过备案信息找到了该公司曾经注册过的另一个域名,那个域名指向一个已经停止维护的老旧应用,最终在那里发现了一个极其简单的越权问题,进而影响到了整个用户体系。这个故事告诉我们:信息收集的广度,决定了你的攻击面有多大。

具体操作上,你可以先从主域名出发,通过证书透明度、DNS历史记录、子域名爆破工具汇总出全部的子域名,再把这些域名对应的IP、操作系统、开放的端口和中间件版本一一记录在案。这一步看似繁琐,但能让你对目标整体建立一个坐标系。后面你在测试某个接口时,能随时想起“目标还有一个旧平台也在跑同一套用户体系”,这就能直接打开你的思路。

3.2 指纹识别与目录扫描:快速定位攻击面

拿到资产清单后,下一步就是识别指纹。所谓指纹,就是通过响应头、页面特征、特定文件路径判断出对方的技术栈——用的是哪一套CMS、Web容器是什么、后端语言是什么、前端框架是哪个版本。这些信息的重要性在于,它能帮你快速匹配已知漏洞或给出后续测试方向。例如一套老旧的CMS经常有已经被公开披露过的历史漏洞,如果你能确认版本,就很容易找到可参考的测试思路。

目录扫描在初期也很值得做,但要避免埋头跑大字典。先跑常见的小字典——备份文件、配置文件、管理入口、.git、.env这种高风险路径——再用中大型字典做补充。扫描过程中要随时盯住响应状态码,尤其是200里那些不是页面默认内容的条目,以及403、500什么的异常响应,这里面经常藏着有价值的接口。记住,目录扫描不是越多越好,而是要把每一层的结果结合背景去判断,不然你扫了一天得到的也只是毫无意义的垃圾列表。

3.3 JavaScript与接口挖掘:隐藏在业务逻辑里的后门

这是我特别想强调给新人的一个点:很多有价值的东西,是被前端JS文件泄露出来的。现在的Web前端几乎全是前后端分离,业务逻辑都在后端接口完成,前端JS里会清晰地写满接口地址。有一些情况是:某个接口其实是内部接口,前端没有入口,但JS代码里仍然引用了;某个接口的参数跟线上正常业务有关联,但你通过阅读JS发现了它背后另一个隐藏用途。

具体做法是,用代理工具把目标站点所有JS请求的响应都保存下来,然后逐个翻阅。不用从头读到尾,重点看三类东西:第一类是接口路径,尤其是那些看起来跟当前页面无关的路径;第二类是硬编码的密钥、Token、内部注释;第三类是构造函数里带参数名的对象,它们往往会暴露出后端参数的黑话。再加上现在很多站点直接使用了地图文件(.map.js),如果没关掉,你甚至能直接看到源码。这种情况虽然不是每次都出现,但每出现一次,几乎都意味着至少一两个有效问题。

4. 漏洞原理与实战思路:从“看见”到“利用”

地基打好了,信息收集做足了,接下来才是真正动手测试的环节。但我必须提醒你,这里说的“利用”不是要你去攻击任何未经授权的目标,而是为了帮助你理解漏洞原理、在授权范围内做验证。所有动手操作之前,先确认自己有权这么做。

4.1 逻辑漏洞:大部分新人的第一个突破口

对于零基础的新手来说,我最推荐优先关注逻辑漏洞,原因很简单:它不需要你精通复杂的底层知识,它只需要你仔细地、带着恶意地去“过一遍业务设计”。

逻辑漏洞的例子非常多。比如修改密码流程里,第一步用手机号验证身份,第二步设置新密码,如果第二步没有重新确认当前会话是同一个用户,就会存在“任意用户密码重置”的可能;再比如一个订单状态扭转的流程,正常情况下从“已下单”到“已支付”再到“已完成”,但如果你能手动把状态参数改成“已完成”,可能导致商家收不到货款而订单却显示完成。这类问题的共同特点是:开发时只考虑了正常业务路径,没有考虑到攻击者会修改流程中间的状态、跳过某些步骤或重复提交某些请求。

怎么发现逻辑漏洞呢?我的经验是:打开业务流程,一步一步走,每一步都用抓包工具看请求参数,思考这几个问题——这个参数在服务端有没有被校验?这个步骤能不能被直接跳过?如果我换一个用户身份来执行这个请求,会怎样?如果我把请求中的数量改成负数、把金额改成0,会发生什么?这些看起来很傻的问题,恰恰是逻辑漏洞的温床。

4.2 Web常见风险点:SQL注入、XSS、越权与文件上传

这四种类型是Web领域最经典的风险点,即使你不打算成为专门做代码审计的人,也必须了解它们的基本原理。

SQL注入是当用户输入的内容未经安全处理就直接拼接进了SQL语句时产生的。比如一个搜索框,后端可能执行的是“SELECT * FROM articles WHERE title = '用户输入'”,如果你输入的内容里包含了单引号和一些SQL关键字,就可能改变原本的查询逻辑。现代开发中参数化查询已经普及,但老系统、部分低代码平台、导入导出功能里仍然存在,所以不能完全放下这个方向。

XSS的核心是攻击者提供的输入被当作HTML或JavaScript输出到了其他用户的浏览器里。这种情况多见于评论区、个人简介、富文本内容等位置。对于新人,先不用深入研究复杂绕过,你只要能理解“输出在哪、是否被过滤、能否构造一段脚本并让浏览器执行”这三个问题就可以了,它是理解前端安全和Cookie风险的基础。

越权分两种——水平越权和垂直越权。水平越权是你用A账号的登录凭证,却访问到了B账号的数据,比如通过修改请求里的订单ID,看到别人的订单详情;垂直越权是你用普通用户权限,却能访问到管理员才能访问的接口。这两种问题在业务逻辑复杂的系统里非常常见,而且影响面通常很广。我建议新人把水平越权作为重点中的重点去练习,因为它在测试流程中的操作成本低、发现概率高、危害也直观。

文件上传问题是指目标允许用户上传文件,但没有对文件类型和内容做严格限制,导致攻击者可以上传包含可执行代码的文件。判断的重点不在扩展名,而在于最终文件是否落进了可以执行的目录。实际挖掘中需要结合服务器解析规则来看,对新手可以先用本地环境理解“能传、能执行”这两个条件的组合。

4.3 从原理到验证:怎么判断一个点有没有问题

很多新人知道原理,但到了实战就不知道怎么判断“这个点有没有问题”。我给你一个很简单的判断路径:看到任何一个输入点或业务操作,先想三步——它接收了什么参数?参数会被服务端怎么处理?参数的处理结果能不能被我感知?三步想完,你就已经比大多数瞎扫的人强很多了。

举一个支付逻辑的例子。你看到一个下单请求里带着price、totalPrice、quantity这几个参数。你先想:服务端会不会用前端传的price来计算总价?如果会,你把price改成0,下单后订单金额是不是变成了0?如果支付成功且订单状态正确,那这就是一个未经验证的价格篡改漏洞。整个过程没有任何花哨的技术,就是顺着开发者的代码思路反向推了一遍。

所以我布置给新人的第一个实战练习永远是这个套路:选一个授权目标或本地靶场,把每个业务流程用一个表格列出来,写下每一步的数据流,然后针对每个数据流做参数篡改测试。你不需要写复杂的脚本,抓包改包就够了。这个练习能快速训练“看见请求—想出逻辑—验证结果”的能力,而这正是挖洞的核心能力。

5. 零基础到精通的进阶路线

有了前面的理论基础,接下来是最关键的一环:怎么把知识转化为实际产出。很多人在这个阶段放弃了,不是因为太难,而是不知道怎么给自己规划路径、怎么评判自己有没有进步。以下是我的建议,供你参考。

5.1 靶场练习:把试错成本降到最低

我强烈反对新人一上来就找真实站点练手,一是合规问题,二是你的技术还不够成熟,很容易制造大量无意义的流量,反而暴露自己。最佳做法是在本地搭一套靶场环境,市面上有很多开源的漏洞演练平台,运行起来就是一个装满了各种漏洞的网站,你可以放心大胆地在里面测试各种手法。

靶场最大的价值不是“有漏洞可以打”,而是它能让你把“原理→请求→响应→判断”这个闭环跑通。比如你在靶场里做SQL注入,你能清楚地看到你每次尝试之后页面发生了什么变化,进而理解为什么这个输入会被拼进查询、单引号起到什么作用、注释符又为什么能截断语句。这些经验在真实环境中虽然不一定直接用,但能让你面对一个陌生接口时迅速建立起猜测方向。

进阶建议是:不要满足于打通靶场,要把每个漏洞的“形成原因”“检测思路”“修复方案”三者对应起来。你在靶场里打了一个XSS,就去翻它后端的源代码,看看输出点在哪里、过滤函数到底做了什么、有哪些写法能绕过。这一步能让你从“会打”提升到“懂原理”,之后的举一反三就容易多了。

5.2 参与正规SRC或众测:从练习到产出

当你把靶场里的常规漏洞都练过几遍、且能解释原理之后,就可以考虑参与正规的漏洞反馈计划了。这类计划本质上是厂商主动邀请安全研究人员来测试自家产品,是具备授权保障的合法渠道,也是新人积累真实经验和获得正面反馈的最好方式。

刚开始进去之后,不必刻意追求高危漏洞,哪怕是找到一个不影响核心系统的中低危逻辑问题,对你的成长也意义重大。因为你会经历完整的流程:发现异常、评估影响、编写报告、等待审核、跟厂商沟通。这套流程的规范性比漏洞本身更值钱,它能帮你建立一个“职业级的安全从业者”的习惯——知道什么该测、什么不该测、报告怎么写才算清晰有力。

写报告这一点我要单独说几句。很多新人明明发现了漏洞,却因为报告写得含糊、缺少完整的复现步骤而被忽略。一份合格的漏洞报告应该是:漏洞描述清楚、复现步骤用简洁的参数和URL说明清楚、包含最小化的验证请求、明确描述影响范围。我在后续的审阅中看到太多新人花了很大力气挖洞,却败在报告没有把别人可能怀疑的点解释清楚上。

5.3 复盘与输出:把经验变成方法论

还有一个容易被忽略但极其重要的环节是复盘。每次测试结束,无论是否挖到漏洞,把整个过程记录整理一遍:目标是什么样的架构、从哪里入手、做了哪些尝试、哪些思路失败了、为什么失败、哪些点值得下次再挖。慢慢地,你会形成一套属于自己的测试习惯和思维框架——到时候你看一个陌生目标,会自动知道该先看哪里、重点测哪里、哪些信息只是干扰项。

把经验沉淀成文字是最好的复盘方式。你可以写笔记,也可以写成文章分享出来。写出来的好处是强迫你把模糊的想法变成清晰的语言,这个过程中你会发现自己有哪些地方其实没想透、哪些地方判断得太草率。这套“实践—复盘—输出—再实践”的循环一旦转起来,进步会非常快,这也是很多资深从业者与普通人拉开差距的关键原因。

6. 新手常见问题与避坑指南

最后这部分是我踩过无数次坑之后整理的速查内容,不一定完整,但都是新手上路时最高频遇到的情况。我尽量按“问题—原因—策略”的方式写在下面,希望对你有直接帮助。

6.1 为什么扫描器扫了一堆却一无所获

这是一个出现频率极高的问题。你要先理解扫描器的工作方式:它发送固定格式的探测请求,然后根据响应特征匹配已知指纹或已知漏洞规则。这意味着它擅长的是发现“已经有公开披露过模式”的问题,而不擅长发现“只在这个业务里成立”的问题。

所以扫描器应该被当成信息收集工具,而不是漏洞发现工具。它帮你把常见路径、备份文件、错误提示都捞出来,然后你要靠人工对每个结果做二次判断。比如它扫出一个敏感接口,你要去看这个接口能不能未授权访问、能不能越权、参数里有没有特殊的东西。不要扫描结果一出来就直接看总结列表,那些低危标记里经常藏着真正的机会。

另外严重建议把扫描时的字典更新成自己常用的。默认字典在中国互联网环境里经常覆盖不到那些常见的备份格式、中间件特征路径,自己往里面添一些常见的路径和文件名,命中率会高很多。

6.2 授权、边界和职业底线

这个话题无论如何都要单独占一段,因为它是整个行业的分界线,也直接关系到你是否能在这个领域里走远。任何未经授权的系统测试都是越线的,不管你是出于学习的目的还是炫耀的目的。合规漏洞挖掘的正确打开方式是:选择有明确测试范围、有厂商授权的正规计划或本地自建的靶场环境。

我在刚入行时曾经因为好奇想对一个知名网站做点“小测试”,幸好当时没真的发请求,不然后果不堪设想。后来一位前辈对我说过一句话,我记到现在:在你没有书面授权的情况下,你发出去的任何一个探测请求和攻击行为都构成越界。做安全的初衷是让世界更安全,不是给自己惹麻烦。这句话我原封不动送给所有看到这里的朋友,希望你们在任何一个技术操作前,都先过一遍合规这一关。

另外在实际测试过程中,注意不要制造超出验证需求的数据混乱。修改了一条订单数据能证明漏洞,就要及时说明并协助恢复,不要扩大影响范围。商业道德和个人口碑,在这个圈子里的分量比你想象中重得多。

6.3 心态与长期主义

最后聊一点心态上的事。漏洞挖掘是一个极其考验耐心的活动,你可能在一周之内一无所获,也可能在某一晚连续发现三个问题。很多新人倒在第二个星期,因为那是最容易产生“自我怀疑”的阶段——学了一堆知识、用了一堆工具,回看自己仍然一无所获。

我的建议是:给自己定一个低门槛的小目标,比如本周内把目标站点的所有接口整理出一个清单,并把每个接口的请求信息都看一遍,哪怕不测任何东西。这样你的每一次练习都有具体产出,避免陷入“好像做了很多但什么都没留下”的焦虑。长期以往,你会发现你比别人多的不是几次偶然的运气,而是对大量目标结构的熟悉度、对业务逻辑的敏感度、和对细节的耐心程度。

我自己到现在也保持着这个习惯:每周花固定时间做一次技术复盘,把近期看过的新思路写成笔记,凡是没弄透的原理都会去本地环境验证一遍。这个习惯不风光,也不酷,但它确实让我的产出稳定了很多。希望这篇内容能帮你少走一些弯路,也欢迎你在实践中把那些自己踩出来的新经验再沉淀下来,形成属于你自己的方法论。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询