目录
level 1
查看网站源码,可以发现get传参name的值test插入了html里头,还回显了payload的长度
直接上payload,插入一段js代码,get传参
url?name=<script>alert()</script>
当然也能传其他的东西过掉第一关,建议参考XSS常见的触发标签
我们再看一下这关的源码
没有啥过滤的,很普通,单纯插入即可
本关小结: JS弹窗函数alert()
level 2
查看网站源码
第一个test可以跟上次一样直接插入js即可,我们先试试看
<script>alert()</script>
没成功,看一下源码
第一个test进行了html实体转义,但是第二个没有,我们只需要闭合掉双引号即可,构造payload
"> <script>alert()</script> <"
再看一下源码
果然进行了html实体转化
本关小结:闭合绕过
level 3
先输入123456,然后查看网站源码
相对于上一关,这里是单引号闭合,试一下看看
'> <script>alert()</script> <'
没想到符号也被实体化了,我们看一下源码
果然被实体化了,但是htmlspecialchars函数只针对<>大于小于号进行html实体化,我们还可以利用其他方法进行xss注入,这里我们可以利用onfocus事件绕过
先简单介绍一下onfocus事件
onfocus事件在元素获得焦点时触发,最常与 <input>、<select> 和 <a> 标签一起使用,以上面图片的html标签<input>为例,<input>标签是有输入框的,简单来说,onfocus事件就是当输入框被点击的时候,就会触发myFunction()函数,然后我们再配合javascript伪协议来执行javascript代码
所以我们可以利用这个事件来绕过<>号的过滤已达到执行js的目的,构造payload
' onfocus=javascript:alert() '
然后再点击输入框触发onfocus事件即可
本关小结 :onfocus可以绕过html实体化(即<>号的过滤)
level 4
查看一下网站源码
这里是双引号闭合,<input>标签,所以我们还能继续利用onfocus事件,构建payload
" onfocus=javascript:alert() "
看一下这关的源码
这里只是把<>号给删掉了,没多做过滤
本关小结:无
level 5
这关感觉常规的方法过不去,我们先试试看
" onfocus=javascript:alert() "
果然,这里on被替换成了o_n,先看一下这关的源码
过滤了js的标签还有onfocus事件,虽然str_replace不区分大小写,但是有小写字母转化函数,所以就不能用大小写法来绕过过滤了,只能新找一个方法进行xss注入,这里我们用a href标签法,
href属性的意思是 当标签<a>被点击的时候,就会触发执行转跳,上面是转跳到一个网站,我们还可以触发执行一段js代码
添加一个标签得闭合前面的标签,构建payload
"> <a href=javascript:alert()>xxx</a> <"
之后点击xxx,触发a标签href属性即可
本关小结:可以插入标签(如<a>标签的href属性)达到js执行的效果,前提是闭合号<"">没失效
level 6
这感觉很悬,不知道过滤了啥,输入关键字测试看看
onfocus <script> <a href=javascript:alert()>
过滤了好多,看看大小写能不能绕过
OnFocus <sCriPt> <a hReF=javascript:alert()>
发现大小写没有被过滤掉,这题能利用大小写进行绕过,所以我们可以用下面的方法,构造payload
"> <sCript>alert()</sCript> <"
" Onfocus=javascript:alert() "
"> <a hRef=javascript:alert()>x</a> <"
完事查看一下这关的源码
这关甚至还过滤掉了data,但是没有添加小写转化函数 ,导致能用大写绕过
本关小结:大小写法绕过str_replace()函数