总共用了三个漏洞点:
1. 绕过特权域判断
2. 利用缺陷API下载任意程序至指定目录
3. 结合电脑用户名称泄漏的缺陷,将程序下载至用户启动目录
以下是详情:
1. 特权域限制上存在问题, 百度浏览器除了允许 bdbrowser:// 和 http://xapp.baidu.com/ 这2个域外,我发现 file域同样可以执行特权API, 而当我们从http域重定向至 bdbrowser 或者 file域时,都会提示禁止访问本地域资源,这不禁让我想到了另外一个有点算是本地域的 东西 blob。于是控制台测试以下代码:
发现可以成功执行,这样一来,我们可以在任何页面里通过这段代码来执行特权API了。
2. 特权API bdbrowser.skin.download 的 的 name参数未过滤,导致可以将皮肤文件下载至系统盘的任意指定目录内。
例如以上代码,将会在系统盘根目录下生成一个cmd.exe,如下图所示:
3. 我们要实现执行命令,还需要将程序写入到系统的“启动”目录下。
但启动目录的路径中,需要知道 用户名信息。经过研究发现:
AppService.AppMarket.DownloadPack 和 AppService.AppMarket.DeleteExt 这2个API均可导致用户名泄漏,其中不使用我前面所发布的上一个漏洞中用到的技巧的话,前者会弹出安装提示,而后者不会提示,但是后者要求用户装过插件方可。
4. 结合以上三个步骤,我们可以构建以下PoC代码,仅供参考,在WIN7和IE下进行了测试。
最终执行后,效果如下图所示: