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. Citrix 服务器虚拟化之六 Xenserver虚拟机创建与快照

    Citrix 服务器虚拟化之六  Xenserver虚拟机创建与快照 在Xenserver上可以创建Windows和Linux等虚拟机,Xenserver支持大部分的主流操作系统,可以使用 XenCe ...

  2. kivy create a package for Android

    Now that you've successfully coded an app. Now you want to deploy it to Android. So now we would nee ...

  3. iOS学习笔记(十六)——数据库操作(使用FMDB)

    iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepers ...

  4. 最近学习了下BI(商业智能)做报表

    最近公司购买了Style intelligence 出的BI报表工具,接触新的东西不是很容易上手,这个东西是别的项目组用的,我们项目组由于进度比较快就让我先到他们项目组帮他们,为了使用这个东西,他们已 ...

  5. PPT资料下载 - 问题驱动的软件测试设计:强化测试用例设计

    测试用例设计是整个软件测试过程中非常重要的测试活动,需求规格说明是测试人员开展测试设计的主要参考输入.而在测试实践中基于需求规格说明得到的测试用例,在测试覆盖率.测试效率.测试有效性和测试质量等方面的 ...

  6. Cloudera Development Kit(CDK) 简介

    Cloudera Development Kit(CDK) 简介 guibin.beijing@gmail.com 2013.07.02 CDK简介 CDK(Cloudera Development ...

  7. C语言与汇编“硬在哪里”——什么是面向硬件?

    Jack:为什么说C/C++语言是偏向硬件的语言呢? 我:这是把C与java等无指针/引用类编程语言相比较而得出的结论.因为java在j2ee的框架下,写的代码仅仅是逻辑,本质上和写shell脚本没啥 ...

  8. Qt Creator+MinGW+boost特殊函数的使用示例

    Qt Creator+MinGW+boost特殊函数的使用示例: 先编译和安装boost: bootstrap.bat gcc .\b2 --toolset=gcc --prefix=E:\boost ...

  9. erlang集成开发环境搭配配置出现的问题

    问题:Unable to create the selected preference page.  com.avaya.exvantage.ui.interfaces.eclipse.plugin  ...

  10. ASP.NET Zero--5.配置权限

    修改角色的时候,会有一份权限列表,可以给这个角色分配哪些权限,那如何添加一个新权限呢?   这里以添加一个“测试”的权限为例 1.打开AppPermissions.cs [..\MyCompanyNa ...