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. OpenCV3.0.0+win10 64位+vs2015环境的下载,安装,配置

    操作系统:WIN10 pro 64 软件版本:VS2015+OpenCV3.0.0   1. 下载安装 http://opencv.org/ https://www.visualstudio.com/ ...

  2. 百万行mysql数据库优化和10G大文件上传方案

    百万行mysql数据库优化和10G大文件上传方案 最近这几天正在忙这个优化的方案,一直没时间耍,忙碌了一段时间终于还是拿下了这个项目?项目中不要每次都把程序上的问题,让mysql数据库来承担,它只是个 ...

  3. git的初步使用---本地代码库的使用和提交

    git的初步使用---本地代码库的使用和提交 git是一个好东西,但对于新手来说,这个工具并不好使用,因为它里面涉及到很多东西,而这些东西新手一时间是无法理解的.不幸的是,本人就是新手一枚,所以,这里 ...

  4. Kendo UI开发教程(9): Kendo UI Validator 概述

    Kendo UI Validator 支持了客户端校验的便捷方法,它基于HTML 5 的表单校验功能,支持很多内置的校验规则,同时也提供了自定义规则的便捷方法. 完整的Kendo UI 的Valida ...

  5. day7 面向对象编程

    编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种 ...

  6. Qt在表格中加入控件

    任务:使用QTableWidget动态生成表格,在每行的某两列中加入QComboBox下拉框控件和QPushButton按钮控件 有添加,删除,编辑功能,每行的按钮可以浏览文件夹并选择文件 1.新建一 ...

  7. php的数组与字符串的转换函数整理

    1.将一个字符串转化为数组 str_split()用于将一个字符串转化为数组 语法: str_split(string,length) //string是必须的,是要分割的字符串: //length是 ...

  8. Hadoop 统计文件中某个单词出现的次数

    如文件word.txt内容如下: what is you name? my name is zhang san. 要求统计word.txt中出现“is”的次数? 代码如下: PerWordMapper ...

  9. 如何制作一个类似Tiny Wings的游戏 Cocos2d-x 2.1.4

    在第一篇<如何使用CCRenderTexture创建动态纹理>基础上,增加创建动态山丘,原文<How To Create A Game Like Tiny Wings with Co ...

  10. Android中系统设置中的清除数据究竟会清除哪些数据

    今天中的一个story突然提到了系统设置中的清理数据,后来开始思考究竟系统的应用的这个清理功能,究竟会清理那些数据. 于是开始研究,以com.mx.browser为例,思路大概为首先为/data/da ...