0x00背景

windows平台下,浏览器安全是绕不过的话题,其涉及的安全问题涵盖二进制和web,攻击场景也非常多样化:

  1. 用户点击攻击者的恶意URL链接被感染恶意代码
  2. 访问恶意站点被绕过同源策略窃取cookies

等等。

本文关注的是第一类攻击场景:用户访问恶意URL被感染恶意代码。

传统的攻击场景是:攻击者伪造系统管理员身份发送一封邮件给用户,邮件内容中附带攻击者的URL链接,注明为系统安全补丁升级包。用户收到这封邮件后会去下载并运行该“系统安全补丁升级包”,被感染恶意代码。把整个过程分解一下:

  1. 攻击者诱导用户访问构造的恶意URL

  2. 浏览器弹出是否下载攻击者的恶意程序询问框,用户点击"是",浏览器开始下载攻击者的恶意程序

  3. 用户运行刚下载的恶意程序,被感染

可以看到这样一个完整的攻击流畅,每一步都需要用户主动参与。

攻击者能否成功的实施攻击,达到让用户感染恶意代码的目的,这在很大程度上取决于用户本身。对于有一定安全意识的用户,这类攻击是比较难成功的,因为他们知道从官网下载所需要的软件、不运行来历不明的软件。攻击者的社工能力,对恶意URL的包装能力,显得十分重要。

那么为了解决这一问题,攻击者的技巧也在进步,最近几年浏览器相关的各种漏洞频繁爆出,包括IE、chrome、adobe flash等,并且已经公开有相关远程代码执行漏洞的利用程序(exp)也不少。由于微软和谷歌都给自家的浏览器加上了沙箱,浏览器在访问URL时的进程完整级别都为low、Untrusted或者AppContainer,如下:





攻击者获得远程代码执行之后,还需要利用突破沙箱的漏洞(沙箱本身或者操作系统内核漏洞),提升权限才能执行下载的恶意代码。

攻击者如果结合这两类exp,就可以省去步骤2和步骤3,将攻击场景变为用户访问攻击者的URL就执行恶意代码。如果还能结合XSS漏洞,用户主动点击攻击者的URL这一步骤都可以省去了。这样攻击的成功率不仅会大大提高,也会增加了隐蔽性。

0x01 问题

作为安全工作者,有时需要重现这样的一套攻击场景。在具体实现的时候,可能会遇到一个问题:如果直接利用msf windows/download_exec 模块生成的shellcode作为flash漏洞payload,无法将第二阶段内核提权exp下载成功。

这个问题其实就是因为沙箱的存在所导致的,本文就是为了解决这一问题,下面会给出两种思路。

0x02 解决方法

在给出具体的解决方法之前,我们再具体的看一下这个问题。这次可以将Flash的shellcode改为反弹shell,比如使用msf的 windows/meterpreter/reverse_http 模块,将LHOST设置为监听计算机的IP。在获取到meterpreter shell之后,查看一下当前程序所在的目录:

可以看到,当前文件目录为当前用户的桌面。

这时试着在这个目录下面创建一个文件,随便输入一些内容,看是否能够成功:

失败了,显示错误为权限不足。看到这里,或许你已经明白了为何使用msf模块windows/download_exec会失败的原因了:我们一般在使用的时候都只会更改URL参数,很少去更改EXE参数,即使去更改EXE的值也只是换个名字罢了,不会去设置下载文件的全路径,所以默认下载的位置就会是:当前桌面/EXE的值。因为沙箱所导致的权限问题,这样就会失败。

2.1 思路一

所以解决的思路之一就是设置EXE的全路径,让其下载到当前权限下可以写入的路径。那么当前程序可写入的路径有哪些呢?这可以通过一个简单的操作就可以得到了。

首先利用windbg附加到IE浏览器,然后设置下面断点:

因为IE在正常运行的时候,自身也是要进行文件写入操作的嘛。在windbg中输入g命令,继续让IE运行,断下来的时候查看Createfile第一个参数的值:

“C:\Users\Win7SP1\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low\Content.IE5\O24JWRDT\fdd05fdad54c04a2b94bfc425cf303de[1].js” 就是IE当前写入文件fdd05fdad54c04a2b94bfc425cf303de[1].js的全路径,那么C:\Users\Win7SP1\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low\Content.IE5\就是当前IE可以写入的目录了。我们在文件管理器中查看一下该文件:

