RSS订阅
RSS订阅TT安全

小心字符集导致的浏览器跨站脚本攻击

2008-6-24  选择字号:  | |
打印本文章

导读:字符集指示浏览器如何对待返回数据,gb2312和GBK字符集应用非常广泛,但是,IE在处理宽字符集的时候可能导致程序的安全规则被Bypass掉,引发严重的跨站脚本安全漏洞。

关键词:字符集 浏览器 gb2312 GBK 安全规则 站脚本 安全漏洞

正在加载数据...

  在一般的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]xx 

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

  0xc1表示一个十六进制的字符编码

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

xxxxxxxxxxx〈/font> 
 

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

  4 关于修复

  对于程序设计者,由于UTF-8字符集的可靠性,不存在这个安全漏洞,所以大家在设计站点的时候可以考虑使用UTF-8字符集。

  对于广大开发者,可以牢记最小输入等于最大安全的原则,在匹配正则的时候限制输入的字符的范围,尽量匹配ascii字符,如果必须使用中文,可以考虑类似于discuz的在中文后面添加空格修复该问题。

  对于广大用户,这个漏洞由于浏览器处理页面字符的不同,可以考虑使用如Firefox浏览器,可以避免一部分这样的问题。


跨站脚本攻击(XSS)
 如何防御跨站脚本攻击
 防御跨站点脚本攻击的新策略
 小心字符集导致的浏览器跨站脚本攻击
 利用PHP编程防范XSS跨站脚本攻击
 详解XSS跨站脚本攻击
 简单分析Script脚本跨站攻击漏洞技术
 再谈跨站脚本攻击与防御
 XSS攻击升温 Web业务安全面临更大挑战
 Ajax hacking with XSS

来源:安全中国    
在Windows Vista, Windows 7 pre-Beta, Windows Server 2003和Windows Server 2008上的IE7和IE8依然可以多一层保护,那就是保护模式……
微软周三发布了非常规紧急补丁,阻止对IE中的XML漏洞的零日攻击。MS08-078更新修复了XML处理错误,并影响到IE的所有版本……
微软周三将发布紧急非常规XML补丁,用于修复IE中的漏洞。IE中的这个XML漏洞已经在上周或者更久前被恶意攻击了……
据Chapin信息服务公司(以下简称“CIS”)日前公布的测试结果显示,在当前五大主流Web浏览器中,谷歌Chrome在密码管理方面的安全性最低……
微软在周三晚些时候发布了公告,警告用户小心IE中对零日漏洞的新型攻击。受到影响的是Windows XP SP2、 Windows XP SP3, Windows Server 2003 SP1等所支持的IE 7……

当身份窃取猖獗的时候,有力地用户认证、客户认证和合作伙伴认证是至关重要的措施。有了用户名和密码就足够了吗?双因素认证是有效的方法吗?还是无力应对新出现的威胁呢?本专题将提供全面的信息,帮助理解目前的认证方式和面临的挑战,并且介绍如何采用安全的认证系统。

本专题将介绍一款免费的、开源的、可移动的适用于笔记本电脑的加密软件TrueCrypt。TrueCrypt适用于个人或者小型企业和团队,可以在任何系统上运行而不需要安装。TrueCrypt可以采用多种加密算法,有效地保护机密数据。
本专题可以帮助理解在无线网络中,无线入侵检测/防御系统(WIDS/WIPS)的价值,及时您所在的公司不支持无线局域网。此外,本专题还将介绍如何为公司环境选择合适的WIDS,以及如何防御无线拒绝服务攻击。
最新更新
专家答疑
技巧
Michael Cobb
渗透测试的目标不仅是要评估电脑系统或者网络的安全性,还要决定成功攻击的可行性和商业影响。那么如果选择合适的渗透测试人员呢?
Mike Chapple
渗透测试可以提供安全防御的有价值的信息,但是成本很高。为了渗透测试的可信性,通常必须要有独立的外部公司进行。如果使用内部人员和测试示范漏洞……
Ed Skoudis
问:社会工程应该是渗透测试的一部分吗?这样做是道德的吗?   答:这个问题的答案还在争论之中。