通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 爱心红客 电信网通铁通移动 在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 安全防御 >> 安全相关 >> 文章正文
字符集导致的浏览器跨站脚本攻击
责任编辑:酷酷の鱼   更新日期:2008-6-16
 

来源:安全中国

前言:这种利用类型的攻击早在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]xx

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

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

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

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

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

  4 关于修复

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

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

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

  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    普通文章 解析“肉鸡”电脑“商业价值”
    普通文章 我常用的一些注入命令,方便一下大家
    普通文章 二进制转十进制,十进制转二进制的算法
    推荐文章 用Dos命令进行加锁 防病毒格式化硬盘
    普通文章 最新安全软件推荐:我是007 v2.22加密软件
    普通文章 脚本自动创建帐户密码脚本自动创建帐户密码
    普通文章 腾讯QQ密保卡的安全性分析
    普通文章 苹果公司可监视每台iPhone
    普通文章 Firefox3.0 18日凌晨起冲击吉尼斯
    普通文章 “毒蛆”要毁防火墙伤害电脑系统
    热门文章
    普通文章阿根廷:侵犯他人电子邮件隐私可判入狱半年
    普通文章邮箱有道,写英文邮件从此不再愁
    普通文章大胆黑客太仓落网
    普通文章感染型下载器感染EXE文件下载病毒进行传播
    普通文章警惕端午节病毒 QQ用户小心带毒粽子
    普通文章行天下 揭开Windows7操作系统神秘面纱
    普通文章保护好你的系统:赤手空拳备份注册表
    普通文章隐藏卸载信息,跟入侵者玩"躲猫猫"
    普通文章让操作系统"长命百岁"主要的几个小要点
    普通文章简单几步 让劳累缓慢的C盘恢复往日神彩
    精彩专题