Beef浏览器利用框架

Beef介绍

beef是一个强大的浏览器利用框架,比我们常见的xss平台要强大很多,它综合了所有浏览器可以利用的模块,将前端攻击利用到了极限,如通过前端js做隧道代理,通过js来对内网进行扫描,可以直接跟Metasploit结合,直接利用Metasploit浏览器相关的攻击模块,正如前面所说的它更多的是一个框架,更多更强大的功能需要我们自己去动手扩展

beef是使用ruby语言开发的,如果你打算完全玩转它,看来你是不是需要闭关几个月的ruby

beef的官方仓库

https://github.com/beefproject/beef

beef官方的手册

https://github.com/beefproject/beef/wiki

beef里面很多模块并不是特别的适合国内使用,如果你有兴趣是不是应该来贡献点代码

Beef架构

官方介绍的beef的基本架构

一般来说我们需要将beef直接部署在公网环境下,因为beef需要直接获取攻击目标的数据,并且beef它支持的浏览器类型较多,chrome firefox ie safari 等,而且它支持手机端的浏览器,它自身有多个模块是单独针对手机端

Beef安装

beef安装也比较容易,根据官方安装流程安装即可,其中官方最新版本已经不在支持windows的安装,为了更好的发挥beef的功能,我们也完全没必要在windows上面安装使用,很多莫名其妙的错误无法解决

我们以linux(centos)为例来尝试安装全新的beef环境

安装最新版本的ruby环境

yum install gcc gcc-c++ wget zlib-devel openssl-devel sqlite-devel
wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
tar -xzvf ruby-2.3.1.tar.gz
cd ruby-2.3.1
./configure --enable-shared --enable-pthread --prefix=/usr/local/ruby
make && make install

cd ext/zlib
ruby ./extconf.rb
make && make install

cd ext/openssl
ruby ./extconf.rb
make && make install

如果报以下错误
make: *** No rule to make target `/include/ruby.h', needed by `ossl_pkcs12.o'.  Stop.

vi Makefile
top_srcdir = ../..
将上一条内容插入 Makefile 文件前几行就行,再次make && make install

添加ruby到环境变量

echo "PATH=$PATH:/usr/local/ruby/bin;export PATH" >> /etc/profile
source /etc/profile

安装bundle

gem install bundle

获取最新的beef

git clone git://github.com/beefproject/beef.git
cd beef
bundle install

Beef配置

beef主配置文件为根目录下的 config.yaml文件

1:网络限制,主要配置hook能够回连的网段设置和后台能够访问的网段,默认为0.0.0.0/0表示

如你通过其他手段给网站的首页挂了xss又不想被所有的用户运行我们的xss,我们就可以设置指定目标的网段信息加以过滤,如下面的 10.1.0.0/16网段,同时为了安全我们需要将管理的后台地址添加为本地的ip

restrictions:
    permitted_hooking_subnet: "10.1.0.0/16"
    permitted_ui_subnet: "127.0.0.1/32"

2:web服务相关配置(主要的配置)

http:
        debug: false #开启调试模式,可以输出web服务器具体的调试信息,默认为关闭
        host: "0.0.0.0"#web服务器监听的ip,默认为对外访问
        port: "3000"#web服务器工作的端口
        xhr_poll_timeout: 1000 #这里为我们xss回传数据的频率,默认为一秒回调一次,实际使用过程中,应该适当的调长点,不然容易被察觉
        web_ui_basepath: "/ui" #beef后台uri
        hook_file: "/hook.js"#我们js的文件名,可以减少字符如/1等,这里并不是一个真实存在的js文件只是一个路由的名字可以任意修改,最后会将所有的js合并输出
        hook_session_name: "BEEFHOOK"#session关键字尽量改成其他的
        session_cookie_name: "BEEFSESSION"#sessionid的名字一样尽量改成其他不易察觉的名字

        #cors接口相关的配置
        restful_api:
            allow_cors: false
            cors_allowed_domains: "http://browserhacker.com"

        
        websocket:
            enable: false
            port: 61985 # WS: good success rate through proxies
            # Use encrypted 'WebSocketSecure'
            # NOTE: works only on HTTPS domains and with HTTPS support enabled in BeEF
            secure: true
            secure_port: 61986 # WSSecure
            ws_poll_timeout: 1000 # poll BeEF every second
            ws_connect_timeout: 500 # useful to help fingerprinting finish before establishing the WS channel

        #伪装成一些常见的web服务器,用户在访问你这套beef系统时会返回这些信息
        web_server_imitation:
            enable: true
            type: "apache" # Supported: apache, iis, nginx
            hook_404: false # inject BeEF hook in HTTP 404 responses
            hook_root: false # inject BeEF hook in the server home page
        #https协议相关的配置
        https:
            enable: false
            # In production environments, be sure to use a valid certificate signed for the value
            # used in beef.http.public (the domain name of the server where you run BeEF)
            key: "beef_key.pem"
            cert: "beef_cert.pem"

