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:伪协议

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编码内容

通用防御措施

  1. 对所有用户输入进行HTML实体编码
  2. 使用Content Security Policy (CSP)限制脚本执行
  3. 设置HttpOnly标志保护cookie
  4. 明确设置字符集为UTF-8
  5. 使用现代框架(如React, Angular)的自动编码功能
  6. 实施严格的输入验证和输出编码
  7. 定期进行安全审计和渗透测试

工具推荐

  1. Burp Suite - 用于拦截和修改HTTP请求
  2. OWASP ZAP - 自动化安全测试工具
  3. Browser Developer Tools - 用于分析DOM和修改前端限制
  4. XSS Hunter - 检测盲XSS漏洞
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漏洞