diff --git a/core/main/client/browser.js b/core/main/client/browser.js index 8b6fabf4d..ae679a8de 100644 --- a/core/main/client/browser.js +++ b/core/main/client/browser.js @@ -886,6 +886,57 @@ beef.browser = { return quicktime; + }, + + /** + * Checks if the zombie has the RealPlayer plugin installed. + * @return: {Boolean} true or false. + * + * @example: if ( beef.browser.hasRealPlayer() ) { ... } + */ + hasRealPlayer:function () { + + var realplayer = false; + + // Not Internet Explorer + if (!this.type().IE) { + + for (i = 0; i < navigator.plugins.length; i++) { + + if (navigator.plugins[i].name.indexOf("RealPlayer") >= 0) { + realplayer = true; + } + + } + + // Internet Explorer + } else { + + var definedControls = [ + 'RealPlayer', + 'rmocx.RealPlayer G2 Control', + 'rmocx.RealPlayer G2 Control.1', + 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)', + 'RealVideo.RealVideo(tm) ActiveX Control (32-bit)' + ]; + + for (var i = 0; i < definedControls.length; i++) { + + try { + + var rp_test = new ActiveXObject(definedControls[i]); + + } catch (e) { + } + + if ( rp_test ) { + realplayer = true; + } + } + } + + return realplayer; + }, /** @@ -2077,6 +2128,7 @@ beef.browser = { var has_activex = (beef.browser.hasActiveX()) ? "Yes" : "No"; var has_silverlight = (beef.browser.hasSilverlight()) ? "Yes" : "No"; var has_quicktime = (beef.browser.hasQuickTime()) ? "Yes" : "No"; + var has_realplayer = (beef.browser.hasRealPlayer()) ? "Yes" : "No"; var has_session_cookies = (beef.browser.cookie.hasSessionCookies("cookie")) ? "Yes" : "No"; var has_persistent_cookies = (beef.browser.cookie.hasPersistentCookies("cookie")) ? "Yes" : "No"; @@ -2108,6 +2160,7 @@ beef.browser = { if (has_activex) details['HasActiveX'] = has_activex; if (has_silverlight) details['HasSilverlight'] = has_silverlight; if (has_quicktime) details['HasQuickTime'] = has_quicktime; + if (has_realplayer) details['HasRealPlayer'] = has_realplayer; if (has_session_cookies) details["hasSessionCookies"] = has_session_cookies; if (has_persistent_cookies) details["hasPersistentCookies"] = has_persistent_cookies; diff --git a/core/main/handlers/browserdetails.rb b/core/main/handlers/browserdetails.rb index bf36bcd73..0a570f2b8 100644 --- a/core/main/handlers/browserdetails.rb +++ b/core/main/handlers/browserdetails.rb @@ -270,6 +270,14 @@ module BeEF else self.err_msg "Invalid value for HasQuickTime returned from the hook browser's initial connection." end + + # get and store the yes|no value for HasRealPlayer + has_realplayer = get_param(@data['results'], 'HasRealPlayer') + if BeEF::Filters.is_valid_yes_no?(has_realplayer) + BD.set(session_id, 'HasRealPlayer', has_realplayer) + else + self.err_msg "Invalid value for HasRealPlayer returned from the hook browser's initial connection." + end # get and store the value for CPU cpu_type = get_param(@data['results'], 'CPU') diff --git a/extensions/admin_ui/controllers/modules/modules.rb b/extensions/admin_ui/controllers/modules/modules.rb index da13e62bf..1d06f4713 100644 --- a/extensions/admin_ui/controllers/modules/modules.rb +++ b/extensions/admin_ui/controllers/modules/modules.rb @@ -82,6 +82,7 @@ class Modules < BeEF::Extension::AdminUI::HttpController ['Browser Components', 'Silverlight', 'HasSilverlight'], ['Browser Components', 'Web Sockets', 'HasWebSocket'], ['Browser Components', 'QuickTime', 'HasQuickTime'], + ['Browser Components', 'RealPlayer', 'HasRealPlayer'], ['Browser Components', 'ActiveX', 'HasActiveX'], ['Browser Components', 'Session Cookies', 'hasSessionCookies'], ['Browser Components', 'Persistent Cookies', 'hasPersistentCookies'], diff --git a/extensions/admin_ui/controllers/panel/panel.rb b/extensions/admin_ui/controllers/panel/panel.rb index b853350db..6c99bafbf 100644 --- a/extensions/admin_ui/controllers/panel/panel.rb +++ b/extensions/admin_ui/controllers/panel/panel.rb @@ -90,7 +90,8 @@ module BeEF has_java = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'JavaEnabled') has_activex = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'HasActiveX') has_silverlight = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'HasSilverlight') - has_quicktime = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'HasQuickTime') + has_quicktime = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'HasQuickTime') + has_realplayer = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'HasRealPlayer') date_stamp = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'DateStamp') return { @@ -111,7 +112,8 @@ module BeEF 'has_java' => has_java, 'has_activex' => has_activex, 'has_silverlight' => has_silverlight, - 'has_quicktime' => has_quicktime, + 'has_quicktime' => has_quicktime, + 'has_realplayer' => has_realplayer, 'date_stamp' => date_stamp } diff --git a/extensions/admin_ui/media/javascript/ui/panel/ZombiesMgr.js b/extensions/admin_ui/media/javascript/ui/panel/ZombiesMgr.js index 0dad2631e..ff5eb12ec 100644 --- a/extensions/admin_ui/media/javascript/ui/panel/ZombiesMgr.js +++ b/extensions/admin_ui/media/javascript/ui/panel/ZombiesMgr.js @@ -30,6 +30,7 @@ var ZombiesMgr = function(zombies_tree_lists) { var has_activex = zombie_array[index]["has_activex"]; var has_silverlight = zombie_array[index]["has_silverlight"]; var has_quicktime = zombie_array[index]["has_quicktime"]; + var has_realplayer = zombie_array[index]["has_realplayer"]; var date_stamp = zombie_array[index]["date_stamp"]; text = " "; @@ -48,6 +49,7 @@ var ZombiesMgr = function(zombies_tree_lists) { balloon_text+= "
ActiveX: " + has_activex; balloon_text+= "
Silverlight: " + has_silverlight; balloon_text+= "
QuickTime: " + has_quicktime; + balloon_text+= "
RealPlayer: " + has_realplayer; balloon_text+= "
Google Gears: " + has_googlegears; balloon_text+= "
Date: " + date_stamp; diff --git a/extensions/console/lib/shellinterface.rb b/extensions/console/lib/shellinterface.rb index 72798a756..4c2bf5abf 100644 --- a/extensions/console/lib/shellinterface.rb +++ b/extensions/console/lib/shellinterface.rb @@ -298,6 +298,7 @@ class ShellInterface ['Browser Components', 'Silverlight', 'HasSilverlight'], ['Browser Components', 'Web Sockets', 'HasWebSocket'], ['Browser Components', 'QuickTime', 'HasQuickTime'], + ['Browser Components', 'RealPlayer', 'HasRealPlayer'], ['Browser Components', 'ActiveX', 'HasActiveX'], ['Browser Components', 'Session Cookies', 'hasSessionCookies'], ['Browser Components', 'Persistent Cookies', 'hasPersistentCookies'], diff --git a/modules/browser/detect_realplayer/command.js b/modules/browser/detect_realplayer/command.js new file mode 100644 index 000000000..0b700ada2 --- /dev/null +++ b/modules/browser/detect_realplayer/command.js @@ -0,0 +1,14 @@ +// +// Copyright (c) 2006-2013 Wade Alcorn - wade@bindshell.net +// Browser Exploitation Framework (BeEF) - http://beefproject.com +// See the file 'doc/COPYING' for copying permission +// + +beef.execute(function() { + + var result = ( beef.browser.hasRealPlayer() )? "Yes" : "No"; + + beef.net.send("<%= @command_url %>", <%= @command_id %>, "realplayer="+result); + +}); + diff --git a/modules/browser/detect_realplayer/config.yaml b/modules/browser/detect_realplayer/config.yaml new file mode 100644 index 000000000..5be73c568 --- /dev/null +++ b/modules/browser/detect_realplayer/config.yaml @@ -0,0 +1,15 @@ +# +# Copyright (c) 2006-2013 Wade Alcorn - wade@bindshell.net +# Browser Exploitation Framework (BeEF) - http://beefproject.com +# See the file 'doc/COPYING' for copying permission +# +beef: + module: + detect_realplayer: + enable: true + category: "Browser" + name: "Detect RealPlayer" + description: "This module will check if the browser has RealPlayer support." + authors: ["gcattani"] + target: + working: ["All"] diff --git a/modules/browser/detect_realplayer/module.rb b/modules/browser/detect_realplayer/module.rb new file mode 100644 index 000000000..60dec55e1 --- /dev/null +++ b/modules/browser/detect_realplayer/module.rb @@ -0,0 +1,14 @@ +# +# Copyright (c) 2006-2013 Wade Alcorn - wade@bindshell.net +# Browser Exploitation Framework (BeEF) - http://beefproject.com +# See the file 'doc/COPYING' for copying permission +# +class Detect_realplayer < BeEF::Core::Command + + def post_execute + content = {} + content['realplayer'] = @datastore['realplayer'] + save content + end + +end