diff --git a/beef b/beef deleted file mode 100755 index bbab62e73..000000000 --- a/beef +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/env ruby - -# -# Copyright 2012 Wade Alcorn wade@bindshell.net -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -# stop deprecation warning from being displayed -$VERBOSE = nil - -# @note Version check to ensure BeEF is running Ruby 1.9 > -if RUBY_VERSION < '1.9' - puts "\n" - puts "Ruby version " + RUBY_VERSION + " is no longer supported. Please upgrade 1.9 or later." - puts "OSX:" - puts "See Readme" - puts "\n" - exit -end - -$:.unshift(File.join(File.expand_path(File.dirname(__FILE__)), '.')) -$root_dir = File.expand_path('..', __FILE__) - -# @note Prevent some errors on encoding: encoding handling changed (improved) from 1.8.7 to 1.9.1/2. -if RUBY_VERSION =~ /1.9/ - Encoding.default_external = Encoding::UTF_8 - Encoding.default_internal = Encoding::UTF_8 -end - -# @note Require core loader's -require 'core/loader' - -# @note Initialize the Configuration object. Eventually loads a different config.yaml if -c flag was passed. -if BeEF::Core::Console::CommandLine.parse[:ext_config].empty? - config = BeEF::Core::Configuration.new("#{$root_dir}/config.yaml") -else - config = BeEF::Core::Configuration.new("#{$root_dir}/#{BeEF::Core::Console::CommandLine.parse[:ext_config]}") -end - -# @note After the BeEF core is loaded, bootstrap the rest of the framework internals -require 'core/bootstrap' - -# @note Loads enabled extensions -BeEF::Extensions.load - -# @note Prints the BeEF ascii art if the -a flag was passed -if BeEF::Core::Console::CommandLine.parse[:ascii_art] == true - BeEF::Core::Console::Banners.print_ascii_art -end - -# @note Prints BeEF welcome message -BeEF::Core::Console::Banners.print_welcome_msg - -# @note Loads enabled modules -BeEF::Modules.load - -# @note Disable reverse dns -Socket.do_not_reverse_lookup = true - -# @note Database setup - use DataMapper::Logger.new($stdout, :debug) for development debugging -case config.get("beef.database.driver") - when "sqlite" - DataMapper.setup(:default, "sqlite3://#{$root_dir}/#{config.get("beef.database.db_file")}") - when "mysql","postgres" - DataMapper.setup(:default, - :adapter => config.get("beef.database.driver"), - :host => config.get("beef.database.db_host"), - :username => config.get("beef.database.db_user"), - :password => config.get("beef.database.db_passwd"), - :database => config.get("beef.database.db_name"), - :encoding => config.get("beef.database.db_encoding") - ) - else - print_error 'No default database selected. Please add one in config.yaml' -end - -# @note Resets the database if the -x flag was passed -if BeEF::Core::Console::CommandLine.parse[:resetdb] - print_info 'Resetting the database for BeEF.' - DataMapper.auto_migrate! -else - DataMapper.auto_upgrade! -end - -# @note Extensions may take a moment to load, thus we print out a please wait message -print_info 'BeEF is loading. Wait a few seconds...' - -# @note Execute migration procedure, checks for new modules -BeEF::Core::Migration.instance.update_db! - -# @note Create HTTP Server and prepare it to run -http_hook_server = BeEF::Core::Server.instance -http_hook_server.prepare - -# @note Prints information back to the user before running the server -BeEF::Core::Console::Banners.print_loaded_extensions -BeEF::Core::Console::Banners.print_loaded_modules -BeEF::Core::Console::Banners.print_network_interfaces_count -BeEF::Core::Console::Banners.print_network_interfaces_routes - -#@note Prints the API key needed to use the RESTful API -print_info "RESTful API key: #{BeEF::Core::Crypto::api_token}" - -# @note Call the API method 'pre_http_start' -BeEF::API::Registrar.instance.fire(BeEF::API::Server, 'pre_http_start', http_hook_server) - -# @note Start the HTTP Server, we additionally check whether we load the Console Shell or not -if config.get("beef.extension.console.shell.enable") == true - require 'extensions/console/shell' - puts "" - begin - FileUtils.mkdir_p(File.expand_path(config.get("beef.extension.console.shell.historyfolder"))) - BeEF::Extension::Console::Shell.new(BeEF::Extension::Console::Shell::DefaultPrompt, - BeEF::Extension::Console::Shell::DefaultPromptChar,{'config' => config, 'http_hook_server' => http_hook_server}).run - rescue Interrupt - end -else - print_info 'BeEF server started (press control+c to stop)' - http_hook_server.start -end diff --git a/config.yaml b/config.yaml index 5fd15dac8..cc3de7e80 100644 --- a/config.yaml +++ b/config.yaml @@ -17,7 +17,7 @@ beef: version: '0.4.3.3-alpha' - debug: false + debug: true restrictions: # subnet of browser ip addresses that can hook to the framework @@ -27,7 +27,7 @@ beef: permitted_ui_subnet: "0.0.0.0/0" http: - debug: false #Thin::Logging.debug, very verbose. Prints also full exception stack trace. + debug: true #Thin::Logging.debug, very verbose. Prints also full exception stack trace. host: "0.0.0.0" port: "3000" # if running behind a nat set the public ip address here @@ -67,4 +67,4 @@ beef: enable: false console: shell: - enable: true + enable: false diff --git a/core/bootstrap.rb b/core/bootstrap.rb index 2ce5f8643..b070cf051 100644 --- a/core/bootstrap.rb +++ b/core/bootstrap.rb @@ -46,3 +46,6 @@ require 'core/main/rest/handlers/hookedbrowsers' require 'core/main/rest/handlers/modules' require 'core/main/rest/handlers/logs' require 'core/main/rest/api' + +## @note Include Websocket +require 'core/main/network_stack/websocket/handlers/module' diff --git a/core/main/client/websocket.js b/core/main/client/websocket.js index 4b4b9a075..8114364f2 100644 --- a/core/main/client/websocket.js +++ b/core/main/client/websocket.js @@ -17,9 +17,11 @@ //beef.websocket.socket.send(take answer to server beef) /*New browser init call this */ beef.websocket = { + socket: null, /*websocket send Helo to beef server and start async communication*/ start:function(){ + console.log("started ws \n") /*server is always on ws.beefServer:6666*/ var webSocketServer=beef.net.host; /*beefHost*/ var webSocketPort=6666; @@ -28,8 +30,9 @@ beef.websocket = { else this.socket = new WebSocket("ws://"+webSocketServer+":"+webSocketPort+"/"); /*so the server is just up we need send helo id @todo insert browser ID where can i get them?*/ - this.socket.send("Helo"+"myid00"); + this.socket.send("Helo"+"myid00"); + console.log("Connected and Helo"); } diff --git a/core/main/network_stack/websocket/handlers/module.rb b/core/main/network_stack/websocket/handlers/module.rb index 235b2d1b0..b7cf8087f 100644 --- a/core/main/network_stack/websocket/handlers/module.rb +++ b/core/main/network_stack/websocket/handlers/module.rb @@ -15,15 +15,20 @@ # module BeEF module Core - module Rest - class Websocket + module Websocket + + + def initialize + + + print_info("Inside") #load the library $LOAD_PATH << File.dirname(__FILE__) + "../lib" require "web_socket" server = WebSocketServer.new("localhost", 6666) #we get host and port how server.run() do |ws| #@TODO debug print the path and who request for hooked browser mapping - printf("Path requested #{ws.path} Originis #{ws.origin}") + print_info("Path requested #{ws.path} Originis #{ws.origin}") if ws.path == "/" ws.handshake() #accept and connect @@ -34,18 +39,17 @@ module BeEF if (message!="helo") #module return value case else - printf("Browser #{ws.origin} says helo! ws is running") + print_info("Browser #{ws.origin} says helo! ws is running") end - end - - end end + + end end end -end \ No newline at end of file +end