刚装好Kali Linux和DVWA的那段时间,我盯着靶场首页发了三天呆。视频收藏了上百个,真正动手时却连从哪关开始都不知道。后来才想明白:Web安全入门最忌讳“广撒网”,与其把OWASP Top 10从头到尾刷一遍,不如先把五个最基础、出现频率最高的漏洞吃透。这五个漏洞就是SQL注入、XSS、文件上传、CSRF和弱口令。它们覆盖了服务端、客户端、网络层和人为因素,把攻防双方的底层逻辑展现得最清晰。
下面我会按实战路径逐个拆解,重点说清“怎么练”和“练到什么程度”,帮你把环境真正用起来。
SQL注入:从SQLi-Labs第一关到盲注
SQL注入的本质是用户输入被当成代码执行。理解这一点后,你会发现所有Payload都是围绕“闭合原有语句、插入恶意逻辑”展开的,而不是死记字符串。
SQLi-Labs通关路线
建议按这个顺序推进:
- Less-1至Less-4:掌握基础联合查询注入。这四关分别对应
id=1'、id=1")等不同闭合方式,核心练习点是是判断字段数(order by或union select null,null)和回显位定位(union select 1,2,3)。 - Less-5至Less-6:进入报错注入。使用
extractvalue()或updatexml()让数据库主动报错带出数据,理解“没有回显位时如何取数据”。 - Less-8至Less-10:布尔盲注。通过
and length(database())>5这类条件判断,结合页面返回的“真/假”状态逐位爆破数据。这里要配合Burp Suite的Intruder模块,设置Payload为数字1-8循环,观察Response长度差异。 - Less-9至Less-10:时间盲注。用
and if(length(database())>5, sleep(5), 0),通过响应时间判断条件真假。这是无回显、无报错场景的最后一道防线。
关键认知升级
很多人卡在Less-11后就停了,其实那之后才是分水岭。Less-11开始是POST型注入,需要把Burp Repeater用起来,手动修改Body参数。到Less-23左右会遇到过滤注释符的场景,这时要改用' or '1'='1这种不需要注释的闭合方式——这就是在训练你根据防御调整Payload的能力,而不是背固定套路。
通关后建议用DVWA的SQL Injection模块验证:Low级别直接手工注入,Medium级别加了转义需要抓包改十六进制编码,High级别用LIMIT 1限制输出,考察你如何绕过。三个难度差异明显,能帮你建立“同一漏洞在不同防御强度下的应对思维”。
XSS:三种类型的实战区分
XSS的Payload看起来简单,但很多人分不清三种类型的利用场景差异。
反射型XSS(DVWA Low级别)
输入点直接回显在页面上,构造<script>alert(document.cookie)</script>即可触发。Low级别没有任何过滤,重点是理解输入点与输出点的关系——你的Payload出现在哪个HTML标签里?是属性值还是纯文本?这决定了是否需要闭合引号或标签。
存储型XSS(DVWA Medium/High级别)
留言板场景下,Payload存入数据库后每次加载页面都会执行。Medium级别用str_replace过滤<script>,可以用<ScRiPt>大小写绕过,或者用<img src=x onerror=alert(1)>。High级别用preg_replace过滤更严格,需要尝试onmouseover、onclick等事件处理器,或者利用href="javascript:alert(1)"。
这里的关键练习是:在浏览器开发者工具的Elements面板里实时观察你的输入被渲染成了什么。很多时候Payload没生效,是因为被编码成了<实体,或者嵌套在了错误的标签层级里。
DOM型XSS(DVWA impossible级别参考)
Impossible级别虽然打不了,但值得看源码学习防御方案。DOM型XSS不经过服务端,纯靠前端JavaScript处理。比如URL参数?default=English被直接写入页面,如果代码是document.write("<option value='" + location.hash.slice(1) + "'>"),那闭合单引号后就能注入脚本。防御要点是对用户输入做输出编码而非输入过滤,因为输入点可能有多个。
文件上传:从一句话木马到解析漏洞
文件上传漏洞的利用链条是:找到上传点 → 绕过前端/服务端校验 → 获取WebShell路径 → 连接执行。
DVWA三级别差异
| 级别 | 防御机制 | 绕过方法 |
|---|---|---|
| Low | 无校验 | 直接上传PHP文件,访问路径即可 |
| Medium | 检查MIME类型 | 抓包修改Content-Type为image/jpeg |
| High | 检查文件头+扩展名白名单 | 用GIF89a伪造文件头,配合文件包含漏洞利用,或利用Apache解析漏洞(如shell.php.jpg在特定配置下被解析) |
实战中的关键细节
Medium级别的MIME校验绕过,要在Burp中拦截上传请求,把Content-Type: application/x-php改成image/jpeg。很多人忘了这一步,因为浏览器开发者工具里看不到这个Header。
High级别如果严格限制为jpg/png/gif,就需要结合文件包含漏洞或解析漏洞。比如存在本地文件包含(LFI)时,上传一个包含PHP代码的图片马(shell.jpg),再通过?page=../../uploads/shell.jpg包含执行。这引出了重要认知:单一漏洞可能打不通,但漏洞组合能形成完整攻击链。
练习时建议用蚁剑或冰蝎连接Shell,理解WebShell的通信原理。不要止步于“上传成功”,要能看到服务器上的文件列表、能执行命令,才算真正掌握。
CSRF:从原理理解到Burp自动化利用
CSRF的难点不在技术复杂度,而在理解为什么它能成立——浏览器会自动带上目标站的Cookie,而服务端不校验请求来源。
DVWA Low级别手工验证
- 登录DVWA,进入CSRF页面,修改密码并抓包
- 在Burp Repeater中右键“Engagement tools” → “Generate CSRF PoC”
- 把生成的HTML保存为
poc.html,在另一个浏览器(或隐私窗口)中打开 - 点击按钮后,目标用户的密码被修改
这个流程让你直观看到:攻击者不需要知道原密码,只要诱导已登录用户访问恶意页面即可。
Medium级别的Referer校验绕过
服务端检查Referer头是否包含目标域名。绕过方法是在自己服务器上创建同名目录,比如http://attacker.com/dvwa/,让Referer自然带上dvwa字符串。或者利用某些浏览器对Referer的处理差异。
High级别的Token防御与绕过
服务端生成随机Token,表单提交时校验。这属于正常防御,但值得用Burp的Macro功能练习自动化:设置Macro在每次请求前获取页面中的Token,再填入后续请求。这个练习的价值在于理解Token机制的工作原理,以及为什么单纯的Token如果不结合SameSite Cookie仍可能存在风险。
弱口令:Burp Suite爆破的完整工作流
弱口令漏洞看似没有技术含量,却是企业中最常见的突破口。掌握Burp Intruder的爆破模式,是后续所有暴力破解场景的基础。
标准爆破流程
- 抓包定位:拦截登录请求,发送到Intruder
- 标记变量:在Positions标签中,用
§包裹用户名和密码字段,Attack type选Cluster bomb(用户名和密码各用一个Payload集,交叉组合) - 配置Payload:Payload set 1导入常见用户名列表(如
admin、root、test),Payload set 2导入密码字典 - 结果筛选:在Options中设置
Grep - Match,匹配login failed之外的响应,或按Response长度排序找异常
进阶技巧
- Pitchfork模式:用户名和密码一一对应时使用,比Cluster bomb快得多
- 递归提取:某些系统登录失败次数过多会锁定账户,需要配合
Recursive grep从响应中提取Token或时间戳 - 自定义迭代器:针对
用户名:密码这种单字段格式,用Custom iterator设置分隔符
DVWA Brute Force模块的High级别加入了Token和延时,可以练习上述进阶功能。更重要的是理解:爆破成功的关键在于字典质量,而字典应根据目标信息定制(如公司名缩写+年份、常见默认密码组合),不是越大越好。
支付逻辑参数篡改:一个综合小案例
把上述技能串联起来,看一个实际场景:某电商网站的订单提交请求为POST /order.php,参数包含product_id=1001&quantity=1&price=299.00。
用Burp拦截后,在Repeater中尝试修改:
quantity=-1:数量负数,可能实现“退款式购买”price=0.01:直接改价格,测试服务端是否校验product_id=1002:替换为更贵商品ID,看是否按ID重新定价
这个案例同时涉及客户端校验绕过(前端JavaScript限制了数量为正,但服务端可能没校验)、业务逻辑缺陷(价格由客户端提交而非服务端查询)、越权风险(是否能用他人product_id)。它说明:漏洞往往不是孤立的,理解业务逻辑比掌握单一技术更重要。
环境准备与下一步
上述所有练习需要以下环境:
- Kali Linux:预装Burp Suite Community Edition、SQLMap等工具
- DVWA:Docker部署最方便,
docker run --rm -it -p 80:80 vulnerables/web-dvwa - SQLi-Labs:GitHub下载后部署到本地PHP环境
建议的学习节奏是:每个漏洞先在DVWA Low级别手工验证原理,再用Medium/High级别练习绕过,最后到SQLi-Labs或CTF平台做变式训练。遇到不会的Payload不要直接复制,先在本地MySQL或PHP环境里拆开测试,理解每个字符的作用。
当你能不看笔记独立完成SQLi-Labs前20关、DVWA全部High级别(除impossible)、以及一次完整的Burp爆破流程时,Web安全的基础攻防思维就已经成型了。这时候再去看OWASP Top 10的其他漏洞,或者转向内网渗透、代码审计,都会有扎实的理解根基。