GOOGLE现在XSS已经涨到3100~7500了,然后某著名日本猥琐流就发了一个accounts.google.com域下的XSS,在微博上看到@xisigr在新浪微博上发了链接,就去看了下,虽然看不懂日文,但还是分析了下。

原文链接:Masato Kinugawa Security Blog: accounts.google.comに存在したXSS

具体分析如下:

原本的缺陷地址为:

https://accounts.google.com/NewAccount?oe=utf-32&Email=%E2%88%80%E3%B8%80%E3%B0%80script%E3%B8%80alert%281%29%E3%B0%80/script%E3%B8%80

根据我自己的理解,其中,oe参数应该是用来指定字段的输出编码(output encoding), email为输入,经过oe所指定的编码进行转换后,输出到页面的 <input type="text" value="[Email]" /> 里。

更简单的说就是, 如果我们Email输入 AAAAAA, oe=gbk 的情况下, AAAAAA --> 转换为 gbk 编码 --> GBK编码下的[AAAAAAA] ,再输出到页面上。

于是,于是,漏洞发现者就猥琐了一把。。。

按照作者的思路,

1.首先, 将输出编码设置为 UTF-32。

UTF-32中,每4个字节表示一个字符,比如

双引号 --> [0x00][0x00][0x00][0x22]
<括号 --> [0x00][0x00][0x00][0x3C]
>括号 --> [0x00][0x00][0x00][0x3E]

那么更好玩的是,在UTF-32中,这样也是有效字符:

[0x00][0x00][0x22][0x00] --> ∀
[0x00][0x00][0x3C][0x00] --> 㰀
[0x00][0x00][0x3E][0x00] --> 㸀

因而如果我们用上面这3个“怪怪”的字符来代替双引号和尖括号对的话,会出现什么情况呢?

"<script>alert(1)</script>

变为

∀㸀㰀script㸀alert(1)㰀/script㸀

2. 接着:∀㸀㰀script㸀alert(1)㰀/script㸀,在被转换为UTF-32编码后,输出到UTF-8编码的页面中,会输出为以下形式:

[0x00][0x00]"[0x00][0x00][0x00]<[0x00]script[0x00][0x00]>[0x00]alert(1)[0x00][0x00]<[0x00]/script[0x00][0x00]>[0x00]

3. 而在IE10以下的版本(未测试IE9,原文中截图为IE9,应该可以执行),HTML中的 [0x00] 会被无视掉,从而导致上面的代码被当作普通HTML执行。

空字节[0x00]不会影响上述代码的执行,具体见demo: http://xsst.sinaapp.com/nullbyte.htm

4. 为了更直观的看到这个漏洞,写了一个PHP页面,大家自行实验。

http://xsst.sinaapp.com/utf-32-1.php?charset=utf-32&v=%E2%88%80%E3%B8%80%E3%B0%80script%E3%B8%80alert(1)%E3%B0%80/script%E3%B8%80

[原文地址]

相关讨论:

1#

Cr4zy | 2013-06-19 22:16

2#

小龙 | 2013-06-19 22:36

膜拜

3#

xsser (十根阳具有长短!!) | 2013-06-19 22:38

一直以为utf-8作为输入是没有问题的... 没想到转成utf-32会有问题 需要检查一批开源代码了

4#

lucky (一天一洞) | 2013-06-19 22:48

真强呀

5#

Ra1nker ((麻麻说,签名要长……)‮) | 2013-06-19 22:51

膜拜

6#

叽叽歪歪 (?) | 2013-06-19 23:14

又长姿势了,狗猥琐啊

7#

pfdz | 2013-06-19 23:17

2. 接着:∀㸀㰀script㸀alert(1)㰀/script㸀 ,在UTF-32编码的页面中,会输出为以下形式:

这地方是输出到UTF-8编码的页面中吧??@gainover

8#

Nicky (-。-) | 2013-06-19 23:25

..额 目测很多站的过滤规则又得更新了

9#

gainover (">_< ' / & \ 看啥,没见过跨站字符么) | 2013-06-19 23:30

@pfdz 恩,描述有误,我改改~

10#

小胖胖要减肥 | 2013-06-19 23:52

@gainover 而且这个也是绕过ie拦截器的 那就是说ie9的0day?

11#

Getshell | 2013-06-19 23:57

碉堡了!!!

12#

齐迹 (奔六月最撸力奖去的!) | 2013-06-20 00:01

ie8 也中枪了。不过一般的国产网站极少使用此编码把!

13#

gainover (">_< ' / & \ 看啥,没见过跨站字符么) | 2013-06-20 00:46

@小胖胖要减肥 这是个特例。利用了IE的某些BUG特性,但与绕过过滤器还不太能扯上关系。

14#

0x_Jin (ส็็็็็็็็็็็็็็็็็็็็็็็็็ส็็็็็็็็็็็็็็็็็็็็็็็็็ส็็็็็็็็็็็็็็็็็็็็็็็็็ส็็็็็็็็็็็็็็็็็็็็็็็็็ส็็็็็็็็็็็็็็็็็็็็็็็็็ส็็็็็็็็็็็็็็็็็็็็็็็็็ส็็็็็็็็็็็็็็็็็็็็็็็็็ส็็็็็็็็็็็็็็็็็็็็็็็็็ส็็็็็็็็็็็็็็็็็็็็็็็็็ส็็็็็็) | 2013-06-20 01:29

次奥 这样也可以 果然够猥琐

15#

px1624 ("><img src=1 onerror=ale>) | 2013-06-20 09:01

@gainover 那岂不是蛮多网站都会存在此反射型xss了、

16#

Adra1n | 2013-06-20 09:58

这个牛了。。。

17#

Csser | 2013-06-20 09:59

18#

小胖胖要减肥 | 2013-06-20 10:28

@gainover 恩 多谢二哥解惑