Google XSS game writeup

时间:2022-03-22 10:41:28

用过Chrome的应该知道它的XSS Auditor,它可是灭掉了不少XSS代码呢……Google对XSS是很有研究的,不然也不敢大张旗鼓的悬赏(7500刀哦亲),还开发了一个XSS小游戏 http://xss-game.appspot.com/ (需*……),一共有6关,做完有“大蛋糕”奖励哦!下面就来看一下。

Level 1: Hello, world of XSS

既然是“Hello world”级别的,想必就是简简单单弹个框在输入框里输入<script>alert(1)</script>,然后点击按钮提交,弹框了,轻松愉快。

Level 2: Persistence is key

这个类似评论框,<script>被过滤了,试试插入图片标签<img src=# onerror=alert(1) />,提交后成功弹窗了,而且是存储型XSS,每次查看都会弹框

Level 3: That sinking feeling…

没有输入框,有三张图片可以切换,可以看到图片切换跟URL中#之后的数字有关系,查看源代码之后发现<script>标签中有这么一句html += "<img src='/static/level3/cloud" + num + ".jpg' />";,很明显是决定图片地址的,而num来自于#后的输入,我们尝试注入,注入的时候要闭合语句,不要弄出语法错误,我的语句是1.jpg' onload=alert(1) '1,这样就变成<img src='/static/level3/cloud1.jpg' onload=alert(1) '1.jpg' ?>,这样,访问http://xss-game.appspot.com/level3/frame#1.jpg‘ onload=alert(1) ‘1,即可弹框

Level 4: Context matters

有输入框,是个定时器程序,查看timer.html的源代码发现<img src="/static/loading.gif" onload="startTimer('{{ timer }}');" />,其中的timer就是输入框的输入,尝试注入并注意闭合语句,在输入框中输入1'),alert(1) ('便可弹框。

Level 5: Breaking protocol

这个虽然也有输入框,但是提交后发生跳转,而且跳转到的网页跟刚才输入的东西好像没啥关系……查看signup.html源代码发现,是真的没关系……不过发现这么一句<a href="{{ next }}">Next >></a>,Next跳转后的地址是由URL中的变量next决定的,于是我便想在此注入signup" onmouseover=alert(1) ",结果双引号被转换成了&quot,对confirm.html页面的注入依旧无效,页面跳来跳去的就是不弹框……无奈之下看了看提示,想起对标签还有href="javascript:alert(1)"这种执行js的方式啊,把next赋值成javascript:alert(1),刷新该网页,然后点击“NEXT”,弹框!

Level 6: Follow the