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. spring事务管理器设计思想(2)

    spring事务管理器设计思想(二) 上文见<spring事务管理器设计思想(一)> 对于第二个问题,涉及到事务的传播级别,定义如下: PROPAGATION_REQUIRED-- 如果当 ...

  2. 用Linux命令行实现删除和复制指定类型的文件

    (一)Linux 删除当前目录及子目录中所有某种类型的文件 方法1 : 此方法不能处理目录中带空格的那些. rm -rf `find . -name "*.example"` Li ...

  3. Fedora 19的U盘安装 以及简单配置

    一.Fedora19的U盘安装 2013年7月3日,Fedora 19正式版发布.Fedora 19除了GNOME桌面版之外,还提供了KDE定制版.LXDE定制版等,有兴趣的网友可以在其官网上下载试用 ...

  4. Ueditor1.4.3实现跨域上传到独立文件服务器,完美解决单文件和多文件上传!

    再写配置方法之前先吐槽一下网上的各种教程,TM没一个有卵用,一群傻屌不会写就别写,写了就要负责. 百度google搜了半天,全是配置什么document.domain,根域名什么的,我只想对你说: 好 ...

  5. .NET 基础 一步步 一幕幕[面向对象之堆、栈、引用类型、值类型]

    堆.栈.引用类型.值类型 内存分为堆和栈(PS:还有一种是静态存储区域 [内存分为这三种]),值类型的数据存储在栈中,引用类型的数据存储在堆中. 堆.栈: 堆和栈的区别: 栈是编译期间就分配好的内存空 ...

  6. python3.4 data type

    #coding=utf-8 #Python 3.4 https://docs.python.org/3.4/library/ #IDE:Eclipse +PyDev Window10 import a ...

  7. Perception(1.2)

    4.1.2 Definition of Coordinate Systems The global coordinate system is described by its origin lying ...

  8. Python datetime模块的datetime类

    datetime模块定义了下面这几个类: datetime.date:表示日期的类.常用的属性有year, month, day. datetime.time:表示时间的类.常用的属性有hour, m ...

  9. [Usaco 再次除草]

    以后都用自己的号交吧 免得掉人品 Noip2016就是一个见证 一步一个脚印的刷 noip没把前两题稳拿就刷牛头..   bzoj1230 线段树打翻转标记,练手感 bzoj1231 状态压缩 预处理 ...

  10. 走迷宫 (nyoj 306)

    学习自此博客题解 二分搜索+深搜.二分枚举最小差距值(路径上的最大值与最小值的差距),枚举的最小值为abs(a[1][1]-a[n][n]),最大值为题目给出的120.搜索时代入这个最小差距值,若存在 ...