前言

一些分享还是到我的博客看吧。。。

最近对xss起了一点兴趣,正好读了几篇文章(但还远远不够,文章在文末),想在网上找个靶场练练。这点老外就比国人做得好了,网上总能找到一些有意思免费的项目对所有人开放,而这种往往都是老外搞的,不管人家绝得好玩,或者其他原因,搞技术总要有点geek精神。扯多了。。。

网站链接

https://xss-game.appspot.com/

共六关,只有解出当前关卡,才能解锁下一个关卡。

walkthrough

  1. xss-game-level1

    xss-game-walkthrough

    无过滤,直接输入payload即可。

  2. xss-game-level2

    xss-game-walkthrough

    这题类似一个留言板,首先看了一下源代码,直接输入payload无法执行,一开始以为是包裹在blockquote标签导致,后来本地测试包裹在blockquote标签的脚本是可以执行的,因此这里可能经过了处理。

    xss-game-walkthrough

    看一下源码

    xss-game-walkthrough

    这里将我们的输入放进innerHTML属性,而script标签内的js在innerHTML是无法执行的(当然想要执行也有方法),显然svg的onload事件也无法在innerHTML属性内执行。但还有很多其他的标签的on系列能执行js。如

    xss-game-walkthrough

    xss-game-walkthrough

    前者可运用于标准html,而后者可运用于html5.并且这些标签无需点击,具体可以参考文末链接

    所以此处直接使用img标签即可。

    xss-game-walkthrough

    xss-game-walkthrough

  3. xss-game-level3

    这个在源码直接看到将输入的num拼接到img标签内

    xss-game-walkthrough

    因此直接闭合

    xss-game-walkthrough

  4. xss-game-level4

    当我们触发延时时能看到图片的load属性

    xss-game-walkthrough

    看一下startTimer方法

    xss-game-walkthrough

    确实没啥东西。second注入也没有意义。Hint<foo bar='z'> is the same as <foo bar='&#x7a;>'即我们的输入会先被html实体解码。最后一个Hint确实给了启发,在单引号闭合后consloe控制台报错,明显可以注入其他函数,包括alert

    xss-game-walkthrough

    所以直接注入

    xss-game-walkthrough

  5. xss-game-level5

    这个题当我看到链接的时候就觉得可能有js伪协议来xss,果然。前端的singup页面直接渲染后端传来的next

    xss-game-walkthrough

    next我们在该页面可控

    xss-game-walkthrough

    因此直接传入js伪协议即可执行js点完Go之后我们看到Next链接为我们输入的伪协议

    xss-game-walkthrough

    点击Next触发xss

    xss-game-walkthrough

  6. xss-game-level6

    此处引入外部js

    xss-game-walkthrough

    而且我们可控尝试跨域引入js,但http关键词被过滤,但只过滤了小写,可大写绕过(就这么简单,当时竟然没想到,还在想有没有其他协议可以引入js)。

总结

xss博大精深,绝不止这几个小游戏能够概括的完的,权当娱乐,真要提升还必须要在实战中随机应变。

文章

参考

http://offsec-sureshatt.blogspot.com/2017/04/google-xss-game-solving-level-1.html

相关文章: