Web 漏洞挖掘入门到进阶教程
1. 写在前面学习路线与授权声明Web 漏洞挖掘是网络安全中入门相对友好、成长路径清晰的领域但也是一把双刃剑。在学习任何技术之前必须先明确边界只对授权目标进行测试包括自建靶场、CTF 题目、SRC 授权范围、甲方授权渗透测试项目。未授权测试即违法根据《中华人民共和国网络安全法》《刑法》第 285 条、第 286 条未经授权对他人系统进行扫描、渗透、抓取数据可能构成非法侵入计算机信息系统罪、非法获取计算机信息系统数据罪。优先选择合法练习平台DVWA、Pikachu、SQLi-Labs、upload-labs、HackTheBox、TryHackMe、CTFHub、BUUCTF 等。本教程按「基础认知 → 信息收集 → 常见漏洞原理与实战 → 工具链 → 报告输出」组织适合有一点 Web 基础了解 HTTP、HTML、数据库基本概念的同学。2. Web 漏洞挖掘的整体思路漏洞挖掘不是拿到目标就一顿扫描成熟的思路通常遵循以下阶段明确目标与范围确认授权范围、资产列表、测试时间窗口、禁止操作。信息收集子域名、端口、指纹、目录、历史档案、泄露信息。漏洞探测与验证从最容易暴露的点开始登录、搜索、上传、接口、参数。漏洞利用与影响评估证明危害即可不拖库、不破坏数据。报告输出清晰复现步骤、危害说明、修复建议。核心原则先广度后深度先易后难先被动后主动验证危害即可。3. 信息收集漏洞挖掘的地基信息收集的质量往往决定后续能否命中漏洞。常用手段如下。3.1 子域名收集# subfinder 被动收集subfinder-dexample.com-osubs.txt# 暴力枚举amass enum-brute-dexample.com-oamass_subs.txt# 在线平台# 微步在线、FOFA、Hunter、ZoomEye、Quake、VirusTotal、crt.sh3.2 端口与服务指纹# nmap 快速端口扫描nmap-sT-sV-T4-p---openexample.com-oNnmap.txt# 指纹识别whatweb https://example.com wappalyzer# 浏览器插件# 网页截图与批量指纹httpx-lurls.txt-sc-title-tech-detect-ohttpx_out.txt3.3 目录与接口发现# 目录扫描ffuf-uhttps://example.com/FUZZ-w/usr/share/wordlists/dirb/common.txt dirsearch-uhttps://example.com-ephp,asp,aspx,jsp,json,zip,bak# JS 接口提取# 浏览器开发者工具搜索 api/ajax/fetch或使用工具提取 JS 中的端点3.4 资产测绘与历史档案FOFA 语法示例domainexample.com、title后台管理、body技术支持。查看 Wayback Machine 的历史页面可能暴露曾经上线过的后台入口、测试文件、泄露配置。信息收集阶段要形成一张「资产表」域名、IP、端口、服务版本、框架指纹、疑似后台、API 接口。4. 常见 Web 漏洞原理与实战4.1 SQL 注入SQL Injection原理程序将用户输入直接拼接进 SQL 语句攻击者通过构造特殊字符改变语句语义。检测方法# 常见测试载荷 1 or 11 1 and 11 1 and 12 1 order by 10--手工判断流程找参数点id、keyword、sort、category、page。验证是否报错、布尔差异、时间延迟。判断数据库类型报错信息、版本函数。根据类型决定注入方式联合查询、报错注入、布尔盲注、时间盲注。下面将上述手工判断过程整理为决策流程图是是否否是否是否寻找参数点提交测试载荷是否报错报错信息是否回显判断数据库类型选择报错注入确认回显位选择联合查询布尔差异明显选择布尔盲注时间延迟明显选择时间盲注更换参数点或使用辅助工具自动化工具sqlmap-uhttps://example.com/index.php?id1--batch--dbssqlmap-rrequest.txt--level3--risk2--current-db手工布尔盲注示例sqlmap 更适合批量检测但理解手工布尔盲注原理有助于在工具被拦截时继续验证。下面用 Python 的requests和正则表达式通过对比「恒真」与「恒假」条件的响应差异进行检测importreimportrequests# 仅用于授权测试环境如 DVWA、SQLi-Labs、CTF 靶场urlhttps://example.com/index.php?id1srequests.Session()defis_true(payload:str)-bool:判断当前条件下页面中是否出现基准文本resps.get(url,params{id:payload},timeout10)# 正则需根据目标页面调整例如首页固定显示 Welcome 或某字段returnbool(re.search(rWelcome|user info|admin,resp.text,re.I))# 恒真与恒假两组条件观察响应差异true_payload1 and 11false_payload1 and 12ifis_true(true_payload)andnotis_true(false_payload):print([] 检测到布尔盲注恒真/恒假条件产生不同响应)else:print([-] 未发现明显布尔差异请检查返回内容或更换正则判据)原理说明布尔盲注的核心是后端 SQL 查询会因and后面的条件为真或假返回「正常数据」或「空数据」两种不同结果。示例中的is_true()使用正则匹配固定关键词判断响应是否落在「真」分支这种稳定的布尔差异就是后续逐字符猜解数据库名、表名、字段值的基础。局限性正则判据需要结合目标页面调整判据写错会导致误报或漏报。仅适用于存在稳定布尔差异的场景若页面无差异化输出需改用时间盲注或报错注入。示例只演示检测验证不包含自动猜解完整数据的逻辑定位是帮助理解手工盲注流程。修复建议使用参数化查询/预编译、输入校验、最小权限数据库账号、WAF 加固。4.2 XSS跨站脚本分类反射型、存储型、DOM 型。检测思路scriptalert(1)/scriptimgsrcxonerroralert(1)svg/onloadalert(document.domain)注意现代浏览器与 CSP 会拦截常规触发测试时要结合上下文判断标签是否被过滤、是否进入 DOM 执行。修复建议输出编码、富文本白名单过滤、CSP 策略、HttpOnly Cookie。4.3 越权漏洞IDOR / 水平垂直越权核心思路替换资源 ID、用户 ID、订单号等参数观察是否返回他人数据。测试步骤准备两个账号 A、B。A 登录后访问自己资源的接口记录参数。将 ID 替换为 B 的资源 ID观察返回是否有 B 的数据。同时测试低权限账号调用高权限接口垂直越权。修复建议服务端做严格鉴权与数据归属校验不信任前端传入的身份标识。4.4 文件上传漏洞检测点前端校验绕过改 JS、直接抓包重放。后缀黑名单绕过大小写、双写、php3/php5/phtml、php.jpg、.htaccess技巧。内容校验绕过文件头伪造GIF89a 脚本内容。解析漏洞与路径可控。练习请使用 upload-labs切勿直接拿真实网站测试恶意文件上传。修复建议白名单后缀、重命名文件、存储目录禁止执行权限、内容二次校验、隔离存储。4.5 命令注入 / RCE检测点ping 测试、备份、下载、日志查看等功能。127.0.0.1; id 127.0.0.1 | whoami 127.0.0.1 dir whoami $(whoami)注意只验证可执行如回显当前用户、打印时间戳不植入后门、不破坏系统。修复建议避免使用 shell 执行外部命令、采用白名单、参数化 API。4.6 SSRF服务端请求伪造原理服务器作为代理向外发起请求攻击者控制目标地址。检测点URL 导入、图片代理、远程加载、回调地址、PDF 生成、API 转发。利用方向探测内网端口、访问内网服务、读取云元数据如http://169.254.169.254/latest/meta-data/。修复建议目标地址白名单、禁止内网段、协议限制、DNS 重绑定防护。4.7 逻辑漏洞逻辑漏洞没有统一检测公式核心是理解业务流支付金额篡改、优惠券重复使用、负数数量。验证码绕过、短信轰炸、密码重置流程缺陷。注册参数可控角色、邀请码、余额。并发条件竞争双开抢购、重复领取。方法画业务流程图标注每一步的信任假设逐一打破假设。5. 工具链与环境搭建5.1 代理抓包工具工具用途Burp SuiteWeb 渗透测试核心抓包、重放、扫描、爆破mitmproxy命令行/脚本化抓包FiddlerWindows 友好抓包分析Burp Suite 常用模块Proxy、Repeater、Intruder、Decoder、Comparer、Extensions如 Autorize、Turbo Intruder、HaE。5.2 扫描器对比工具特点Xray被动扫描、易用、社区版功能较强Nuclei模板化扫描、生态丰富AWVS商业级综合扫描SQLMapSQL 注入专用扫描器只是辅助手工验证才是判断漏洞真实性的关键。5.3 本地靶场搭建# Docker 一键搭建 DVWAdockerrun--rm-it-p80:80 vulnerables/web-dvwa# 或用集成靶场dockerpull area51/pikachudockerpull c0ny1/upload-labs5.4 常用工具下载地址汇总以下工具仅用于授权测试与本地学习环境请优先从官方渠道或 GitHub 仓库下载。信息收集类工具下载地址Nmaphttps://nmap.org/download.htmlSubfinderhttps://github.com/projectdiscovery/subfinderAmasshttps://github.com/owasp-amass/amassWhatWebhttps://github.com/urbanadventurer/WhatWebhttpxhttps://github.com/projectdiscovery/httpxWappalyzerhttps://www.wappalyzer.com/目录与接口发现工具下载地址ffufhttps://github.com/ffuf/ffufdirsearchhttps://github.com/maurosoria/dirsearch抓包与代理工具下载地址Burp Suitehttps://portswigger.net/burpmitmproxyhttps://mitmproxy.org/Fiddlerhttps://www.telerik.com/fiddlerCaidohttps://caido.io/扫描与注入工具下载地址SQLMaphttps://github.com/sqlmapproject/sqlmapXrayhttps://github.com/chaitin/xrayNucleihttps://github.com/projectdiscovery/nucleiAWVShttps://www.acunetix.com/Gobyhttps://gobies.org/Yakithttps://github.com/yaklang/yakit本地靶场工具下载地址DVWAhttps://github.com/digininja/DVWAPikachuhttps://github.com/zhuifengshaonianhanlu/pikachuupload-labshttps://github.com/c0ny1/upload-labsSQLi-Labshttps://github.com/Audi-1/sqli-labs6. 实战案例一次完整的漏洞挖掘复盘以下以授权 SRC 测试为例展示一次典型挖掘过程。目标某电商测试环境shop-test.example.com。信息收集subfinder-dexample.com-silent|greptesthttpx-lsubs.txt-title-tech-detect发现shop-test.example.com使用 ThinkPHP 5.0且返回登录页。漏洞一未授权接口访问目录扫描发现/api/user/list未做鉴权直接返回用户手机号与订单信息属于高危害越权/信息泄露。漏洞二验证码逻辑缺陷登录接口验证码刷新后旧验证码仍有效且验证码与手机号绑定不严格可爆破短信验证码。漏洞三订单查询水平越权登录普通用户 A 后将订单查询接口的orderId由自身订单替换为他人订单号返回他人收货地址与商品明细。最终输出每个漏洞附复现 URL、请求包、响应截图、危害说明、修复建议。严重等级按影响范围与数据敏感度评定。这次测试的核心经验是信息收集阶段发现的测试环境防护往往弱于生产环境越权类漏洞占比很高且危害直接。7. SRC 挖掘与报告规范7.1 漏洞等级评估参考等级典型场景严重直接 RCE、核心数据库拖库、大量用户敏感信息泄露高危SQL 注入、任意文件上传、严重越权、SSRF 打内网中危存储型 XSS、一般越权、敏感信息泄露低危反射型 XSS、缺少安全头、CORS 配置不当7.2 优质报告模板报告应包含以下要素漏洞标题[系统名] 某接口存在 SQL 注入。漏洞地址完整 URL 与参数。漏洞类型CWE 编号 OWASP 分类。复现步骤逐步截图/代码片段让审核人员能复现。危害描述站在业务与用户角度说明影响。修复建议给出代码级/配置级可落地措施。7.3 遵守平台规则测试前签署授权协议或在 SRC 规则内活动。不做拖库、删库、恶意篡改。不在测试后留存敏感数据立即删除。不公开未修复漏洞细节。9. 学习资源与进阶路线速查笔记以下内容面向日常靶场练习与授权实战挖洞只做快速对照详细原理与操作请回看第 4 章与第 7 章。8.1 核心漏洞原理与修复速查表漏洞类型核心原理修复方案SQL 注入用户输入被拼接进 SQL 语句改变查询语义参数化查询/预编译、输入校验、最小权限账号XSS用户输入被当作 HTML/JS 执行浏览器信任了不可信数据输出编码、富文本白名单过滤、CSP 策略越权漏洞服务端未校验资源归属或角色权限信任了前台传入的身份/ID服务端严格鉴权、数据归属校验不信任前端身份标识文件上传只依赖前端校验或黑名单导致恶意脚本被上传并执行白名单后缀、重命名、存储目录禁执行、内容二次校验命令注入/RCE外部输入进入 shell 命令或模板/表达式执行链避免直接调用 shell白名单参数、参数化 APISSRF服务端代用户发起请求攻击者控制目标地址访问内网或云元数据目标地址白名单、禁止内网段、限制协议逻辑漏洞业务流程中的信任假设被打破如金额、验证码、角色、并发条件服务端重算关键数据、验证码失效、事务锁定8.2 常见漏洞「万能 Payload」速查SQL 注入基础载荷1 or 11 1 and 12 1 order by 10-- 1 union select 1,2,3--XSS 基础载荷scriptalert(1)/scriptimgsrcxonerroralert(1)svg/onloadalert(document.domain)命令注入基础载荷127.0.0.1; id 127.0.0.1 | whoami 127.0.0.1 dir whoami $(whoami)文件上传绕过关键词后缀php3、php5、phtml、php.jpg、.htaccess文件头伪装GIF89a 脚本内容拆解上传点前端校验、文件名、Content-Type、文件内容、存储路径、解析规则SSRF 常见目标http://169.254.169.254/latest/meta-data/ http://127.0.0.1:22 http://127.0.0.1:63798.3 快速测试步骤与修复对照漏洞类型快速测试步骤修复建议SQL 注入先触发异常 → 再1 and 11/12看布尔差异 → 有回显试联合查询无回显试报错/盲注参数化查询、统一入口做输入校验XSS在搜索、留言、个人资料等回显点插入标签观察是否被过滤、编码或执行上下文相关输出编码CSP 兜底越权漏洞注册 A/B 两账号替换资源 ID、用户 ID、订单号验证是否返回对方数据数据归属校验、接口级鉴权文件上传先确认可传文件类型与解析路径再测试黑白名单、Content-Type、文件头绕过白名单后缀、重命名、禁执行权限命令注入在 ping、下载、导出、备份等入口拼接; | 与id等命令只验证不破坏不直接执行 shell使用白名单插件或参数化 APISSRF在 URL 导入、图片代理、回调地址、远程加载等入口填写内网地址或云元数据地址地址白名单、禁止内网段、限制协议、防 DNS 重绑定逻辑漏洞画业务流程图测试金额、优惠券、验证码、角色、并发领取等关键步骤关键状态放服务端服务端重算并做事务控制8. 学习资源与进阶路线9.1 必读资料OWASP Top 10最新版《Web 安全攻防渗透测试实战指南》《白帽子讲 Web 安全》PortSwigger Web Security Academy免费在线靶场HackTricks 知识库9.2 进阶方向漏洞研究源码审计PHP/Java/Node、框架历史漏洞分析。自动化武器化编写 Burp Suite 插件、Nuclei 模板、Fuzz 规则。红队攻防内网横向、域渗透、免杀、云安全。代码审计从功能点入手定位污点传播挖掘 0day。9.3 每日训练建议每天刷 12 道 CTF Web 题BUUCTF、攻防世界。每周跟一个 CVE 复现结合 GitHub PoC 与官方补丁。每月打一次 HackTheBox 或 TryHackMe 房间。积累个人笔记与漏洞知识库。9. 总结Web 漏洞挖掘是一项「理解原理 大量实践 细心观察」的工作。建议以信息收集打底、越权与逻辑漏洞为突破口、扫描器辅助验证的路径入门同时始终守住授权与合规底线。安全学习的终点不是掌握多少攻击技巧而是能否帮助业务更早发现风险、更稳地保护用户数据。祝你在合法合规的前提下越挖越深越学越透。