1. 项目概述:从零开始的SRC漏洞挖掘实战指南
如果你对网络安全感兴趣,或者经常听到“白帽子”、“漏洞赏金”这些听起来很酷的词,但总觉得它们离自己很远,那这篇文章就是为你准备的。SRC,也就是安全应急响应中心,早已不是顶尖黑客的专属竞技场。它更像是一个公开的、有规则的安全测试平台,各大互联网公司设立它,就是为了鼓励像你我这样的安全爱好者,去发现他们产品里的安全隐患,并给予相应的奖励和认可。很多人觉得入门门槛高,需要精通各种底层协议和汇编语言,其实不然。今天的SRC漏洞挖掘,已经形成了一套从信息收集到漏洞验证的成熟方法论,即使是零基础,只要方向正确、思路清晰,完全有可能挖到自己的第一个漏洞。
我接触SRC有几年了,从最初对着一个网站界面不知所措,到后来能形成自己的挖掘流,中间踩过无数的坑,也总结了不少“笨办法”和“小技巧”。这篇文章的目的,就是把我这套“非常详细”的实战经验,掰开了、揉碎了讲给你听。我们不谈那些空中楼阁的理论,就聚焦于一个新手如何从打开一个SRC平台开始,一步步走到提交第一个有效漏洞报告。你会发现,核心不在于你会多少种高深的攻击技术,而在于你是否拥有系统性的思考方式和耐心细致的观察力。无论是常见的XSS(跨站脚本攻击)、越权访问,还是逻辑漏洞,其挖掘的本质都是对程序“预期行为”和“实际行为”之间差异的探寻。
2. 核心思路与前期准备:心态、目标与工具库
在真正动手之前,比技术更重要的是心态和目标的建立。很多新手折戟沉沙,不是因为技术不行,而是因为期望值管理失败。
2.1 心态建设:从“挖洞”到“协作测试”的思维转变
首先,必须明确一点:SRC漏洞挖掘不是“黑”网站,而是一种得到厂商授权的、协作式的安全测试。你的角色是帮助厂商提升安全性的“白帽子”,而非攻击者。这个心态决定了你的一切行为边界。
切忌“破坏性测试”:绝对不要使用扫描器进行高频、暴力扫描,这会被视为攻击行为,可能导致IP被封禁,甚至承担法律责任。你的每一个测试动作,都应该是可控的、可解释的。比如,测试一个SQL注入点,目的是验证漏洞是否存在,而不是尝试拖取整个数据库。在测试时,要像医生做检查一样,用最小的“剂量”去验证问题,而不要像爆破手一样试图摧毁目标。
接受“空手而归”是常态:你可能连续测试几十个小时,一无所获。这太正常了。大厂商的SRC经过无数人挖掘,表面的、简单的漏洞早已被挖尽。你的价值在于发现那些需要组合拳、需要深入理解业务逻辑的深层问题。把每一次测试都当成一次学习机会,即使没找到漏洞,你也熟悉了一个新的业务系统,这本身就是积累。
细致与耐心是第一生产力:漏洞挖掘,尤其是逻辑漏洞,比拼的往往是细心。一个参数多传一次、少传一次,一个状态值从“0”改成“1”,一个请求包的顺序调换一下,都可能触发完全不同的程序逻辑。你需要像侦探一样,不放过任何一点蛛丝马迹。
2.2 目标选择:如何挑选你的第一个“战场”
对于新手而言,选对目标事半功倍。不建议一上来就挑战头部大厂(如阿里、腾讯的SRC),虽然奖金高,但防护严密,高手云集,容易打击信心。
从“教育SRC”和中小厂商入手:近年来兴起的“教育SRC”(针对高校、教育类系统的SRC)是非常好的起点。这些系统业务相对单纯,但安全投入可能不如商业公司,存在漏洞的概率较高,且社区氛围通常更友好,对新手报告的处理和反馈也更耐心。一些新兴的互联网公司或垂直领域的SRC也是不错的选择,它们可能正处于安全建设初期,有大量待发现的“低垂果实”。
专注于“子域名”和“新业务”:不要总盯着主域名。一个大型互联网公司有成千上万的子域名,很多是历史遗留系统、测试环境、或者边缘业务,这些地方往往是安全防护的薄弱环节。同样,关注厂商新上线的功能或产品,在刚上线时,安全测试可能不充分,是你切入的好时机。
明确漏洞类型优先级:对于新手,建议按以下顺序尝试:
- 信息泄露:如源码泄露(
.git、.svn目录)、配置文件泄露、错误信息回显过多等。这类漏洞寻找技术门槛低,主要靠目录扫描和细心观察。 - 跨站脚本(XSS):尤其是反射型XSS,通过在输入框、URL参数中尝试插入简单payload,观察是否被浏览器执行。
- 越权访问:包括水平越权(访问同权限其他用户的数据)和垂直越权(低权限用户执行高权限操作)。这是逻辑漏洞的“大户”,通过修改用户ID、订单ID等参数进行测试。
- 业务逻辑漏洞:如短信轰炸、验证码绕过、订单金额篡改等。这需要你理解业务流程,思考“正常的流程是什么?我能否在不走正常流程的情况下达到目的?”
2.3 工具准备:打造你的“瑞士军刀”
工欲善其事,必先利其器。但记住,工具是辅助,你的大脑才是核心。以下是一个基础且高效的工具清单,绝大多数都是免费或开源的。
信息收集套件:
- 子域名枚举:
subfinder,amass,OneForAll。获取目标尽可能多的入口点。 - 目录/文件扫描:
dirsearch,ffuf,gobuster。用于发现隐藏的目录、备份文件、配置文件等。 - 端口扫描与服务识别:
nmap。了解目标开放了哪些服务(Web、数据库、中间件等)。 - 网络空间测绘引擎:
fofa,shodan,zoomeye。通过特征语法(如title=“后台管理”)快速定位资产。
漏洞测试与抓包代理:
- Burp Suite Community(社区版):这是核心中的核心。它集成了代理、爬虫、重放、入侵(Intruder)等功能。你的大部分测试都会在Burp中完成。学习使用Burp是SRC入门的第一步。
- 浏览器开发者工具(F12):用于前端分析、调试JavaScript、查看网络请求。
- 浏览器插件:如
Wappalyzer(识别网站技术栈)、Hack-Tools(集合常用payload)、EditThisCookie(方便地修改Cookie)。
Payload与字典:
- SecLists:一个巨大的安全测试字典集合,包含目录、参数、用户名、密码、fuzz payload等。这是你的弹药库。
- 自定义字典:根据目标业务特点(如产品名、城市名、特定术语)生成自定义字典,往往比通用字典更有效。
协作与记录:
- 笔记软件:如
Obsidian,Notion或Typora。详细记录每一个测试目标的资产、测试过程、发现的疑点、测试过的payload。好记性不如烂笔头,系统的笔记是复现和深化思路的关键。 - 截图/录屏工具:用于保存漏洞证明。
ShareX是个不错的选择。
注意:所有扫描和测试动作,务必在目标SRC公开的测试范围内进行,并控制请求频率,避免对目标业务造成影响。使用代理池或切换网络环境进行测试时,更要谨慎。
3. 系统性漏洞挖掘流程拆解
有了心态、目标和工具,我们就可以进入实战环节。一个高效的挖掘流程应该是系统性的,而不是东一榔头西一棒子。
3.1 第一阶段:深度信息收集(Reconnaissance)
信息收集的深度和广度,直接决定了你发现漏洞的概率。这一步要像侦探调查案发现场一样,不放过任何细节。
3.1.1 资产发现与测绘这不仅仅是跑一下子域名工具就完了。你需要构建一个立体的资产视图。
- 主域名与子域名:使用工具获取子域名列表后,手动访问每一个,观察其功能。一个不起眼的
dev.xxx.com或test.xxx.com可能就是突破口。 - 关联资产:通过WHOIS信息、SSL证书、DNS历史记录等,寻找与目标公司关联的其他域名或IP段。公司可能收购了其他业务,这些新并入的资产安全水平可能参差不齐。
- 端口与服务:对重要的IP进行非全端口扫描,重点识别
80/443(Web)、8080/8443(Web管理)、21/22(FTP/SSH)、3306(MySQL)、6379(Redis)等。一个对外开放的Redis未授权访问,可能就是严重漏洞。 - 历史漏洞与公开信息:在GitHub、网盘搜索中,搜索目标公司的代码仓库、员工上传的配置文件、API密钥等。在漏洞平台(如乌云镜像)搜索目标历史漏洞,了解其薄弱环节和修复风格。
3.1.2 技术栈与应用架构识别了解目标用什么技术搭建,才能有的放矢。
- 前端:是纯静态页面,还是Vue/React等单页面应用?注意,在Vue等框架中,图片路径(
img src)的动态绑定可能会涉及前端令牌(token)的处理逻辑,这里有时会存在路径遍历或认证绕过问题,虽然与你搜索的“vue 中img src路径 如何加token”这个开发问题角度不同,但却是测试人员需要关注的输入点。 - 后端:服务器是Nginx还是Apache?语言是Java、PHP、Python还是Node.js?框架是Spring Boot、ThinkPHP还是Django?不同的技术栈有各自常见的漏洞模式(如PHP的
文件包含,Java的反序列化)。 - 中间件与数据库:使用了什么版本的Redis、Elasticsearch、MQ?这些组件是否有公开的未授权或RCE漏洞?
- 第三方组件:网站引用了哪些第三方JS库、字体库、统计服务?这些第三方服务如果被劫持(供应链攻击),也会影响目标安全。
3.1.3 业务逻辑梳理这是挖掘逻辑漏洞的基础。你需要像普通用户一样,把核心业务流程走一遍。
- 注册/登录/找回密码流程:每一步的请求和响应是什么?验证码如何生成和校验?短信/邮件发送频率是否有限制?
- 核心业务功能:如果是电商,就走一遍商品浏览、加入购物车、下单、支付的流程。注意每一个环节产生的数据(订单号、用户ID、优惠券码)和状态(待支付、已发货)。
- 权限体系:普通用户、VIP用户、管理员各自有哪些功能?功能之间的边界在哪里?
- 数据流:用户输入的数据在哪里被接收?在哪里被处理?最终存储在哪里?又在哪里被展示?
将以上所有信息,整理到你的笔记中,形成一份针对该目标的“作战地图”。
3.2 第二阶段:漏洞探测与Fuzz测试
拿着“作战地图”,开始有针对性的测试。
3.2.1 自动化与手动的结合完全依赖自动化扫描器(如AWVS、Nessus)在SRC挖掘中效率很低,且易被屏蔽。正确做法是:以手动测试为主,自动化工具为辅。
- 自动化用于初筛:用目录扫描工具扫出隐藏路径;用Burp的被动扫描功能发现一些明显的低危问题(如缺少安全头)。
- 手动进行深度测试:对每一个功能点、每一个参数进行手动测试。这是发现逻辑漏洞的唯一途径。
3.2.2 请求与参数Fuzz这是最核心的测试动作。将Burp Suite设置为浏览器代理,浏览网站的所有功能,让Burp记录下所有HTTP请求。
- 寻找所有输入点:URL参数、POST表单、Cookie、HTTP头(如
X-Forwarded-For、User-Agent)、JSON/XML请求体中的每一个字段。 - 对每个输入点进行Fuzz:
- SQL注入:尝试
'、"、1' and '1'='1、1' and sleep(5)--等payload,观察响应时间、错误信息、页面内容的变化。 - XSS:尝试
<script>alert(1)</script>、<img src=x onerror=alert(1)>、"onmouseover="alert(1)等。注意观察payload是否被原样输出、是否被过滤、过滤了哪些字符。 - 命令/代码注入:在可能存在系统调用或eval函数的地方(如IP参数、文件名参数),尝试
| ls、;id、$(whoami)或PHP的phpinfo()。 - 路径遍历/文件包含:尝试
../../../../etc/passwd、file:///etc/passwd、php://filter/convert.base64-encode/resource=index.php。 - SSRF(服务端请求伪造):在请求URL、头像上传地址等参数中,尝试
http://169.254.169.254/(云元数据地址)或http://你的服务器,看服务器是否会向该地址发起请求。 - 逻辑测试:这是重点。修改数字ID(用户ID、订单ID)、状态值、数量、价格。尝试删除或添加参数。重复提交同一个请求(重放攻击)。打乱请求顺序。
- SQL注入:尝试
3.2.3 业务逻辑漏洞专项测试基于第一阶段梳理的业务流程,设计测试用例:
- 验证码绕过:提交请求时,删除验证码参数、使用空验证码、使用旧验证码、或者直接暴力穷举(如果验证码是4位数字)。
- 短信/邮箱轰炸:在发送验证码的接口,不更换手机号/邮箱,快速重复请求。或者遍历一个号码段进行请求。
- 越权测试:
- 水平越权:用户A登录后,获取到访问自己订单的URL,如
/order/view?id=1001。尝试将id参数改为1002(假设是用户B的订单),看能否访问。 - 垂直越权:普通用户登录后,寻找仅管理员可见的功能或API,尝试直接访问。或者通过修改请求参数,模拟管理员操作。
- 水平越权:用户A登录后,获取到访问自己订单的URL,如
- 支付逻辑漏洞:在支付环节,尝试修改前端传过来的订单金额为负数或0.01元;尝试重复使用同一张优惠券;尝试在支付成功回调时篡改状态。
- 并发竞争条件:在领取优惠券、秒杀商品时,同时发起数十个相同的请求,看是否会超发。
3.3 第三阶段:漏洞验证与报告撰写
发现一个可疑点后,不要急于报告,必须进行严谨的验证。
3.3.1 漏洞确认与影响面评估
- 可复现性:清除浏览器缓存、Cookie,换一个浏览器或环境,按照步骤重新操作,漏洞是否稳定复现?
- 危害证明:不要只说“这里可能存在XSS”。要证明危害。对于XSS,弹窗
alert(document.domain)证明可以执行代码;对于越权,截图展示能访问他人数据;对于信息泄露,展示读取到的敏感文件内容。 - 影响范围:这个漏洞影响所有用户还是特定用户?是影响一个页面还是整个系统?能否进一步利用(如XSS打Cookie进而接管账户)?
3.3.2 编写高质量漏洞报告一份清晰、专业的报告能极大提升审核通过率和厂商好感度。报告应包含:
- 漏洞标题:简明扼要,如“【XX系统】订单ID篡改导致水平越权访问他人订单信息”。
- 漏洞等级:参考SRC平台的标准(高危、中危、低危、信息),客观自评。
- 漏洞详情:
- 目标URL:完整的漏洞触发地址。
- 测试账号:你使用的测试账号信息(如手机号/邮箱,可在报告中打码部分字符)。
- 复现步骤:用1、2、3…列出详细操作步骤,像教程一样让审核人员能跟着做一遍。这是报告的核心。
- 请求与响应:附上Burp抓取的原始HTTP请求和响应包(可去除敏感Cookie)。
- 漏洞证明:截图或录屏,关键信息用红框标出。
- 漏洞原理与修复建议:简要分析漏洞产生的原因(如“服务端未对订单ID进行所属权校验”),并给出修复建议(如“在查询订单前,校验当前登录用户ID与订单所属用户ID是否匹配”)。
- 时间线:注明发现时间。
实操心得:在复现步骤中,使用“第一步:登录账号A(test@example.com)”、“第二步:访问页面...”这样的描述,比单纯贴图更清晰。修复建议要具体、可操作,这体现了你的专业性,厂商也更愿意采纳。
4. 核心漏洞类型实战详解与技巧
掌握了流程,我们再深入几种最常见漏洞的实战挖掘技巧。
4.1 XSS(跨站脚本)漏洞挖掘进阶
反射型XSS相对好找,但存储型DOM型XSS需要更多技巧。
- 寻找富文本编辑器:论坛发帖、评论、个人简介等处是存储型XSS的高发区。测试时,先输入一些普通文本,看提交后是如何渲染的。如果支持HTML,再尝试插入简单的标签。注意,很多编辑器会过滤
<script>,但可能放过<img>、<svg>、<iframe>等标签的事件属性。 - 关注“输出点”:你的输入在哪里被展示?不仅在网页正文,还有可能在HTTP响应头、JS代码、标签属性里。例如,你的输入被原样放入
document.cookie或者eval()函数中,就可能造成XSS。 - 利用编码与混淆:如果直接输入
<>被过滤,尝试HTML实体编码、JS Unicode编码,或者利用解析差异。例如,在innerHTML中,<img src=x onerror=alert(1)>可能被过滤,但<img src=xonerror=alert(1)>(使用反引号)有时能绕过。 - DOM型XSS的追踪:这需要分析前端JS代码。在开发者工具的Sources面板,搜索
location.hash、document.URL、innerHTML、eval、setTimeout等关键词,看是否有用户可控的数据未经净化就传入了危险函数。
4.2 越权访问漏洞的深度挖掘
越权是逻辑漏洞的典型,关键在于理解程序的权限校验逻辑在哪里失效。
- 参数遍历:不仅仅是数字ID,还包括UUID、哈希值等。使用Burp Intruder的“狙击手”模式,对目标参数进行递增或字典遍历。
- 状态码与响应差异:对比越权请求成功和失败时的响应。成功时可能返回200状态码和完整数据,失败时可能是403、404,或者返回一个空数组、错误信息。有时,失败响应体里会泄露一些信息。
- 多步骤操作中的越权:有些操作需要多个请求完成。检查在后续的请求中,是否还需要校验权限。可能第一步校验了,第二步就信任了第一步的结果。
- “平行越权”与“交叉越权”:不仅测试同类型对象(A用户订单 vs B用户订单),还要测试不同类型对象之间的权限(用户能否访问管理员接口?普通商品能否用VIP价格购买?)。
4.3 信息泄露漏洞的全面排查
这类漏洞技术含量不高,但贵在全面和细心。
- 备份文件与源码泄露:使用字典扫描
.git、.svn、.DS_Store、index.php.bak、wwwroot.zip、tar.gz等。发现.git目录后,可以使用git-dumper等工具尝试恢复完整源码。 - 配置信息泄露:扫描
/admin、/phpinfo.php、/web.config、/.env、/config.json等。phpinfo页面会泄露大量服务器信息。 - 错误信息泄露:通过触发错误(如非法参数、超长输入),让应用返回详细的报错信息,其中可能包含路径、SQL语句片段、数据库类型等。
- 接口信息泄露:通过JS文件(
app.js、chunk.js)、前端源码,寻找未鉴权的API接口。有时移动端APP的API接口也会对Web暴露。 - 搜索引擎语法:在
fofa、shodan中使用title=“index of /”查找目录列出漏洞,使用body=“数据库密码”等关键词查找敏感信息。
5. 常见问题、排查技巧与避坑指南
这条路充满荆棘,以下是新手最容易遇到的问题和我的解决经验。
5.1 为什么我什么都找不到?
- 问题:按照教程测试了一遍,毫无收获。
- 排查与解决:
- 目标太“硬”:换一个目标,比如从教育SRC或新上线的小程序开始。
- 测试不够深入:你只是测试了“有没有”,没有测试“如果…会怎样”。尝试组合参数测试,尝试在正常流程中插入异常步骤。
- 思维定式:不要只盯着登录、注册、支付。去测试“忘记密码”的链接有效期、测试“头像上传”的文件类型和路径、测试“消息通知”的未读数量篡改。边缘功能常被遗忘。
- 缺乏耐心:挖洞可能连续几天没结果,然后在一个下午发现好几个。保持平常心,持续学习。
5.2 漏洞无法稳定复现怎么办?
- 问题:有时候能成功,有时候失败。
- 排查与解决:
- 清理环境:彻底清理浏览器缓存、Cookie、LocalStorage。使用无痕模式测试。
- 记录所有变量:记录下触发漏洞时完整的请求序列、时间戳、服务器返回的Token或Session。可能是某个中间状态导致的。
- 并发问题:如果是竞争条件漏洞,需要精确控制请求时序。使用Burp的Turbo Intruder插件或编写Python脚本进行高并发测试。
- 环境差异:确认测试环境(如测试账号的权限、账户状态)是否完全一致。
5.3 提交的报告被忽略或判定为“无风险”、“重复”?
- 问题:辛苦挖到的洞,厂商不认可。
- 排查与解决:
- 报告质量差:检查你的报告是否步骤清晰、证据确凿、语言通顺。参照优秀报告模板重写。
- 漏洞危害描述不清:说清楚这个漏洞能做什么。不能只说“这里有个反射型XSS”,要说“攻击者可构造恶意链接,诱骗管理员点击,从而窃取管理员Cookie,接管后台系统”。
- 已知或已修复问题:在测试前,先看看该SRC已公开的漏洞报告,避免重复劳动。如果被判定为“已知”,可以尝试寻找该漏洞的变种或更深层次的利用方式。
- 厂商标准不同:有些厂商对Self-XSS(需要用户自己输入payload攻击自己)、无敏感操作的CSRF等漏洞评级很低或不予接收。提交前最好阅读该SRC的漏洞评级标准。
5.4 我的IP被屏蔽了怎么办?
- 问题:测试过程中,突然无法访问目标网站。
- 排查与解决:
- 立即停止测试:这是最重要的。你的测试行为可能触发了WAF或风控规则。
- 降低测试频率:在Burp中设置请求间隔(Throttle),模拟真人操作速度,避免爆破式扫描。
- 使用代理或切换网络:如果需要继续测试,可以更换IP地址,但务必更加谨慎。
- 检查测试Payload:是否使用了破坏性过强的Payload(如
sleep(20))?是否对同一个端点进行了海量请求?
5.5 如何提升自己的挖掘能力?
- 持续学习:关注安全社区(如先知、Seebug、安全客),阅读高质量的漏洞分析文章,理解漏洞原理而不仅仅是利用工具。
- 代码审计:当你对某种漏洞(如Java反序列化、PHP文件包含)感兴趣时,去找一个存在该漏洞的开源项目源码,自己动手调试分析,理解漏洞从产生到利用的完整链条。这能极大提升你的“内力”。
- 参与众测项目:在合规的众测平台上,选择适合自己水平的项目进行实战。与其他白帽子交流,学习他们的思路和技巧。
- 构建知识体系:将学到的漏洞案例、测试技巧、工具用法分门别类地记录到你的笔记中,形成自己的“漏洞库”和“武器库”。
挖洞的过程,是一个不断与自己较劲、与系统博弈的过程。它考验技术,更考验心态、细心和创造力。从第一个信息泄露漏洞,到第一个有影响力的逻辑漏洞,每一步成长都清晰可见。记住,每一个伟大的白帽子,都是从第一个“Hello World”级别的漏洞开始的。现在,打开一个你感兴趣的SRC平台,从信息收集开始,迈出你的第一步吧。