新手友好!从Level 1到18:手把手带你用Burp Suite通关XSS-Game靶场(附实战截图)
从零到精通:Burp Suite实战XSS-Game靶场全攻略
第一次接触Web安全时,那些晦涩难懂的安全术语总让人望而生畏。直到我发现了XSS-Game这个神奇的靶场——它就像游戏里的新手村,用18个精心设计的关卡,把抽象的XSS漏洞变成了可触摸的实战体验。本文将带你用Burp Suite这把"瑞士军刀",从Level 1一路通关到Level 18,每个步骤都配有实战截图,就像老手在旁边手把手教学。
1. 环境准备与工具配置
工欲善其事,必先利其器。在开始XSS冒险之前,我们需要准备好以下装备:
- XSS-Game靶场:Google提供的免费XSS练习平台(可直接访问或本地搭建)
- Burp Suite Community Edition:功能强大的Web代理工具(免费版已足够)
- Chrome/Firefox浏览器:建议安装
FoxyProxy等代理管理插件
Burp Suite基础配置流程:
- 启动Burp Suite后,进入
Proxy→Options选项卡 - 确保代理监听端口为
8080(默认设置) - 在浏览器中配置代理为
127.0.0.1:8080 - 访问
http://burp下载安装CA证书
重要提示:首次使用时需在浏览器访问
http://burp安装CA证书,否则无法拦截HTTPS流量
验证代理是否生效的小技巧:在浏览器访问任意网页,查看Burp的HTTP history中是否出现记录。如果看到类似下面的拦截记录,说明配置成功:
GET / HTTP/1.1 Host: example.com User-Agent: Mozilla/5.02. Level 1-5:初识XSS基础攻击模式
2.1 Level 1:最简单的反射型XSS
这一关是标准的反射型XSS案例,攻击流程清晰展示了XSS的核心原理:
- 在用户名字段输入测试payload:
<script>alert(1)</script> - 提交后观察页面响应,发现弹窗出现
- 右键查看网页源码,关键代码如下:
<h2>Hello, <script>alert(1)</script></h2>技术要点:
- 输入点:URL参数
?query= - 输出点:
<h2>标签内部 - 漏洞成因:未对用户输入做任何过滤处理
2.2 Level 2:属性值中的XSS
难度稍有提升,需要闭合HTML属性。通过Burp拦截请求后修改参数:
POST /level2 HTTP/1.1 ... searchKeyword="><svg onload=alert(2)>源码分析亮点:
$search = $_GET['q']; echo '<input type="text" value="'.htmlspecialchars($search).'">'; echo '<div>您搜索了: '.$search.'</div>';绕过技巧对比表:
| 过滤情况 | 可用Payload | 原理说明 |
|---|---|---|
| 输出在属性值中 | "><script>alert(2)</script> | 闭合value属性 |
| 过滤了<> | " onclick="alert(2) | 利用事件处理器 |
| 大小写过滤 | <ScRipt>alert(2)</sCriPt> | 大小写变异 |
3. Level 6-10:进阶过滤与绕过技术
3.1 Level 6:大小写绕过实战
这一关引入了关键词过滤,但存在致命缺陷——未统一大小写。通过Burp的Repeater模块可以快速测试:
- 拦截原始请求发送到Repeater
- 修改参数为:
q="><Script>alert(6)</Script> - 观察响应中的脚本被执行
Burp操作截图要点:
- 显示
Repeater界面的请求/响应面板 - 高亮显示修改后的payload位置
- 展示浏览器中的实际弹窗效果
3.2 Level 8:HTML实体编码妙用
当直接输入被禁止时,编码技术就派上用场了。这一关需要构造:
javascript:alert(8)但直接输入会被过滤,改用HTML实体编码:
javascript:alert(8)编码转换原理:
s→s(ASCII码十进制)- 浏览器会自动解码后执行
4. Level 11-13:HTTP头部注入实战
4.1 Level 11:Referer头注入
这一关开启了新的攻击面——HTTP头部。使用Burp拦截请求后:
- 在
Proxy→Intercept选项卡拦截请求 - 手动添加头部:
Referer: " onclick=alert(11) - 放行请求后页面会出现可点击的输入框
关键操作截图:
- 显示Burp的拦截界面
- 展示添加恶意Referer头的位置
- 页面新增输入框的DOM变化
4.2 Level 13:Cookie注入的艺术
Cookie操作是Web安全的重要课题。这一关需要:
- 拦截请求后修改Cookie头:
Cookie: user=" onclick=alert(13)- 观察页面新增的隐藏输入框
- 点击触发XSS
Burp Suite高级技巧:
- 使用
Ctrl+R快速发送请求到Repeater - 在
Decoder模块练习各种编码转换 - 通过
Comparer对比不同payload的响应差异
5. Level 14-18:高级攻击向量解析
5.1 Level 16:编码替代与空格处理
这一关过滤了空格和斜杠,需要创造性解决方案:
http://xss-game.appspot.com/level16?q=<img%0aonerror=alert(16)>绕过技术详解:
%0a:URL编码的换行符(替代空格)onerror:当图片加载失败时触发- 无需闭合标签即可生效
5.2 Level 18:事件处理器的高级应用
最终关展示了DOM型XSS的优雅解法:
http://xss-game.appspot.com/level18?arg02=data onmouseover=alert(18)技术深度解析:
- 参数直接拼接为DOM属性
onmouseover事件不需要用户点击- 利用空格分隔属性实现代码注入
在Burp中测试不同事件处理器:
| 事件类型 | 示例payload | 触发方式 |
|---|---|---|
| onmouseover | onmouseover=alert(1) | 鼠标悬停 |
| onfocus | onfocus=alert(1) autofocus | 元素获焦 |
| onload | <img src=x onload=alert(1)> | 资源加载 |
6. 防御方案与实战建议
通关后最重要的是理解如何防御。以下是企业级防护方案:
客户端防护:
<!-- CSP头部示例 --> Content-Security-Policy: default-src 'self'; script-src 'unsafe-inline'服务端过滤代码示例(PHP):
$input = $_GET['q']; // 移除所有HTML标签 $clean = strip_tags($input); // 转换特殊字符 echo htmlspecialchars($clean, ENT_QUOTES, 'UTF-8');Burp Suite安全测试工作流:
- 使用
Scanner自动检测常见漏洞 - 通过
Intruder进行模糊测试 - 用
Sequencer分析会话令牌随机性 - 最终用
Repeater手动验证漏洞
在真实项目中,我习惯先使用<img src=x onerror=console.log(1)>这类非侵入性payload进行测试,确认存在漏洞后再升级为弹窗验证。记住,永远要在授权范围内进行测试,未经许可的安全测试可能涉及法律风险。
