xss从零开始(三)之怒刷google-xss

索引

xss太好玩了,刷题刷题~

level 1 easypass

地址:https://xss-game.appspot.com/level1
easy

<script>alert(1)</alert>

level 2 img标签+事件绕过

地址:https://xss-game.appspot.com/level2

过滤script标签,用事件绕过

<img src=x onerror="alert(1)">

level 3 window.location.hash

地址:https://xss-game.appspot.com/level3


看到url里,有“#”号,联想window.location.hash
那么什么是window.location.hash呢?

window.location.hash属性介绍
location是javascript里边管理地址栏的内置对象,比如location.href就管理页面的url,用location.href=url就可以直接将页面重定向url。而location.hash则可以用来获取或设置页面的标签值。比如http://domain/#admin的location.hash="#admin"。利用这个属性值可以做一个非常有意义的事情。

也就是说页面会截取#后面的内容,再将这个值替换到url里进行重定向,这里提交一句话分析一下


如果我们以单引号结尾,我们猜测这个页面会截取单引号前面的内容并把它闭合到src的双引号里。并且在后面的jpg后再追加一个单引号。既然能脱离单引号,一切都好办了,我们用on事件构造:

4' onerror="alert(1)"

成功弹框

level4 编码绕过

地址:https://xss-game.appspot.com/level4

题目给了一个自己写的js函数叫做startime,执行时会进行相应的延时
函数的闭合如图:

思路是在onload事件里构造语句,出现弹框,但是过滤了分号,那么我们可以用URL编码来代替分号

1')%3Balert('1

还有两种思路:

1') || alert('1

也可以用下面这种方法,不需要任何编码/操作符:

1');alert(1);//

我尝试用html编码绕,但是过滤了&和#

level 5

地址:https://xss-game.appspot.com/level5

这题看提示,注意singup页面的url

singup页面还看到了next按钮,查看元素发现:

奥,事情不简单,我们传入一个next值,然后重定向给href属性。果断用javascript伪协议
payload:

?next=javascript:alert(1)

弹框~

level 6

地址:https://xss-game.appspot.com/level6

这题会截取#以后的内容,加载到一个新的script标签里的src属性内。我认为是引入一个js脚本的意思。如图

这里利用DATA URI Scheme来执行js代码

http://xss-game.appspot.com/level6/frame#data:text/javascript,alert(1);
not found!