diff --git a/lib/filter/base.rb b/lib/filter/base.rb index 633f566af..03af1ed8a 100644 --- a/lib/filter/base.rb +++ b/lib/filter/base.rb @@ -89,6 +89,12 @@ module BeEF return false if not is_non_empty_string?(str) (str =~ /[^\302\256[:print:]]/).nil? # \302\256 is the (r) character end + + # verbose filter + def self.has_valid_verbose_details_chars?(str) + return false if not is_non_empty_string?(str) + (str =~ /[^\w\d\s{}()-.,;:&_=\/!\302\256]/).nil? # \302\256 is the (r) character + end end diff --git a/lib/filter/command.rb b/lib/filter/command.rb index 74bea6253..a41f08e22 100644 --- a/lib/filter/command.rb +++ b/lib/filter/command.rb @@ -34,7 +34,7 @@ module BeEF # check if valid command module datastore value def self.is_valid_command_module_datastore_param?(str) return false if has_null?(str) - return false if not has_valid_base_chars?(str) + return false if not has_valid_verbose_details_chars?(str) true end diff --git a/lib/modules/command.rb b/lib/modules/command.rb index 2cebc4fef..ab8903283 100644 --- a/lib/modules/command.rb +++ b/lib/modules/command.rb @@ -105,7 +105,7 @@ module BeEF @datastore = {'http_headers' => {}} # init the datastore # get, check and add the http_params to the datastore - http_params.keys.each {|http_params_key| + http_params.keys.each { |http_params_key| raise WEBrick::HTTPStatus::BadRequest, "http_params_key is invalid" if not BeEF::Filter.is_valid_command_module_datastore_key?(http_params_key) http_params_value = Erubis::XmlHelper.escape_xml(http_params[http_params_key]) raise WEBrick::HTTPStatus::BadRequest, "http_params_value is invalid" if not BeEF::Filter.is_valid_command_module_datastore_param?(http_params_value) diff --git a/modules/commands/browser/detect_details/detect_details.js b/modules/commands/browser/detect_details/detect_details.js index e6a643dc0..7be854e2f 100644 --- a/modules/commands/browser/detect_details/detect_details.js +++ b/modules/commands/browser/detect_details/detect_details.js @@ -50,13 +50,13 @@ function serialize(_obj) } } - var plugins = beef.browser.getPlugins(); - var browser_type = serialize(beef.browser.type()); + var plugins = escape(beef.browser.getPlugins()); + var browser_type = escape(serialize(beef.browser.type())); var java_enabled = (beef.browser.hasJava())? "Yes" : "No"; var vbscript_enabled = (beef.browser.hasVBScript())? "Yes" : "No"; var has_flash = (beef.browser.hasFlash())? "Yes" : "No"; var has_googlegears = (beef.browser.hasGoogleGears())? "Yes" : "No"; - var screen_params = serialize(beef.browser.getScreenParams()); - var window_size = serialize(beef.browser.getWindowSize()); + var screen_params = escape(serialize(beef.browser.getScreenParams())); + var window_size = escape(serialize(beef.browser.getWindowSize())); beef.net.sendback('<%= @command_url %>', <%= @command_id %>, 'plugins='+plugins+'&java_enabled='+java_enabled+'&vbscript_enabled='+vbscript_enabled+'&has_flash='+has_flash+'&has_googlegears='+has_googlegears+'&browser_type='+browser_type+'&screen_params='+screen_params+'&window_size='+window_size); }); \ No newline at end of file