当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-062771

漏洞标题:新浪某界面dom型xss(四)(IE下再次绕过,结合IE bug)

相关厂商:新浪

漏洞作者: 香草

提交时间:2014-05-29 16:51

修复时间:2014-07-13 16:51

公开时间:2014-07-13 16:51

漏洞类型:xss跨站脚本攻击

危害等级:低

自评Rank:4

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-05-29: 细节已通知厂商并且等待厂商处理中
2014-05-29: 厂商已经确认,细节仅向厂商公开
2014-06-08: 细节向核心白帽子及相关领域专家公开
2014-06-18: 细节向普通白帽子公开
2014-06-28: 细节向实习白帽子公开
2014-07-13: 细节向公众公开

简要描述:

不要怪我死磕,本以为这个这个第三次的时候会彻底修复了,这次我再次研究了开发人员的过滤方法。确实很严密,不过,IE是个会出现你意想不到的结果的浏览器,似目以待吧。我认为这个洞还是挺经典的,有学习价值,所以就再次提交了。rank随便给给就行了。

详细说明:

我们再来看看新浪修复的代码:

var par = location.search.substr(1),
ary = par.split("${}");
var type = ary[0],
src = cleanUrl(sinaadToolkit.string.encodeHTML(decodeURIComponent(ary[1])), 'url'),
link = cleanUrl(sinaadToolkit.string.encodeHTML(sinaadToolkit.url.ensureURL(decodeURIComponent(ary[2]))), 'url'),
width = parseInt(ary[3], 10) + 'px',
height = parseInt(ary[4], 10) + 'px',
monitor = ary[5] ? sinaadToolkit.string.encodeHTML(decodeURIComponent(ary[5]).replace(/</g, '').replace(/>/g, '')) : '';
var srcAllowDomain = ['\\.sina\\.com\\.cn','\\.weibo\\.com','\\.sinaimg\\.cn', '^weibo\\.com'],
urlAllowDomain = ['\\.sina\\.com\\.cn','\\.weibo\\.com','\\.allyes\\.com', '\\.admaster\\.com\\.cn', '\\.miaozhen\\.com', '^weibo\\.com'];
function cleanUrl(url, type) {
var tmp = document.createElement('a');
tmp.href = url;
switch (type) {
case 'url':
return tmp.href;
case 'domain':
//ie下用净化方法去host会携带端口号,因此需要修正去除端口号
return tmp.host ? tmp.host.split(':')[0] : '';
default:
return url;
}
}
function checkDomain(url, allowDomain) {
// var reg = new RegExp('^(http|https):\\/\\/([^\\/\\?#]+\\.)*(' + allowDomain.join('|') + ')(\\/|\\?|#|$)');
// return reg.test(url);
var domain = cleanUrl(url, 'domain'),
reg = new RegExp('(' + allowDomain.join('|')+')$');
return url ? reg.test(domain) : true;
}
if ((type === 'flash' || type === 'image' || type === 'adbox') && checkDomain(link, urlAllowDomain) && checkDomain(src, srcAllowDomain)) {
document.write(sinaadToolkit.ad.createHTML(
type,
src,
width,
height,
link,
monitor ? monitor.split('|') : []
));
}
window.blur();


checkDomain的作用是检查传入的URL的值是否是指定的URL。
这次相对于上次的修复,是在

var srcAllowDomain = ['\\.sina\\.com\\.cn','\\.weibo\\.com','\\.sinaimg\\.cn', '^weibo\\.com'],
urlAllowDomain = ['\\.sina\\.com\\.cn','\\.weibo\\.com','\\.allyes\\.com', '\\.admaster\\.com\\.cn', '\\.miaozhen\\.com', '^weibo\\.com'];


前面都加了个点。
而且原来的cleanUrl加了个在IE下净化端口的代码。
重点的问题就出在这段代码上:

function cleanUrl(url, type) {
var tmp = document.createElement('a');
tmp.href = url;
switch (type) {
case 'url':
return tmp.href;
case 'domain':
//ie下用净化方法去host会携带端口号,因此需要修正去除端口号
return tmp.host ? tmp.host.split(':')[0] : '';
default:
return url;
}
}


这段代码会把我们输入的url利用浏览器的
var tmp = document.createElement('a');
tmp.href = url;
temp.host方法取得他的host,像这样的url

http://www.baidu.com/.sina.com.cn
http://www.baidu.com\.sina.com.cn
http://wwww@www.baidu.com\.sina.com.cn//基础认证协议


得到的结果都是 www.baidu.com 浏览器总能识别他们,开发人员很聪明,利用了这样的浏览器功能,帮助进行繁琐的URL划分。
但是这段代码在IE上运行会报错:

cleanUrl("http://ddd@www.baidu.com/xxx","domain")


