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

来源:安全中国

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

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

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

  1 Bypass某些js检查规则

〈HTML>
〈HEAD>
〈TITLE>80sec test〈/TITLE>
〈meta http-equiv="Content-Type" content="text/html; char=gb2312" />
〈/HEAD>
〈BODY>
〈script>
window.onerror=function{
alert('Vul');
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 _disibledevent=>



0xC1是个gb2312个字节上面结果将会转化为: 〈font color="xyz?>〈/font>〈font color="abc _disibledevent=>



  其中

alert(/xss/)



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

  3 几个小例子

  Phpwind论坛char跨站脚本漏洞

[email=xxxx羃[/email][email=xxxx _disibledevent=>[font=宋体;0xc1]xxx[/font]xx




  羃是个特殊十 6进制编码和后面]结合出来个种思路方法可以直接复制:)

  0xc1表示个十 6进制编码

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

<font face="微软雅羃>xxxxxxxxxxx〈/font>〈font face=" _disibledevent=>



  均在新版和老版测试通过

  4 有关修复

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

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

  对于广大用户这个漏洞由于浏览器处理页面区别可以考虑使用如Firefox浏览器可以避免部分这样问题



  • 篇文章: 眼见为虚——解析映像劫持技术

  • 篇文章: Data URI XSS和验证About XHR POST Form Data
  • Tags:  跨站脚本注入 跨站脚本漏洞 跨站脚本攻击 跨站脚本

    延伸阅读

    最新评论

    发表评论