XSS Challenges题目攻略

题目链接地址:http://xss-quiz.int21h.jp/

题目的目的是输出alert(document.domain);  通过后给出下一关的链接地址

本次测试用到的神器:BurpSuite,XSSEE,FireBug,Google

本次测试使用的浏览器:Chrome,Firefox,IETester(IE5.5  IE6  IE7  IE8)

1、very simple…

根据提示,直接输入

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

测试,通过

xc2

2、close the current tag and add SCRIPT tag…

根据输入内容和查看返回代码,需要先闭合前一个标签,然后构造JS代码,所以输入:

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

测试通过

xc3

3、The input in text box is properly escaped.

测试发现,第一个参数p1输入的<>被转码,

xc4

抓包,将payload添加到p2参数处

xc5

提交通过

xc6

4、invisible input field

抓包发现存在p3参数,是不可见的,将XSS payload写入p3参数

xc7

提交通过

xc8

5、length limited text box

审查元素看到输入框长度受限制

xc9

使用FireBug修改长度

maxlength = 50

提交参数

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

提交通过

xc10

6、event handler attributes

提交level 1中的payload,发现<>被转义

xc11

根据hint,需要修改JS事件处理函数属性。构造提交:

“onclick=alert(document.domain);”

查看返回页面

xc12

测试通过,返回下一关地址

xc13

7、nearly the same… but a bit more tricky.

跟level 6差不多,不过提交level 6的答案不通过,通过构造:

” onclick=alert(document.domain); ”  (注意:”引文单引号前后有空格)

提交查看返回页面

xc14

测试通过,返回下一关地址

xc15

8、the ‘javascript’ scheme.

首先提交aaaaa参数,查看返回,发现是在<a>标签的href属性中

xc16

构造:

javascript:alert(document.domain);

提交后点击链接,成功通过

xc17

9、UTF-7 XSS

根据提示要采用UTF-7编码实现XSS。由于支持UTF-7的浏览器比较难找,最终在IE 7下测试成功。

payload构造参考的Nixawk的博客http://blog.csdn.net/nixawk/article/details/28038509

p1=a%2BACI++onmouseover%2BAD0AIg-javascript%3Aalert%28document.domain%29%2BACI++id%2BAD0AIg-x&charset=UTF-7

因为UTF-7编码需要结合utf-7 bom,这部分不是很熟悉,先mark一下,需要加深学习一下。

提交后测试通过

xc18

10、s/domain//g;

测试发现是将domain过滤掉了

xc19

是个正则的过滤,相当于黑名单过滤,黑名单是很好绕过的,构造如下,测试通过

xc20

11、”s/script/xscript/ig;” and “s/on[a-z]+=/onxxx=/ig;” and “s/style=/stxxx=/ig;”

这个过滤就比较全面了

script –> xscript     script过滤成xscript

on[a-z] –> onxxx    on事件过滤成onxxx

style –> stxxx          style属性过滤成stxxx

通过google查找资料,结合先辈的攻略,使用<a>标签结合&#09;来绕过。

“><a href=”javascr ipt:alert(document.domain);”>12</a>

提交后查看返回页面

xc21

点击链接,成功

xc40

注意:在本次实验中,测试的chrome和Firefox浏览器在对于&#09;的处理结果不同,上边通过成功的是在chrome浏览器中,在Firefox中提交返回的页面是这样的

xc22

因为构造的是不完整的JS链接,点击链接后返回404错误。

个人认为是浏览器对编码方式的处理不同导致的。

12、”s/[\x00-\x20\<\>\”\’]//g;”

过滤\x00到\x20所有字符,< > ” (英文双引号) ‘(英文单引号),可以查看ASCII码表,查看

查阅资料,这个绕过需要在IE 7下,通过使用“(数字1左边的键)来绕过。构造

“onclick=alert(document.domain);

查看返回的页面,看到已经闭合value的值,JS代码成功注入

xc23

点击执行,成功

xc24

13、style attribute

根据提示,需要控制style的属性,style跟JS连接的属性有expression(JS),url(JS)。需要注意的是expression是IE浏览器早期版本中的CSS属性值,实验使用IE 6浏览器。构造

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

发现运行成功,但是是个死循环,这个alert窗口关不掉

xc25

构造相对更友好的payload:

background:url(“javascript:alert(document.domain);”);

测试成功

xc26

14、s/(url|script|eval|expression)/xxx/ig;

这次XSS Filter将url,script,eval,expression全都过滤成xxx,这是基于黑名单的过滤,但尝试大小写混淆后发现不好使,所以构造/**/来绕过,并尽量减少黑名单关键字的使用。构造如下:

aa:expression(onmouseover=function(){alert(document.domain)})

测试通过

xc27

15、document.write();

首先输入

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

查看返回值

xc28

可以看到<>都被过滤,接下来构造\x编码

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

提交后查看返回值,发现 \ 被过滤

xc29

构造两次 \\ 尝试

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

提交后返回成功

xc30

16、”document.write();” and “s/\\x/\\\\x/ig;”

这次将level 15中的方法给禁止掉了,需要考虑其他的编码方式,采用\u003c编码方式

编码一次

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

测试发现\被过滤,构造两次 \\

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

测试成功

xc31

17、multi-byte character

在Name和E-Mail处输入最简单的xss代码,发现<>”  被过滤

xc32

通过提示以及查找资料,了解到需要闭合标签属性,并注入payload,但是原理还是不太清楚,先mark下。构造:

p1=1%A7&p2=+onmouseover%3Dalert%28document.domain%29%3B+%A7(需要抓包修改参数)

测试浏览器为IE5.5

xc33

提交后,返回结果,只有Name框,很奇怪?不是太理解。返回下一关链接

xc34

18、us-ascii high bit issue

查看攻略,就是把最高位的值变成1。

例如:< — 十六进制 3C  — 对应二进制是 0011 1100 —- 最高位置1 变为 1011 1100 — 也就是 BC

可以理解为 3C + 80 = BC (十六进制下)

所以每一个需要转码的字符,先换成16进制,然后加 0x80,最后形成字符加%构造,最终

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

——-经过以上算法后——   

%A2%BE%BCscript%BEalert(document.domain);%BC/scirpt%BE

浏览器使用IE 6,抓包后修改如上

xc35

提交后返回页面:

xc36

可以弹出alert窗口

xc37

下一关链接

xc38

19、Twitter DomXss at Sep 24, 2010

根据提示,搜索,找到这个漏洞的链接,http://blog.mindedsecurity.com/2010/09/twitter-domxss-wrong-fix-and-something.html

根据时间确定版本,而且是在IE8浏览器中触发,使用IE8测试,构造

#!javascript&#58;alert(document.domain)

添加到link的href属性中,但是没成功。这个实验花费了很久的时间,试过BurpSuite修改get请求地址等方法,还是没成功。

虽然blog中对Twitter那个DOM XSS漏洞的描述非常详细,level 19中也有Twitter中的缺陷filter代码,可能是浏览器的问题或者自己水平有限,每次调用都是返回这个地址:

xss-quiz.int21h.jp/javascript:alert(document.domain)

Firefox浏览器返回的是如下URL,并出现404 not found错误

xss-quiz.int21h.jp/javascript&#58;alert(document.domain)

可以看出这个漏洞在IE8下可以触发,如果返回的地址是:

javascript:alert(document.domain)

则毫无疑问是正确的,可能作者的代码有点问题???我不确定,先暂时这样吧,有时间再深入研究。

这是最终关,过了这个就会有弹窗祝贺。

xc39

 

 

 

您可能还喜欢...