再仔细看一下这个目录,这似乎正是IE的缓存目录?!我们来查看一下:

所以,此时的IE为什么对该目录具有写入的权限也是很容易理解了。那么将windows/download_exec的EXE参数设置为IE缓存目录下的一个全路径,似乎就可以解决了?在实验环境中,这样是可以的,但是在真实的攻击场景中,你还需要面对另一个问题---- 仔细看一下这个缓存路径,里面包含着当前用户的用户名:Win7SP1。

这就意味这我们需要知道当前的用户名,或者是能够获取当前的用户名动态的拼接全路径。msf中是不具有这样的模块的,这需要我们自己编写shellcode来达到目的,这部分内容的具体实现就不在这里详细介绍了,有兴趣的可以去查阅相关shellcode的编写技巧。

2.2 思路二

如果你使用过msf中内核提权漏洞的利用模块,在使用的时候,你只需要设置一个SESSION参数就可以了。

这个SESSION可以是之前,你利用像flash这种远程代码执行漏洞所获取到的一个session。将这个session值赋值给SESSION参数,如果目标符合内核提取漏洞的利用条件,就能够获取到一个目标系统权限的shell。

前面已经提到了,此时IE可以写入的目录只有IE的缓存目录,而这个目录是和当前用户名相关的,需要获取到用户名才能够正确设置。但是我们在使用的时候并没有显示的设置这个参数,那么msf是怎么来操作的呢?我们可以来查看一下msf内核利用模块的源代码:

msf的源代码还是非常具有可读性的,函数命名都是按照要实现的功能来的,不懂msf那套API也是可以看懂大概。

注意红框中的代码,可以看出msf的操作:

  1. 在目标计算机上以隐藏的方式,启动一个notepad进程。

  2. 打开启动的notepad进程,获取到进程句柄。

  3. 判断目标操作系统位数,将dll形式的提权exp注入到notepad进程中。

  4. 启动注入的dll,完成提权。

所以,解决思路之二也就明显了,我们可以让IE创建一个新的进程,然后直接将提权exp注入到新进程空间中,再执行就可以了。这需要我们理解内核提权exp,编写shellcode启动新进程并将提权代码注入到其中,并让其启动。

0x03 总结

微软加入的浏览器沙箱技术,给攻击者制造了两个障碍:

  1. 攻击者需要权限提升的漏洞exp(沙箱本身或者操作系统内核漏洞)。

  2. 攻击者需要自己编写shellcode。

这两座大山,对攻击者能力提出了很高的要求,无疑大大增加了攻击者利用成功的难度。近几年,微软和adobe都对自家的产品加入了众多的漏洞利用缓解机制,诸如CFG和隔离堆等,这些防护机制直接让一部分0day作废,变为无法利用的bug。并且,微软最近还在测试对IE的函数调用进行过滤,阻止调用一切无关的API调用,这让想要突破沙箱又变得十分困难!

综上,全补丁的win10+edge浏览器,可谓是当前非常安全组合。虽然每年的黑客比赛中还是有被攻破的消息,但是价值几百万美刀的漏洞利用会随便用在你我普通百姓身上?更多的是技术上和国家安全层面上的形态了。

最后,希望这篇文章提出的解决思路可以帮助到有这需求的安全工作者。

by:会飞的猫

转载请注明:http://www.cnblogs.com/flycat-2016

