diff --git a/beef b/beef index c47c359b9..dbbb16f77 100755 --- a/beef +++ b/beef @@ -5,11 +5,17 @@ $root_dir = File.expand_path('..', __FILE__) require 'core/loader' +# load config +config = BeEF::Core::Configuration.instance + +# Loads extensions +BeEF::Extensions.load + #prints welcome message BeEF::Extension::Console::Banners.print_welcome_msg -# load config -config = BeEF::Core::Configuration.instance +# Loads modules +BeEF::Modules.load # disable reverse dns Socket.do_not_reverse_lookup = true diff --git a/core/extension.rb b/core/extension.rb index 7569ec0e7..e0cdabee4 100644 --- a/core/extension.rb +++ b/core/extension.rb @@ -16,5 +16,16 @@ module Extension return (self.is_enabled(ext) and BeEF::Core::Configuration.instance.get('beef.extension.'+ext.to_s+'.loaded') == true) end + # Loads extension + def self.load(ext) + if File.exists?('extensions/'+ext+'/extension.rb') + require 'extensions/'+ext+'/extension.rb' + print_debug "Loaded extension: '#{ext}'" + BeEF::Core::Configuration.instance.set('beef.extension.'+ext+'.loaded', true) + return true + end + print_error "Unable to load extension '#{ext}'" + return false + end end end diff --git a/core/extensions.rb b/core/extensions.rb index 984b55c0b..d8d2431c2 100644 --- a/core/extensions.rb +++ b/core/extensions.rb @@ -1,6 +1,23 @@ module BeEF module Extensions + # Return configuration hashes of all extensions that are enabled + def self.get_enabled + return BeEF::Core::Configuration.instance.get('beef.extension').select { |k,v| v['enable'] == true } + end + + # Return configuration hashes of all extensions that are loaded + def self.get_loaded + return BeEF::Core::Configuration.instance.get('beef.extension').select {|k,v| v['loaded'] == true } + end + + # Loads all enabled extensions + def self.load + self.get_enabled.each { |k,v| + BeEF::Extension.load(k) + } + end + end end diff --git a/core/loader.rb b/core/loader.rb index c8f3e2121..50b62403f 100644 --- a/core/loader.rb +++ b/core/loader.rb @@ -39,23 +39,3 @@ require 'core/module' require 'core/modules' require 'core/extension' require 'core/extensions' - -config = BeEF::Core::Configuration.instance - -# Include extensions defined in the Configuration -extensions = config.get('beef.extension').select{|key, ext| ext['enable'] == true } -extensions.each{ |k,v| - if File.exists?('extensions/'+k+'/extension.rb') - require 'extensions/'+k+'/extension.rb' - end -} - -# Include modules defined in the Configuration -modules = config.get('beef.module').select{|key, mod| mod['enable'] == true and mod['category'] != nil } -modules.each{ |k,v| - cat = BeEF::Module.safe_category(v['category']) - if File.exists?('modules/'+cat+'/'+k+'/module.rb') - require 'modules/'+cat+'/'+k+'/module.rb' - config.set('beef.module.'+k+'.loaded', true) - end -} diff --git a/core/module.rb b/core/module.rb index 480b5f51d..52fc20b38 100644 --- a/core/module.rb +++ b/core/module.rb @@ -15,6 +15,19 @@ module Module def self.is_loaded(mod) return (self.is_enabled(mod) and BeEF::Core::Configuration.instance.get('beef.module.'+mod.to_s+'.loaded') == true) end + + # Loads module + def self.load(mod, cat) + cat = BeEF::Module.safe_category(cat) + if File.exists?('modules/'+cat+'/'+mod+'/module.rb') + require 'modules/'+cat+'/'+mod+'/module.rb' + BeEF::Core::Configuration.instance.set('beef.module.'+mod+'.loaded', true) + print_debug "Loaded module: '#{mod}'" + return true + end + print_error "Unable to load module '#{mod}'" + return false + end # Returns category name in a system folder format def self.safe_category(cat) diff --git a/core/modules.rb b/core/modules.rb index 5ed49dc0d..d3e72c3df 100644 --- a/core/modules.rb +++ b/core/modules.rb @@ -1,9 +1,21 @@ module BeEF module Modules - def self.safe_category(cat) - return cat.to_s.strip.downcase.sub(/\s/, '_') + # Return configuration hashes of all modules that are enabled + def self.get_enabled + return BeEF::Core::Configuration.instance.get('beef.module').select {|k,v| v['enable'] == true and v['category'] != nil } end + # Return configuration hashes of all modules that are loaded + def self.get_loaded + return BeEF::Core::Configuration.instance.get('beef.module').select {|k,v| v['loaded'] == true } + end + + # Loads modules + def self.load + self.get_enabled.each { |k,v| + BeEF::Module.load(k, v['category']) + } + end end end diff --git a/core/ruby/print.rb b/core/ruby/print.rb index 600217381..d2bf751ae 100644 --- a/core/ruby/print.rb +++ b/core/ruby/print.rb @@ -17,7 +17,7 @@ end # def print_debug(s) config = BeEF::Core::Configuration.instance - if config.get('beef.debug') || BeEF::Extension::Console.verbose? + if config.get('beef.debug') || (BeEF::Extension.is_loaded('console') && BeEF::Extension::Console.verbose?) puts Time.now.localtime.strftime("[%k:%M:%S]")+'[>]'.yellow+' '+s end end