d1.sina.cn_01.jpg


这个就有趣了,我继续测试发现如果我们用一个IE不支持的协议名,他就不报错了

cleanUrl("xxx://ddd@www.baidu.com/xxx","domain")


得到结果:www.baidu.com 还是不能达到我们的目的,我们需要的是:
www.baidu.com\.sina.com.cn
加上试试呢?

cleanUrl("xxx://ddd@www.baidu.com\\.sina.com.cn","domain")


奇迹出现了,得到了结果是:
www.baidu.com\.sina.com.cn
其实这样也是可以的:

cleanUrl("xxx://www.baidu.com\\.sina.com.cn","domain")


结果也是www.baidu.com\.sina.com.cn
真是匪夷所思吧!
这样一来我们可以过正则检查了,先运行看看

d1.sina.cn_02.jpg


乖乖,新浪竟然自己加上了一个http://,本来我还正愁怎么找一个IE支持但是又存在问题
的协议,因为我测试http,ftp,https,file,mailto这些协议都是能够正确区分host部分的。
本来以为这个会很鸡肋,但是看到这个加上去的http://我就笑了,正好帮我的大忙。
我能不能用一个协议叫www.baidu.com呢?

cleanUrl("www.baidu.com://xxx.sina.com.cn","domain")


结果:xxx.sina.com.cn
测试,还真可以,亮瞎我的眼啊!!!!
测了这么多,结果却真是奇葩
能不能再猥琐点

d1.sina.cn_03.jpg


虽然多了个冒号,但是IE的容错性还是可以运行的
最后做个总结:
在chrome和firefox浏览器上都是可以正确识别host的,但是在IE上,却很奇怪了
漏洞1、IE上当为不常用协议的时候,在host中允许出现\。
漏洞2、IE允许自定义协议,包括这样的协议 www.baidu.com。
我相信很多开发人员都喜欢用这个功能,回去检查下你的代码吧!!!

漏洞证明:

在IE下加载百度:(测试IE8,IE9,IE10,其他IE版本未测试)

http://d1.sina.com.cn/litong/zhitou/sinaads/release/pbv5.html?adbox${}www.baidu.com://xxx.sina.com.cn${}http://xxx.sina.com.cn/${}1370${}750${}x\x22


d1.sina.cn_03.jpg

修复方案:

IE有时候就是会出现意想不到的问题,建议限制正则开头和结尾

版权声明:转载请注明来源 香草@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:4

确认时间:2014-05-29 18:16

厂商回复:

再次感谢关注新浪安全,这个测试思路赞,

最新状态:

暂无


漏洞评价:

评论

  1. 2014-05-29 16:53 | 疯狗 认证白帽子 ( 实习白帽子 | Rank:44 漏洞数:2 | 阅尽天下漏洞,心中自然无码。)

    偶像了。。。洞主写个domxss专题吧

  2. 2014-05-29 16:55 | 香草 ( 实习白帽子 | Rank:99 漏洞数:14 | javascript,xss,jsp、aspx)

    @疯狗 狗哥才是大牛,正打算写一篇关于这个IE bug的文章,这个界面被我挖了4次我都不好意思了

  3. 2014-05-29 17:06 | mramydnei ( 普通白帽子 | Rank:348 漏洞数:80 )

    这次不是复参?看来是借用filter把原来的内容给打掉了?

  4. 2014-05-29 17:08 | 香草 ( 实习白帽子 | Rank:99 漏洞数:14 | javascript,xss,jsp、aspx)

    @mramydnei 呵呵,我还没那么猥琐。这个是dom型,另外一个界面

  5. 2014-05-29 17:11 | 香草 ( 实习白帽子 | Rank:99 漏洞数:14 | javascript,xss,jsp、aspx)

    @mramydnei 那个复参不是一般的复参,他是把整个链接一起放到文中的,而且有很多过滤。

  6. 2014-05-29 17:13 | mramydnei ( 普通白帽子 | Rank:348 漏洞数:80 )

    @香草 很屌的样子 关注你了,坐等公开

  7. 2014-05-29 17:23 | adm1n ( 普通白帽子 | Rank:216 漏洞数:66 | 只是一个渣渣而已。。。)

    @香草 求大神科普

  8. 2014-05-29 18:37 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    @香草 。。。dom类型,IE。。你用\u0009绕过的么

  9. 2014-05-29 22:59 | 香草 ( 实习白帽子 | Rank:99 漏洞数:14 | javascript,xss,jsp、aspx)

    @px1624 不是这个,是关于URL的

  10. 2014-07-14 09:30 | 香草 ( 实习白帽子 | Rank:99 漏洞数:14 | javascript,xss,jsp、aspx)

    终于修复好了