浏览器exp使用经验的更多相关文章

  1. php:获取浏览器的版本信息

    //分析返回用户网页浏览器名称,返回的数组第一个为浏览器名称,第二个是版本号.  function getBrowser() {      $sys = $_SERVER['HTTP_USER_AGE ...

  2. PHP】获取客户端(浏览器)信息、获取客户端系统信息、获取服务器信息

    * 获取客户端浏览器信息 * @param null * @author https://blog.jjonline.cn/phptech/168.html * @return string */ f ...

  3. XCode的个人使用经验

    Xcode是强大的IDE(但个人觉得不如Visual Studio做得好),其强大功能无需本人再赘述,本文也不是一篇“快捷键列表”,因为XCode上的快捷键极其多,而且还有不少是需要同时按下四个按键的 ...

  4. 把cookie以json形式返回,用js来set cookie.(解决手机浏览器未知情况下获取不到cookie)

    .继上一篇随笔,链接点我,解决手机端cookie的问题. .上次用cookie+redis实现了session,并且手机浏览器可能回传cookies有问题,所以最后用js取出cookie跟在请求的ur ...

  5. 基于浏览器的HTML5地理定位

    基于浏览器的HTML5地理定位 地理位置(Geolocation)是 HTML5 的重要特性之一,提供了确定用户位置的功能,借助这个特性能够开发基于位置信息的应用.今天这篇文章向大家介绍一下 HTML ...

  6. Selenium2学习-042-Selenium3启动Firefox Version 48.x浏览器(ff 原生 geckodriver 诞生)

    今天又被坑了一把,不知谁把 Slave 机的火狐浏览器版本升级为了 48 的版本,导致网页自动化测试脚本无法启动火狐的浏览器,相关的网页自动化脚本全线飘红(可惜不是股票,哈哈哈...),报版本不兼容的 ...

  7. 浏览器下载/导出文件 及jQuery表单提交

    1 比如以下按钮, 用于导出文件,如EXCEL文件. <li> <button class="whiteBg btn2" onclick="doExp( ...

  8. 微信电脑版即将到来了 安装QQ浏览器微信版体验吧

    之前说过在手机上微信打字慢,tx最终还是想开了,最近TX邀请测试微信电脑版,想要尝鲜的朋友可以去exp.qq.com申请QQ浏览器微信版体验,不过体验将要结束了,相信正式版很快就要出来了.[微信网页版 ...

  9. 谷歌Chrome浏览器开发者工具的基础功能

    上一篇我们学习了谷歌Chrome浏览器开发者工具的基础功能,下面介绍的是Chrome开发工具中最有用的面板Sources.Sources面板几乎是最常用到的Chrome功能面板,也是解决一般问题的主要 ...

随机推荐

  1. SQL Server 性能优化之——系统化方法提高性能

    SQL Server 性能优化之——系统化方法提高性能 阅读导航 1. 概述 2. 规范逻辑数据库设计 3. 使用高效索引设计 4. 使用高效的查询设计 5. 使用技术分析低性能 6. 总结 1. 概 ...

  2. Linux centOS本地DNS安装

    centOS本地DNS安装 在centOS里最常用的DNS服务工具应该是bind了.下面就以bind为例做一个DNS服务. 首先查看bind 是否已经安装 Rpm -qa | gerp bind 如果 ...

  3. aix上使用裸设备安装oracle10g数据库

    一.检查系统信息 [root@aix222 /]# oslevel -r 5300-08 [root@aix222 /]# prtconf | grep -i mem Memory Size: 190 ...

  4. hdu3415 Max Sum of Max-K-sub-sequence

       Max Sum of Max-K-sub-sequence Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64 ...

  5. 开发一个微信小程序项目教程

    一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可.2.注册成功后进入首页,在 小程序发布流程->小程序开 ...

  6. [翻译]Webpack解惑

    本文译自Webpack - The Confusing Parts,原文需FQ. Webpack现在是React应用程序标配的模块打包器,我估计Angular2和其他框架的用户也在大规模使用.我第一次 ...

  7. ruby操作mongo DB

    web自动化中,对操作日志功能进行验证(操作日志存在mongoDB中). 为了避免前面操作产生的日志影响结果校验,我们需要先清除之前的所有操作日志. require 'mongo' host = '1 ...

  8. H3 BPM 跨平台表单发起详解

    1.1 目的 为方便技术对接服务,实现流程业务的跨平台对接,给出指引和帮助文档. 2 跨平台以Java为例调用.NET BPM表单流程全过程 2.1 双方系统确定接口协议规则 通信协议:基于soap通 ...

  9. Oracle sql执行计划

    explain plan     explain plan for sql_statement     select * from table(dbms_xplan.display) DBMS_XPL ...

  10. 卸载jdk以及重新安装jdk

    新旧交替重复安装会混乱,个人解决办法是: 1. 用系统 control panel 中 uninstall 卸载java se development kit 和 java update. 2. 打开 ...