1. 项目概述从零开始理解SRC漏洞挖掘“赏金猎人”这个词听起来有点江湖气但在网络安全领域它代表着一群技术精湛、行动独立的安全研究员。他们不隶属于某个公司的安全团队而是通过主动寻找并报告软件、网站或系统中的安全漏洞来获取报酬。而“SRC”即“安全应急响应中心”通常是各大互联网公司设立的用于接收外部安全研究员提交漏洞的官方平台。把这两个词放在一起“赏金猎人挖SRC漏洞的技巧”这个标题指向的就是一套系统性的、从零基础到能够独立在各大厂商SRC平台挖掘并提交有效漏洞的方法论。我接触这行有些年头了从最初看着漏洞报告一头雾水到现在能稳定产出一些有价值的发现中间踩过的坑、走过的弯路不计其数。网上很多教程要么过于理论化要么就是某个具体漏洞的复现缺乏一条贯穿始终的主线。这篇内容我想把我这些年积累的、真正能落地的思路和技巧梳理出来。它不会教你某个特定的CVE怎么利用而是教你如何像猎人一样思考如何构建自己的“狩猎”流程从海量的目标中筛选出最有可能藏有“猎物”的那一个并最终捕获它。无论你是计算机专业的学生是对安全感兴趣的开发者还是想尝试副业的IT从业者只要你有基本的网络和Web知识跟着这个思路走都能建立起属于自己的漏洞挖掘能力。2. 核心思路从“黑客”思维到“猎人”流程很多人一提到挖漏洞就想到各种炫酷的攻击工具和复杂的利用链。这其实是一个误区。真正的核心不在于你掌握了多少种攻击手法而在于你能否建立起一套高效发现问题的“侦查”与“分析”体系。我把这套体系总结为从“黑客”的随机攻击思维转变为“猎人”的有计划狩猎流程。2.1 心态转变从攻击者到测试者首先必须明确我们不是在“黑”网站。SRC漏洞挖掘的本质是帮助厂商在恶意攻击者之前发现潜在风险。这要求我们具备测试者的严谨心态。你的每一个操作都应该是可记录、可复现的。随意使用扫描器狂轰滥炸、尝试危险的破坏性payload不仅效率低下更容易触发对方的防护告警甚至可能涉及法律风险。正确的姿态是假设自己是该应用的一名深度质量测试员目标是用各种正常的、边缘的、异常但合理的输入去验证系统的健壮性。举个例子看到一个输入框黑客思维可能是“我试试能不能传个木马上去。”而猎人/测试者思维则是“这个输入框接受哪些数据类型长度限制是多少前端做了校验后端是否也做了如果我输入超长字符串、特殊字符、编码后的字符后端会如何处理处理后的结果又会在哪里输出”这种思维转变是入门的第一步它决定了你后续所有动作的规范性和有效性。2.2 核心流程四步法我将一次完整的漏洞挖掘流程抽象为四个步骤信息搜集、攻击面测绘、漏洞探测、报告撰写。这是一个循环往复、不断深入的过程。信息搜集Reconnaissance这是所有工作的基础。你的目标不再是某个具体的URL而是一个公司或一个产品生态。你需要收集所有相关的资产信息包括但不限于主域名、子域名、IP地址段、移动应用、小程序、API接口、使用的第三方组件如JS库、框架、中间件版本、甚至是从代码仓库、历史快照中泄露的信息。信息越全面你的攻击面就越广。攻击面测绘Attack Surface Mapping在搜集到的海量资产中不是所有点都值得投入精力。这一步需要你快速评估每个资产的“价值”和“脆弱性”。例如一个暴露在公网、承载核心业务、且使用了已知存在漏洞的旧版本框架的API服务器其优先级远高于一个静态宣传页面。你需要绘制出一张“热力图”标出最有可能存在问题的区域。漏洞探测Vulnerability Probing针对高优先级目标进行有针对性的测试。这里不是盲目扫描而是基于你对目标技术栈的理解设计测试用例。例如发现目标使用Apache Struts 2.3.34那么针对该版本的历史漏洞如S2-045, S2-046就是首要测试点。同时结合常见的Web漏洞模型如OWASP Top 10进行通用性测试如SQL注入、XSS、文件上传、逻辑漏洞等。报告撰写Reporting这是兑换“赏金”的关键一步。一个优秀的漏洞报告需要清晰描述漏洞位置、复现步骤、潜在危害并提供修复建议。它需要让完全不了解背景的安全工程师也能快速理解并复现问题。潦草的报告可能导致漏洞被忽略或评级降低。注意永远遵循“最小必要”和“无害化”原则。测试使用的payload应是证明漏洞存在的最小化样例避免读取、修改或破坏真实用户数据。在测试文件上传漏洞时上传一个无害的test.txt或一张图片来证明路径可控即可切勿上传可执行的Webshell。3. 实战起手式高效信息搜集与资产梳理工欲善其事必先利其器。信息搜集阶段决定了你的“战场”有多大。我习惯将信息分为被动搜集和主动搜集两类并借助一系列工具来提高效率。3.1 被动信息搜集不直接接触目标被动搜集主要利用公开渠道和第三方数据避免过早暴露自己的探测行为。这是最安全也是首要的步骤。子域名枚举这是扩大目标范围最有效的方法。一个主域名如example.com下可能隐藏着数十上百个子域名如admin.example.com,api.example.com,dev.example.com它们往往是不同业务或不同阶段的系统。常用工具subfinder,amass,assetfinder。这些工具会查询DNS记录、证书透明度日志CT Logs、搜索引擎等公开数据源。技巧不要只满足于一级子域名尝试进行递归枚举可能会发现像beta.api.dev.example.com这样的深层资产。将多个工具的结果合并去重能获得更全面的列表。端口与服务探测获取到IP地址或域名后需要知道它们开放了哪些服务。一个开放了8080端口运行着Jenkins的服务和一个开放了9200端口运行着Elasticsearch的服务其攻击路径截然不同。常用工具nmap,masscan。nmap功能全面且精准masscan速度极快适合大范围初筛。我通常先用masscan快速扫描全端口再用nmap对开放端口进行深度服务和版本探测。技巧重点关注非标准端口上的Web服务如3000, 7001, 8080、数据库服务1433, 3306, 6379、远程管理服务22, 3389以及缓存、消息队列等中间件端口。这些地方常常因为运维人员的疏忽而暴露且防护可能较弱。历史记录与情报分析Wayback Machinearchive.org查看网站的历史快照有时能发现已被删除但仍有用的测试页面、接口文档甚至是泄露的源代码片段。GitHub/GitLab搜索使用companyname.com、target.com等关键词搜索可能会找到员工不小心上传的含有密码、API密钥、内部配置文件的代码仓库。证书透明度日志使用crt.sh等网站通过证书信息发现子域名。3.2 主动信息搜集与目标有限交互在被动搜集的基础上可以进行一些低强度的主动交互以获取更精准的技术栈信息。Web技术栈指纹识别访问目标网站通过HTTP响应头、Cookie、HTML源码中的特征、特定的静态资源路径等识别其使用的Web框架、前端库、服务器、中间件等。工具Wappalyzer浏览器插件、whatweb命令行工具。一眼就能看出目标用的是Spring Boot、Django还是ThinkPHP前端是Vue还是React。关键点精确的版本号至关重要。Shiro 1.2.4和Shiro 1.4.2存在的漏洞可能天差地别。查看X-Powered-By头、JS/CSS文件路径中的版本号、错误页面信息等。目录与文件发现寻找常见的后台登录入口/admin,/wp-admin、配置文件/.git/config,/WEB-INF/web.xml、备份文件.bak,.swp,.tar.gz、接口文档/swagger-ui.html,/api-docs。工具dirsearch,gobuster,ffuf。这些工具基于字典进行爆破。字典的质量决定发现效果。建议维护自己的字典融合常见路径、目标行业特有路径以及从其他测试中积累的路径。技巧注意响应状态码、响应大小和响应内容。403禁止访问和404不存在意义不同一个返回403的路径可能通过其他方法绕过。响应大小突然变化的URL也值得关注。这个阶段结束后你应该得到一份结构化的资产清单一个包含子域名、IP、开放端口、服务版本、Web技术栈的表格。这份清单就是你后续狩猎的“地图”。4. 漏洞探测的核心针对性测试与逻辑深度挖掘有了清晰的资产地图就可以开始深入探测了。我习惯将漏洞分为两类技术型漏洞和逻辑型漏洞。技术型漏洞通常有固定的模式和payload而逻辑型漏洞更考验对业务的理解和想象力。4.1 技术型漏洞利用已知模式这类漏洞通常与具体的开发框架、组件或编码疏忽有关有较为成熟的检测方法。基于组件的漏洞这是当前最高效的漏洞挖掘方向之一。在信息搜集阶段如果你发现目标使用了Apache Shiro、Fastjson、Log4j2、Spring Cloud Gateway等特定组件并且版本落在存在公开漏洞的范围内那么你应该优先尝试复现这些已知漏洞。实战案例假设识别出目标使用Shiro并且通过记住我功能的rememberMeCookie存在可以立即尝试Shiro反序列化漏洞。使用ysoserial生成payload并用Shiro内置的AES密钥进行加密替换Cookie值发送。这个过程高度可自动化是赏金猎人的“高产”领域。工具与资源时刻关注CNVD、CNNVD、NVD等漏洞库以及安全社区的最新漏洞动态。vulhub、VulnHub等靶场环境是练习复现的绝佳场所。常见Web漏洞即OWASP Top 10中常年上榜的漏洞类型。对这些漏洞的测试应融入日常的每一个交互点。SQL注入不仅仅是 and 11。需要根据报错信息、时间盲注、布尔盲注等不同情况灵活构造payload。工具如sqlmap很强大但手动测试更能理解原理。重点关注搜索框、订单ID、用户资料等与数据库交互的地方。跨站脚本XSS分为反射型、存储型和DOM型。测试时不仅要插入scriptalert(1)/script更要尝试绕过前端的过滤和编码。例如如果过滤了script可以尝试img src1 onerroralert(1)如果对尖括号编码可以看是否存在JavaScript函数如eval()、innerHTML的输入点尝试模板字符串或事件触发。文件上传漏洞核心在于绕过文件类型校验。尝试修改HTTP请求中的Content-Type、在文件名中添加特殊字符如test.php.jpg、利用解析漏洞如IIS 6.0的目录解析/xx.asp/xx.jpg、以及上传包含恶意代码的特定格式文件如SVG中的JavaScriptPDF中的JS动作。服务器端请求伪造SSRF寻找那些能够发起网络请求的功能点如图片加载、PDF生成、URL预览、远程API调用等。尝试将内网地址如127.0.0.1:8080或云服务元数据地址如169.254.169.254作为参数传入看服务器是否会代为请求并返回结果。4.2 逻辑型漏洞业务流中的陷阱逻辑漏洞是SRC中高价值漏洞的富矿因为它往往无法通过自动化工具发现完全依赖于测试者对业务的理解。越权访问这是最常见的逻辑漏洞分为水平越权和垂直越权。水平越权用户A能操作用户B的数据。例如通过修改URL中的用户ID参数/user/profile?id123能否看到ID为124的用户信息在修改收货地址、查看订单时一定要测试ID参数是否可被遍历。垂直越权普通用户能执行管理员的功能。例如普通用户界面有一个隐藏的或未鉴权的管理员API接口/admin/deleteUser能否直接访问通过抓取普通用户和管理员的请求包对比其功能菜单对应的接口查找那些可能缺失权限校验的接口。业务流程绕过攻击者通过非正常流程达到目的。支付漏洞修改支付金额参数如将amount100改为amount0.01、重复使用已过期的优惠券、利用竞争条件在库存校验和扣减之间发起多次请求“薅羊毛”。验证码绕过验证码是否在客户端生成或校验是否在第一次请求后服务端状态未更新导致同一验证码可重复使用是否可以通过置空、删除验证码参数来绕过密码重置漏洞重置密码的令牌是否可预测如基于时间或用户ID是否可以通过篡改接收手机号或邮箱的参数将重置链接发送到攻击者控制的账户接口参数篡改这是挖掘逻辑漏洞的“笨”但有效的方法。对应用发出的每一个请求尤其是POST和PUT请求尝试系统地修改其参数。数值型参数尝试负数、零、极大数、小数。例如商品数量传-1会导致库存增加吗金额传0能免费下单吗标识型参数isAdminfalse改为truestatuspending改为approvedtypeuser改为typeadmin。ID型参数如前所述尝试遍历其他对象的ID。实操心得逻辑漏洞测试的关键在于“对比”和“模拟”。准备两个测试账号如普通用户A、普通用户B或普通用户和管理员用Burp Suite等代理工具抓取他们的操作请求逐个参数进行对比分析。任何不同的地方都可能是权限控制的体现任何相同的地方都可能存在越权风险。5. 工具链与工作流打造你的自动化狩猎平台单靠手动测试效率是低下的。成熟的赏金猎人会搭建一套半自动化的工作流将重复性的信息搜集、初筛工作交给工具自己则专注于深度分析和逻辑推理。5.1 核心工具选型我的本地工作环境通常包含以下几类工具代理与抓包工具必备Burp Suite Professional是行业标准。它的Repeater、Intruder、Scanner、Comparer模块在测试中不可或缺。社区版功能有限但对于入门也足够。OWASP ZAP是一个强大的免费替代品。综合扫描器辅助如Nessus,OpenVAS,Nuclei。我尤其推荐Nuclei它是一个基于YAML模板的漏洞扫描引擎社区有成千上万的模板覆盖从CVE漏洞到错误配置的各种检查点。它可以无缝集成进你的资产发现流程对初步筛选出的目标进行快速批量扫描标记出潜在的低垂果实。信息搜集与资产监控套件我会将subfinder,amass,httpx,nuclei等工具通过脚本串联起来。例如用一个Shell脚本或Python脚本输入一个主域名自动完成子域名发现、存活探测、端口扫描、基础指纹识别并最终用Nuclei进行初步漏洞扫描。chaos-client配合chaos.projectdiscovery.io数据库能获取到更丰富的子域名数据。漏洞利用与开发框架Metasploit适用于已知漏洞的利用。但对于Web漏洞更多是使用独立的PoC脚本或自己编写。sqlmap用于自动化SQL注入测试和利用。5.2 搭建自动化侦察流水线下面是一个简化版的自动化侦察思路你可以用bash脚本或Python的subprocess模块实现#!/bin/bash # 示例脚本auto_recon.sh TARGET$1 echo [*] 开始对目标 $TARGET 进行侦察... # 1. 子域名发现 echo [*] 子域名枚举... subfinder -d $TARGET -silent | tee subdomains.txt amass enum -passive -d $TARGET -o amass.txt assetfinder --subs-only $TARGET | tee assetfinder.txt # 合并去重 cat subdomains.txt amass.txt assetfinder.txt | sort -u all_subs.txt # 2. 探测存活HTTP/HTTPS服务 echo [*] 探测存活Web服务... cat all_subs.txt | httpx -silent -threads 50 -o live_subs.txt # 3. 获取每个存活目标的标题和状态码快速了解 echo [*] 获取基础信息... cat live_subs.txt | httpx -silent -threads 20 -status-code -title -tech-detect -o web_info.txt # 4. 使用Nuclei进行快速漏洞扫描使用低危、中危模板避免攻击性太强 echo [*] 使用Nuclei进行初步扫描... nuclei -l live_subs.txt -t ~/nuclei-templates/ -severity low,medium -o nuclei_scan_results.txt echo [*] 侦察完成。存活子域名保存在 live_subs.txt扫描结果在 nuclei_scan_results.txt这个流水线每天或每周自动运行一次帮你监控目标资产的变化并自动发现新的、易受攻击的点。你只需要定期查看扫描结果报告从中挑选出值得深入手工测试的目标。5.3 信息管理与协同随着目标增多信息管理变得重要。我推荐使用Notion、Obsidian或OneNote来建立每个目标的独立页面记录资产列表、测试账号、已测试的功能点、发现的疑点、漏洞记录等。使用Burp Suite的Project-level功能也能很好地组织单个项目的测试数据。6. 从发现到兑换漏洞报告的艺术费尽心力找到一个漏洞最后却因为报告写得不好而被忽略或评为低风险这是最令人沮丧的事情。一份优秀的漏洞报告是技术能力和专业素养的体现。6.1 报告必备要素一个标准的SRC漏洞报告通常需要包含以下部分务必清晰、简洁、完整漏洞标题用一句话概括漏洞本质。例如“[目标系统]后台管理接口未授权访问导致任意用户删除”。漏洞等级根据平台规则自评如高危、中危、低危。评估时考虑漏洞的利用难度、所需权限、以及可能造成的业务影响数据泄露、资金损失、系统控制等。漏洞类型如逻辑漏洞-越权访问、SQL注入、XSS等。影响范围明确指出受影响的URL、接口、功能模块或用户群体。漏洞描述简要说明漏洞的成因。例如“系统在对/api/admin/deleteUser接口进行请求时仅依赖前端菜单隐藏后端未对用户角色进行校验导致任何登录用户均可通过直接构造请求删除其他用户。”复现步骤这是报告的核心必须做到任何人按步骤操作都能复现。采用编号列表从如何登录一个普通测试账号开始每一步操作、每一个请求和响应都要详细列出。最好提供截图或视频关键步骤的截图如Burp Suite的请求响应、屏幕录制视频GIF能极大帮助审核人员理解。必须提供HTTP请求/响应原始数据将Burp Suite中截获的原始HTTP请求包和响应包复制粘贴到报告中。关键参数要用箭头或高亮标出。漏洞证明展示漏洞成功利用的结果。例如越权删除用户后在列表中该用户已消失的截图执行XSS后弹出警告框的截图SQL注入导致数据库信息泄露的截图。修复建议从开发角度给出具体的修复方案。这体现了你的专业性。例如“建议在后端deleteUser接口的入口处增加基于角色或权限的校验逻辑确保只有具备管理员权限的用户才能执行此操作。可参考Spring Security的PreAuthorize(hasRole(ADMIN))注解。”其他信息测试使用的账号、测试时间、浏览器版本等。6.2 提升报告通过率的技巧一个报告只描述一个漏洞不要将多个不同位置、不同类型的漏洞混在一个报告里。这不利于厂商分类处理和修复。语言客观中立避免使用“你们的系统太烂了”这类情绪化语言。用事实和技术细节说话。遵循平台规则每个SRC平台都有其漏洞评级标准和提交规范提交前务必仔细阅读。有些平台禁止对生产环境数据进行破坏性测试有些则对扫描器批量提交的漏洞不予受理。善用“备注”或“沟通”功能如果审核人员对漏洞有疑问积极、礼貌地在报告沟通区进行解释。良好的沟通能解决很多误会。持续跟进提交报告后定期查看状态。如果被忽略或评为低风险而你认为评估不当可以依据平台规则进行申诉补充更详细的利用链或危害证明。7. 避坑指南与进阶心法最后分享一些只有踩过坑才能体会到的经验这些能帮你走得更稳、更远。7.1 常见“坑点”与规避坑点一盲目扫描触发风控使用sqlmap等高强度扫描工具时不加任何延迟和代理短时间内发起海量请求极易被WAF封禁IP甚至导致目标系统告警。规避设置--delay参数使用--proxy通过代理池发送请求或者更优选在手动确认存在注入点后再使用工具进行深度利用。坑点二测试越权时污染真实数据在测试越权修改、删除时使用了真实的、其他用户的订单ID或资料ID导致真实用户数据被破坏。规避永远使用自己控制的测试账号。创建两个测试账号A和B用A去尝试操作B的数据。如果平台不允许注册多个账号应在测试前与SRC平台或厂商联系申请专门的测试账号。坑点三忽略漏洞的“可利用性”发现一个存储型XSS但触发点仅在用户后台的备注栏只有用户自己登录后才能看到这种漏洞实际危害极低。规避在报告时要深入思考漏洞的利用场景。一个反射型XSS如果触发点是在搜索框且搜索结果页是公开的其危害就大得多。在报告中阐述清楚利用链和潜在影响。坑点四法律与授权风险测试未经授权的系统是违法的。规避只测试明确加入公共SRC计划如腾讯安全应急响应中心、阿里安全响应中心、华为安全响应中心等的厂商资产或者参与HackerOne、Bugcrowd等众测平台上的私有项目。绝对不要测试政府、金融等敏感行业未授权的系统。7.2 能力进阶路径深度优先于广度初期可以广撒网但要想获得高价值漏洞必须对一两个重点目标或技术栈进行深度研究。例如专门研究Spring Boot生态的常见配置错误和漏洞或者深入研究OAuth 2.0、JWT的实现逻辑漏洞。成为某个细分领域的专家。代码审计是降维打击如果目标系统是开源的或者你能通过某些途径获取到部分源代码代码审计将是发现漏洞的“核武器”。学习静态代码分析寻找危险函数如Runtime.exec(),eval()、不安全的反序列化、逻辑缺陷等。这能帮你找到那些黑盒测试极难发现的深层漏洞。关注新兴技术与协议IoT设备、云原生K8s, Docker、API网关如Spring Cloud Gateway、GraphQL、gRPC等新技术带来了新的攻击面。提前学习这些领域的安全知识能在漏洞爆发初期占据先机。构建知识体系与信息源关注安全社区如Seebug、先知社区、优秀的安全博客、GitHub上的安全工具和PoC仓库。使用RSS阅读器或信息聚合工具保持对行业动态的敏感度。这条路没有捷径它需要持续的学习、大量的实践和不断的总结反思。每一次失败的测试和每一份被驳回的报告都是宝贵的经验。从最简单的信息搜集开始逐步完善你的工具链深化你的测试方法最终你会形成自己独特的“狩猎”直觉。记住最重要的不是工具而是你分析问题的思维。保持好奇保持耐心安全的世界远比想象中广阔。