beef管理形式

1:webui
默认情况下我们使用web形式来管理就非常方便了,默认安装beef后后台访问地址为
http://xxxx:3000/ui/panel

2:命令行操作

3:RestFul API


(*beef自带的两处方便测试地址 http://localhost:3000/demos/basic.html
或者 http://localhost:3000/demos/butcher/index.html )

Beef模块介绍

1:操作接口 2:信息收集 3:社会工程学 4:网络发现 5:Metasploit 6:xss隧道 7:Xss Rays 8:保持 9:定位

1:信息收集

在我们成功xss后,beef的payload回调相关信息到beef平台,beef默认情况下回调的数据已经能够满足我们一般的获取后台地址和cookie等需求

1.1 浏览器指纹

1:浏览器名和版本
2:浏览器的User Agent信息
3:窗口大小

1.2 浏览器支持的组件情况

1.3 当前xss运行页面,其中page uri和cookies较为重要,在结合beef来获取后台地址和cookie时主要获取此两项值

1.4 主机相关信息,如ip地址操作系统和cpu等,其中ip等信息在相关xss中也是重要获取的资源

1.5 验证浏览器指纹模块(Fingerprint Browser (PoC))

我些情况下我们可以通过修改自己的user-agent伪造成其他的浏览器,因此我们如果想真正判断对方使用的浏览器就可以使用搞到此模块

commands–>Fingerprint Browser (PoC) 执行后获取结果

其判断的原理为通过不同浏览器内部的一些图片资源来判断

	var fingerprints = new Array(
		new Array("Safari","1+","feed://__rsrc__/__rsrc__/NextPage.tif"),
		new Array("Firefox","1+","moz-icon://.autoreg?size=16"),
		new Array("Firefox","2","resource:///res/html/gopher-audio.gif"),
		new Array("Firefox","2-3","jar:resource:///chrome/classic.jar!/skin/classic/browser/Secure.png"),
		new Array("Firefox","4-5","resource:///chrome/browser/skin/classic/browser/Secure.png"),
		new Array("Firefox","1-6","resource:///chrome/browser/content/branding/icon128.png"),
		new Array("Firefox","4+","resource:///chrome/browser/skin/classic/browser/Geolocation-16.png"),
		new Array("Firefox","7+","resource:///chrome/browser/content/browser/aboutHome-snippet1.png"),
		new Array("Firefox","8+","resource:///chrome/browser/skin/classic/aero/browser/Toolbar-inverted.png"),
		new Array("Firefox","9+","resource:///chrome/browser/skin/classic/aero/browser/identity.png"),
		new Array("Firefox","10+","chrome://browser/skin/sync-128.png"),
		new Array("Firefox","13+","chrome://browser/content/abouthome/noise.png"),
		new Array("Firefox","18+","resource:///chrome/browser/skin/classic/aero/browser/webRTC-shareDevice-16.png"),
		new Array("Internet Explorer","5-6","res://shdoclc.dll/pagerror.gif"),
		new Array("Internet Explorer","7-9","res://ieframe.dll/ielogo.png"),
		new Array("Internet Explorer","7+", "res://ieframe.dll/info_48.png"),
		new Array("Internet Explorer","10+","res://ieframe.dll/immersivelogo.png"),
		new Array("Tor Browser","1+","chrome://browser/content/abouttbupdate/aboutTBUpdateLogo.png")
	);
	//不同版本对应不同的内部图片资源,通过for循环依次尝试,如果onload能成功调用说明图片加载成功即回调对应的版本即可
for (var i=0; i<fingerprints.length; i++) {
	var img = new Image;
	img.id = fingerprints[i][0];
	img.name = fingerprints[i][1];
	img.src = fingerprints[i][2];
	img.onload = function() { browser_type.push(this.id); browser_version.push(this.name); dom.removeChild(this); }
	dom.appendChild(img);
}

2:beef社会工程学模块

Beef其他模块

Beef实例演示

1:通过beef渗透内容 2:通过beef配置

Beef改造