diff --git a/core/main/command.rb b/core/main/command.rb index b909e444c..90a1dd2e3 100644 --- a/core/main/command.rb +++ b/core/main/command.rb @@ -170,6 +170,9 @@ module Core JSON.parse(command['data']).each{|v| cc[v['name']] = v['value'] } + if self.respond_to?(:execute) + self.execute + end @output = @eruby.evaluate(cc) @output diff --git a/core/main/handlers/commands.rb b/core/main/handlers/commands.rb index d3832c73d..42a97a33a 100644 --- a/core/main/handlers/commands.rb +++ b/core/main/handlers/commands.rb @@ -51,7 +51,9 @@ module Handlers command = @kclass.new(BeEF::Module.get_key_by_class(@kclass)) # create the commamd module command.build_callback_datastore(@http_params, @http_header) # build datastore from the response command.session_id = beefhook - command.callback # call the command module's callback function - it will parse and save the results + if command.respond_to?(:post_execute) + command.post_execute + end # get/set details for datastore and log entry command_friendly_name = command.friendlyname diff --git a/core/module.rb b/core/module.rb index f1ba0f46c..f8490ef47 100644 --- a/core/module.rb +++ b/core/module.rb @@ -31,6 +31,11 @@ module Module return (self.is_enabled(mod) and BeEF::Core::Configuration.instance.get('beef.module.'+mod.to_s+'.loaded') == true) end + # Returns module class definition + def self.get_definition(mod) + return BeEF::Core::Command.const_get(BeEF::Core::Configuration.instance.get("beef.module.#{mod.to_s}.class")) + end + # Gets all module options def self.get_options(mod) if self.check_hard_load(mod) @@ -346,6 +351,10 @@ module Module print_error "Could not find hooked browser when attempting to execute module '#{mod}'" return false end + command_module = self.get_definition(mod).new(mod) + if command_module.respond_to?(:pre_execute) + command_module.pre_execute + end c = BeEF::Core::Models::Command.new(:data => self.merge_options(mod, opts).to_json, :hooked_browser_id => hb.id, :command_module_id => BeEF::Core::Configuration.instance.get("beef.module.#{mod}.db.id"), diff --git a/modules/browser/detect_visited_urls/module.rb b/modules/browser/detect_visited_urls/module.rb index e002f80e8..facdaeea5 100644 --- a/modules/browser/detect_visited_urls/module.rb +++ b/modules/browser/detect_visited_urls/module.rb @@ -21,7 +21,7 @@ class Detect_visited_urls < BeEF::Core::Command ] end - def callback + def post_execute save({'result' => @datastore['result']}) end diff --git a/modules/browser/hook_ie/module.rb b/modules/browser/hook_ie/module.rb index 88197bd8f..e44a4bb24 100644 --- a/modules/browser/hook_ie/module.rb +++ b/modules/browser/hook_ie/module.rb @@ -47,7 +47,7 @@ class Hook_ie < BeEF::Core::Command end - def callback + def post_execute content = {} content['result'] = @datastore['result'] diff --git a/modules/browser/link_rewrite/module.rb b/modules/browser/link_rewrite/module.rb index 22ec7cf23..087ca82bb 100644 --- a/modules/browser/link_rewrite/module.rb +++ b/modules/browser/link_rewrite/module.rb @@ -22,7 +22,7 @@ class Link_rewrite < BeEF::Core::Command ] end - def callback + def post_execute save({'result' => @datastore['result']}) end diff --git a/modules/browser/site_redirect/module.rb b/modules/browser/site_redirect/module.rb index 91c401930..efabbb04b 100644 --- a/modules/browser/site_redirect/module.rb +++ b/modules/browser/site_redirect/module.rb @@ -21,7 +21,7 @@ class Site_redirect < BeEF::Core::Command ] end - def callback + def post_execute save({'result' => @datastore['result']}) end diff --git a/modules/browser/site_redirect_iframe/module.rb b/modules/browser/site_redirect_iframe/module.rb index 0f49c15bd..9810d0850 100644 --- a/modules/browser/site_redirect_iframe/module.rb +++ b/modules/browser/site_redirect_iframe/module.rb @@ -26,7 +26,7 @@ class Site_redirect_iframe < BeEF::Core::Command # This method is being called when a hooked browser sends some # data back to the framework. # - def callback + def post_execute save({'result' => @datastore['result']}) end diff --git a/modules/debug/test_return_ascii_chars/module.rb b/modules/debug/test_return_ascii_chars/module.rb index 166fe5ce8..ee882eb47 100644 --- a/modules/debug/test_return_ascii_chars/module.rb +++ b/modules/debug/test_return_ascii_chars/module.rb @@ -15,7 +15,7 @@ # class Test_return_ascii_chars < BeEF::Core::Command - def callback + def post_execute content = {} content['Result String'] = @datastore['result_string'] save content diff --git a/modules/debug/test_return_long_string/module.rb b/modules/debug/test_return_long_string/module.rb index 23c88639d..3dfc804e6 100644 --- a/modules/debug/test_return_long_string/module.rb +++ b/modules/debug/test_return_long_string/module.rb @@ -23,7 +23,7 @@ class Test_return_long_string < BeEF::Core::Command end - def callback + def post_execute content = {} content['Result String'] = @datastore['result_string'] save content diff --git a/modules/host/insecure_url_skype/module.rb b/modules/host/insecure_url_skype/module.rb index 45f791273..5d1ad67b4 100644 --- a/modules/host/insecure_url_skype/module.rb +++ b/modules/host/insecure_url_skype/module.rb @@ -19,7 +19,7 @@ class Insecure_url_skype < BeEF::Core::Command { 'name' => 'tel_num', 'description' => 'The telephone number to dial', 'ui_label'=>'Number', 'value' =>'5551234', 'width' => '200px' } end - def callback + def post_execute content = {} content['Result'] = @datastore['result'] save content diff --git a/modules/host/iphone_tel/module.rb b/modules/host/iphone_tel/module.rb index 4fe87917a..92244093e 100644 --- a/modules/host/iphone_tel/module.rb +++ b/modules/host/iphone_tel/module.rb @@ -21,7 +21,7 @@ class Iphone_tel < BeEF::Core::Command ] end - def callback + def post_execute content = {} content['Result'] = @datastore['result'] save content diff --git a/modules/host/physical_location/module.rb b/modules/host/physical_location/module.rb index 10c4b3404..5cb3c8017 100644 --- a/modules/host/physical_location/module.rb +++ b/modules/host/physical_location/module.rb @@ -15,7 +15,7 @@ # class Physical_location < BeEF::Core::Command - def callback + def post_execute content = {} content['Geolocation Enabled'] = @datastore['geoLocEnabled'] content['Latitude'] = @datastore['latitude'] diff --git a/modules/metasploit/browser_autopwn/module.rb b/modules/metasploit/browser_autopwn/module.rb index 9ce589dbb..c235ed142 100644 --- a/modules/metasploit/browser_autopwn/module.rb +++ b/modules/metasploit/browser_autopwn/module.rb @@ -33,7 +33,7 @@ class Browser_autopwn < BeEF::Core::Command # This method is being called when a hooked browser sends some # data back to the framework. # - def callback + def post_execute save({'result' => @datastore['result']}) end diff --git a/modules/misc/alert_dialog/module.rb b/modules/misc/alert_dialog/module.rb index 6bf96d3d6..1dd467c95 100644 --- a/modules/misc/alert_dialog/module.rb +++ b/modules/misc/alert_dialog/module.rb @@ -26,8 +26,8 @@ class Alert_dialog < BeEF::Core::Command 'width' => '400px' }] end - - def callback + + def post_execute content = {} content['User Response'] = "The user clicked the 'OK' button when presented with an alert box." save content diff --git a/modules/misc/clipboard_theft/module.rb b/modules/misc/clipboard_theft/module.rb index 430e208aa..0f89f0e0b 100644 --- a/modules/misc/clipboard_theft/module.rb +++ b/modules/misc/clipboard_theft/module.rb @@ -15,7 +15,7 @@ # class Clipboard_theft < BeEF::Core::Command - def callback + def post_execute content = {} content['clipboard'] = @datastore['clipboard'] save content diff --git a/modules/misc/deface_web_page/module.rb b/modules/misc/deface_web_page/module.rb index 0c1bd451e..5d519fa9c 100644 --- a/modules/misc/deface_web_page/module.rb +++ b/modules/misc/deface_web_page/module.rb @@ -21,7 +21,7 @@ class Deface_web_page < BeEF::Core::Command ] end - def callback + def post_execute content = {} content['Result'] = @datastore['result'] save content diff --git a/modules/misc/extract_local_storage/module.rb b/modules/misc/extract_local_storage/module.rb index 0770931b9..1eaeb5094 100644 --- a/modules/misc/extract_local_storage/module.rb +++ b/modules/misc/extract_local_storage/module.rb @@ -20,7 +20,7 @@ class Extract_local_storage < BeEF::Core::Command # http://diveintohtml5.org/storage.html # - def callback + def post_execute content = {} content['localStorage'] = @datastore['localStorage'] save content diff --git a/modules/misc/prompt_dialog/module.rb b/modules/misc/prompt_dialog/module.rb index ea1644166..55c80447f 100644 --- a/modules/misc/prompt_dialog/module.rb +++ b/modules/misc/prompt_dialog/module.rb @@ -25,7 +25,7 @@ class Prompt_dialog < BeEF::Core::Command # This method is being called when a zombie sends some # data back to the framework. # - def callback + def post_execute # return if @datastore['answer']=='' diff --git a/modules/misc/raw_javascript/module.rb b/modules/misc/raw_javascript/module.rb index bfaae2be4..68431235d 100644 --- a/modules/misc/raw_javascript/module.rb +++ b/modules/misc/raw_javascript/module.rb @@ -25,7 +25,7 @@ class Raw_javascript < BeEF::Core::Command # This method is being called when a zombie sends some # data back to the framework. # - def callback + def post_execute save({'result' => @datastore['result']}) end diff --git a/modules/misc/replace_video/module.rb b/modules/misc/replace_video/module.rb index 903f41519..23b82a42b 100644 --- a/modules/misc/replace_video/module.rb +++ b/modules/misc/replace_video/module.rb @@ -22,7 +22,7 @@ class Replace_video < BeEF::Core::Command ] end - def callback + def post_execute content = {} content['Result'] = @datastore['result'] save content diff --git a/modules/misc/rickroll/module.rb b/modules/misc/rickroll/module.rb index 0e5e417b1..887749580 100644 --- a/modules/misc/rickroll/module.rb +++ b/modules/misc/rickroll/module.rb @@ -15,7 +15,7 @@ # class Rickroll < BeEF::Core::Command - def callback + def post_execute content = {} content['Result'] = @datastore['result'] save content diff --git a/modules/network/coldfusion_dir_traversal_exploit/module.rb b/modules/network/coldfusion_dir_traversal_exploit/module.rb index e9a97d1e1..3a9805ee0 100644 --- a/modules/network/coldfusion_dir_traversal_exploit/module.rb +++ b/modules/network/coldfusion_dir_traversal_exploit/module.rb @@ -29,7 +29,7 @@ class Coldfusion_dir_traversal_exploit < BeEF::Core::Command ] end - def callback + def post_execute save({'result' => @datastore['result']}) end diff --git a/modules/network/detect_local_settings/module.rb b/modules/network/detect_local_settings/module.rb index 77d42047c..ad32e045f 100644 --- a/modules/network/detect_local_settings/module.rb +++ b/modules/network/detect_local_settings/module.rb @@ -21,7 +21,7 @@ class Detect_local_settings < BeEF::Core::Command BeEF::Core::NetworkStack::Handlers::AssetHandler.instance.bind('/modules/network/detect_local_settings/Beeffeine.class','/Beeffeine','class') end - def callback + def post_execute content = {} content['internal ip'] = @datastore['internal_ip'] if not @datastore['internal_ip'].nil? content['internal hostname'] = @datastore['internal_hostname'] if not @datastore['internal_hostname'].nil? diff --git a/modules/network/inter_protocol_win_bindshell/module.rb b/modules/network/inter_protocol_win_bindshell/module.rb index 0ef7dcc8d..9ffc01fec 100644 --- a/modules/network/inter_protocol_win_bindshell/module.rb +++ b/modules/network/inter_protocol_win_bindshell/module.rb @@ -68,7 +68,7 @@ class Inter_protocol_win_bindshell < BeEF::Core::Command ] end - def callback + def post_execute content = {} content['result'] = @datastore['result'] if not @datastore['result'].nil? content['fail'] = @datastore['fail'] if not @datastore['fail'].nil? diff --git a/modules/network/jboss_jmx_upload_exploit/module.rb b/modules/network/jboss_jmx_upload_exploit/module.rb index 83f411010..44a16b80f 100644 --- a/modules/network/jboss_jmx_upload_exploit/module.rb +++ b/modules/network/jboss_jmx_upload_exploit/module.rb @@ -30,7 +30,7 @@ class Jboss_jmx_upload_exploit < BeEF::Core::Command ] end - def callback + def post_execute save({'result' => @datastore['result']}) end diff --git a/modules/network/vtiger_crm_upload_exploit/module.rb b/modules/network/vtiger_crm_upload_exploit/module.rb index 7c44a4053..4d321c6e4 100644 --- a/modules/network/vtiger_crm_upload_exploit/module.rb +++ b/modules/network/vtiger_crm_upload_exploit/module.rb @@ -37,7 +37,7 @@ class Vtiger_crm_upload_exploit < BeEF::Core::Command ] end - def callback + def post_execute return if @datastore['result'].nil? save({'result' => @datastore['result']}) diff --git a/modules/persistence/iframe_above/module.rb b/modules/persistence/iframe_above/module.rb index 812100152..79a38fa43 100644 --- a/modules/persistence/iframe_above/module.rb +++ b/modules/persistence/iframe_above/module.rb @@ -18,7 +18,7 @@ class Iframe_above < BeEF::Core::Command # This method is being called when a hooked browser sends some # data back to the framework. # - def callback + def post_execute save({'result' => @datastore['result']}) end diff --git a/modules/persistence/iframe_keylogger/module.rb b/modules/persistence/iframe_keylogger/module.rb index 10668fbd8..688828df0 100644 --- a/modules/persistence/iframe_keylogger/module.rb +++ b/modules/persistence/iframe_keylogger/module.rb @@ -22,7 +22,7 @@ class Iframe_keylogger < BeEF::Core::Command ] end - def callback + def post_execute content = {} content['keystrokes'] = @datastore['keystrokes'] save content diff --git a/modules/persistence/popunder_window/module.rb b/modules/persistence/popunder_window/module.rb index 5a3422ef4..580010a34 100644 --- a/modules/persistence/popunder_window/module.rb +++ b/modules/persistence/popunder_window/module.rb @@ -18,7 +18,7 @@ class Popunder_window < BeEF::Core::Command # This method is being called when a hooked browser sends some # data back to the framework. # - def callback + def post_execute save({'result' => @datastore['result']}) end diff --git a/modules/recon/collect_links/module.rb b/modules/recon/collect_links/module.rb index 4cd0b297a..96164ab37 100644 --- a/modules/recon/collect_links/module.rb +++ b/modules/recon/collect_links/module.rb @@ -15,7 +15,7 @@ # class Collect_links < BeEF::Core::Command - def callback + def post_execute content = {} content['Links'] = @datastore['links'] diff --git a/modules/recon/detect_soc_nets/module.rb b/modules/recon/detect_soc_nets/module.rb index 0fdebc697..6c43ecea3 100644 --- a/modules/recon/detect_soc_nets/module.rb +++ b/modules/recon/detect_soc_nets/module.rb @@ -21,7 +21,7 @@ class Detect_soc_nets < BeEF::Core::Command ] end - def callback + def post_execute content = {} content['GMail'] = @datastore['gmail'] content['Facebook'] = @datastore['facebook'] diff --git a/modules/recon/detect_tor/module.rb b/modules/recon/detect_tor/module.rb index 8c794b9bf..3ca0cd920 100644 --- a/modules/recon/detect_tor/module.rb +++ b/modules/recon/detect_tor/module.rb @@ -21,7 +21,7 @@ class Detect_tor < BeEF::Core::Command ] end - def callback + def post_execute return if @datastore['result'].nil? save({'result' => @datastore['result']}) diff --git a/modules/recon/internal_network_fingerprinting/module.rb b/modules/recon/internal_network_fingerprinting/module.rb index 1b3a1e445..930de27fe 100644 --- a/modules/recon/internal_network_fingerprinting/module.rb +++ b/modules/recon/internal_network_fingerprinting/module.rb @@ -43,7 +43,7 @@ class Internal_network_fingerprinting < BeEF::Core::Command ] end - def callback + def post_execute content = {} content['device'] =@datastore['device'] if not @datastore['device'].nil? content['url'] = @datastore['url'] if not @datastore['url'].nil? diff --git a/modules/router/linksys_befsr41_csrf/module.rb b/modules/router/linksys_befsr41_csrf/module.rb index 1f000eb47..f646e49da 100644 --- a/modules/router/linksys_befsr41_csrf/module.rb +++ b/modules/router/linksys_befsr41_csrf/module.rb @@ -23,7 +23,7 @@ class Linksys_befsr41_csrf < BeEF::Core::Command ] end - def callback + def post_execute save({'result' => @datastore['result']}) end diff --git a/modules/router/linksys_wrt54g2_csrf/module.rb b/modules/router/linksys_wrt54g2_csrf/module.rb index 6fb16604f..ec9e54eec 100644 --- a/modules/router/linksys_wrt54g2_csrf/module.rb +++ b/modules/router/linksys_wrt54g2_csrf/module.rb @@ -23,7 +23,7 @@ class Linksys_wrt54g2_csrf < BeEF::Core::Command ] end - def callback + def post_execute save({'result' => @datastore['result']}) end diff --git a/modules/router/linksys_wrt54g_csrf/module.rb b/modules/router/linksys_wrt54g_csrf/module.rb index 337b5a35a..a47391393 100644 --- a/modules/router/linksys_wrt54g_csrf/module.rb +++ b/modules/router/linksys_wrt54g_csrf/module.rb @@ -23,7 +23,7 @@ class Linksys_wrt54g_csrf < BeEF::Core::Command ] end - def callback + def post_execute save({'result' => @datastore['result']}) end