漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2015-0146855
漏洞标题:bilibili主站存在存储型XSS漏洞(艰辛的绕过过程/成功传cookie至域外)
相关厂商:bilibili.com
漏洞作者: 端端
提交时间:2015-10-15 11:11
修复时间:2015-12-03 17:20
公开时间:2015-12-03 17:20
漏洞类型:xss跨站脚本攻击
危害等级:高
自评Rank:15
漏洞状态:厂商已经确认
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2015-10-15: 细节已通知厂商并且等待厂商处理中
2015-10-19: 厂商已经确认,细节仅向厂商公开
2015-10-29: 细节向核心白帽子及相关领域专家公开
2015-11-08: 细节向普通白帽子公开
2015-11-18: 细节向实习白帽子公开
2015-12-03: 细节向公众公开
简要描述:
bilibili主站存在存储型XSS漏洞(艰辛的绕过过程)
问题其实有点鸡肋,包括有部分关键字过滤、长度的限制以及被强制转换为大写字母等,但终究还是把cookie传到了域外
详细说明:
出现问题的地方是视频下方的标签
任何一个视频最多可以有10个标签显示,且标签开放编辑
测试时发现没有进行转义直接按照html输出到了页面导致标签被浏览器解释
添加标签发现超过20个字符会有提示
但并没有请求发出,所以是前端的限制,直接调用接口(http://www.bilibili.com/api_proxy?app=tag&action=/tags/archive_add)测试确认后端限制60个字符
并且会将所有小写字母替换为大写字母
接口本身虽然也做了一些过滤(比如"<script"之类的)但并不全面
通过测试发现
是有效的(onerror和=之间必须有空格否则接口会403错误)
由于javascript是大小写敏感的,所以直接写入含有小写字母的代码是不可以的
测试发现通过HTML编码可以绕过这一问题
即
变为
(非小写字母没必要编码,节省空间)
但就算这样很明显要想把cookie顺利传到站外,仅仅60个字符是不够的
但不要忘记,我们最多可以添加10个标签,那么在这10个标签中是否可以做到呢
答案是可以的(这不废话吗(-__-)b)
分别执行以下脚本(这里字符串拆分是因为编码后太长了,奇怪的写法都是为了缩短单个标签里的长度)
构造标签内容如下,直接使用接口按顺序添加至视频标签
像这样添加
6个都添加完后(那个点赞的小手颜色有点浅,我觉得在有些显示器上看不太清,就知道红圈里有6个点赞的小手就好了(-__-)b)
漏洞证明:
测试地址
顺便提一句,我只是随便找了一个视频……那个视频不是我传的。
我不知道审核之前会不会被发现,还没被发现的话可以看下效果
会产生一个目标至wooyun.org的请求,其中GET参数是当前在bilibili的cookie
我测试时的截图如下(测试过程均在登录另外的账号下进行,以避免未知的可能存在的影响因素)
视频标签处的惨状
IE11下测试
修复方案:
1、输出时转义
2、输入时过滤
版权声明:转载请注明来源 端端@乌云
漏洞回应
厂商回应:
危害等级:低
漏洞Rank:5
确认时间:2015-10-19 17:19
厂商回复:
~
最新状态:
暂无