XSS Challenges通关教程
字数 2160 2025-08-11 17:40:12
XSS Challenges通关教程详解
Stage #1: 基础XSS注入
攻击方式:直接在搜索输入框中注入JavaScript代码
- Payload:
<script>alert(document.domain)</script> - 原理:输入框未对用户输入进行任何过滤,直接执行了JavaScript代码
- 防御建议:对所有用户输入进行HTML实体编码
Stage #2: HTML标签闭合注入
攻击方式:闭合现有HTML标签后添加新的script标签
- Payload:
"><script>alert(document.domain)</script><" - 关键点:
- 查看网页源码发现可以闭合输入框的value属性
- 通过闭合双引号和尖括号,插入新的script标签
- 防御建议:对所有特殊字符(<, >, ", ')进行转义处理
Stage #3: 隐藏参数注入
攻击方式:通过POST请求中的未过滤参数注入
- Payload构造:
p1=1&p2=<script>alert(document.domain)</script> - 关键点:
- 前端输入框已做转义处理
- 发现后端未对POST请求中的所有参数进行过滤
- 需要使用Burp Suite等工具修改POST请求
- 防御建议:对所有接收参数进行过滤,包括GET和POST
Stage #4: 多参数注入
攻击方式:通过多个参数中的未过滤参数注入
- Payload:
p1=123&p2=Japan&p3="><script>alert(document.domain)</script>< - 关键点:
- 类似于Stage #2的闭合方式
- 需要识别哪个参数存在注入漏洞
- 防御建议:统一对所有用户输入进行过滤
Stage #5: 绕过长度限制
攻击方式:绕过输入框的maxlength限制
- Payload:
"><script>alert(document.domain)</script>< - 关键点:
- 通过浏览器开发者工具直接修改maxlength属性
- 或直接发送修改后的POST请求
- 防御建议:服务器端验证输入长度,不要依赖客户端限制
Stage #6: 事件处理器注入
攻击方式:利用HTML事件属性注入
- Payload:
" onmouseover="alert(document.domain)"> - 关键点:
- 当<>符号被HTML编码时,可以使用事件处理器
- 当鼠标移动到输入框时触发XSS
- 防御建议:过滤所有HTML属性中的用户输入
Stage #7: 无引号事件注入
攻击方式:不使用引号的事件处理器注入
- Payload:
s onmouseover=alert(document.domain) - 关键点:
- 双引号被过滤时,HTML属性在某些情况下可以不用引号
- 需要确保属性名和值之间没有空格
- 防御建议:严格限制用户输入中的空格和等号
Stage #8: JavaScript伪协议注入
攻击方式:利用javascript:伪协议
- Payload:
javascript:alert(document.domain); - 关键点:
- 注入到标签的href属性中
- 点击链接时触发XSS
- 防御建议:验证所有URL协议,禁止javascript:协议
Stage #9: UTF-7编码绕过
攻击方式:使用UTF-7编码绕过过滤
- Payload:
1+ACI- onmouseover=+ACI-alert(document.domain)+ADsAIg- x=+ACI- - 关键点:
- 需要设置charset=UTF-7
- 主要针对旧版IE浏览器
- 使用控制台直接绕过
- 防御建议:明确设置字符集为UTF-8,并验证内容编码
Stage #10: 过滤绕过技术
攻击方式1:双写绕过
- Payload:
"><script>alert(document.dodomainmain)</script>< - 原理:当系统过滤"domain"时,使用"dodomainmain"绕过
攻击方式2:Base64编码执行
- Payload:
"><script>eval(atob('YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=='))</script> - 关键点:
- 将alert(document.domain)进行Base64编码
- 使用atob解码后通过eval执行
- 防御建议:禁止使用eval函数,过滤Base64编码内容
通用防御措施
- 对所有用户输入进行HTML实体编码
- 使用Content Security Policy (CSP)限制脚本执行
- 设置HttpOnly标志保护cookie
- 明确设置字符集为UTF-8
- 使用现代框架(如React, Angular)的自动编码功能
- 实施严格的输入验证和输出编码
- 定期进行安全审计和渗透测试
工具推荐
- Burp Suite - 用于拦截和修改HTTP请求
- OWASP ZAP - 自动化安全测试工具
- Browser Developer Tools - 用于分析DOM和修改前端限制
- XSS Hunter - 检测盲XSS漏洞