浏览器exp使用经验

0x00背景

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

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

等等。chrome

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

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

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

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

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

能够看到这样一个完整的攻击流畅,每一步都须要用户主动参与。cookie

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

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

攻击者得到远程代码执行以后,还须要利用突破沙箱的漏洞(沙箱自己或者操做系统内核漏洞),提高权限才能执行下载的恶意代码。

攻击者若是结合这两类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以后,查看一下当前程序所在的目录:

shell1

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

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

shell2

失败了,显示错误为权限不足。看到这里,或许你已经明白了为什么使用msf模块windows/download_exec会失败的缘由了:咱们通常在使用的时候都只会更改URL参数,不多去更改EXE参数,即便去更改EXE的值也只是换个名字罢了,不会去设置下载文件的全路径,因此默认下载的位置就会是:当前桌面/EXE的值。由于沙箱所致使的权限问题,这样就会失败。
shell3

2.1 思路一

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

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

bp

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

bp2

“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能够写入的目录了。咱们在文件管理器中查看一下该文件:

bp3

再仔细看一下这个目录,这彷佛正是IE的缓存目录?!咱们来查看一下:

bp4

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

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

2.2 思路二

若是你使用过msf中内核提权漏洞的利用模块,在使用的时候,你只须要设置一个SESSION参数就能够了。

s1

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

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

s2

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

相关文章
相关标签/搜索