diff --git a/core/main/client/browser.js b/core/main/client/browser.js
index 5b427ffb3..f05f13b83 100644
--- a/core/main/client/browser.js
+++ b/core/main/client/browser.js
@@ -1094,6 +1094,47 @@ beef.browser = {
}
},
+ /**
+ * Checks if the zombie has the Unity Web Player plugin installed.
+ * @return: {Boolean} true or false.
+ *
+ * @example: if ( beef.browser.hasUnity() ) { ... }
+ */
+ hasUnity:function () {
+
+ var unity = false;
+
+ // Not Internet Explorer
+ if (!this.type().IE) {
+
+ if (navigator.mimeTypes["application/vnd.unity"].enabledPlugin &&
+ navigator.plugins &&
+ navigator.plugins["Unity Player"]) {
+
+ unity = true;
+
+ }
+
+ // Internet Explorer
+ } else {
+
+ try {
+
+ var qt_test = new ActiveXObject('UnityWebPlayer.UnityWebPlayer.1');
+
+ } catch (e) {
+ }
+
+ if (qt_test) {
+ unity = true;
+ }
+
+ }
+
+ return unity;
+
+ },
+
/**
* Checks if the zombie has the QuickTime plugin installed.
* @return: {Boolean} true or false.
@@ -1545,6 +1586,11 @@ beef.browser = {
version = control.getVariable('$version').substring(4);
return 'Flash Player v' + version.replace(/,/g, ".");
}},
+ 'Unity':{
+ 'control':'UnityWebPlayer.UnityWebPlayer.1',
+ 'return':function (control) {
+ return 'Unity Web Player';
+ }},
'Quicktime':{
'control':'QuickTime.QuickTime',
'return':function (control) {
@@ -1658,6 +1704,7 @@ beef.browser = {
var java_enabled = (beef.browser.javaEnabled()) ? "Yes" : "No";
var vbscript_enabled = (beef.browser.hasVBScript()) ? "Yes" : "No";
var has_flash = (beef.browser.hasFlash()) ? "Yes" : "No";
+ var has_unity = (beef.browser.hasUnity()) ? "Yes" : "No";
var has_phonegap = (beef.browser.hasPhonegap()) ? "Yes" : "No";
var has_googlegears = (beef.browser.hasGoogleGears()) ? "Yes" : "No";
var has_web_socket = (beef.browser.hasWebSocket()) ? "Yes" : "No";
@@ -1705,6 +1752,7 @@ beef.browser = {
if (java_enabled) details['JavaEnabled'] = java_enabled;
if (vbscript_enabled) details['VBScriptEnabled'] = vbscript_enabled;
if (has_flash) details['HasFlash'] = has_flash;
+ if (has_unity) details['HasUnity'] = has_unity;
if (has_phonegap) details['HasPhonegap'] = has_phonegap;
if (has_web_socket) details['HasWebSocket'] = has_web_socket;
if (has_googlegears) details['HasGoogleGears'] = has_googlegears;
diff --git a/core/main/handlers/browserdetails.rb b/core/main/handlers/browserdetails.rb
index 46a3b610d..a32ed7244 100644
--- a/core/main/handlers/browserdetails.rb
+++ b/core/main/handlers/browserdetails.rb
@@ -222,6 +222,14 @@ module BeEF
else
self.err_msg "Invalid value for HasFlash returned from the hook browser's initial connection."
end
+
+ # get and store the yes|no value for HasUnity
+ has_unity = get_param(@data['results'], 'HasUnity')
+ if BeEF::Filters.is_valid_yes_no?(has_unity)
+ BD.set(session_id, 'HasUnity', has_unity)
+ else
+ self.err_msg "Invalid value for HasUnity returned from the hook browser's initial connection."
+ end
# get and store the yes|no value for HasPhonegap
has_phonegap = get_param(@data['results'], 'HasPhonegap')
diff --git a/extensions/admin_ui/controllers/modules/modules.rb b/extensions/admin_ui/controllers/modules/modules.rb
index 7e8f5a280..58c7ecfd8 100644
--- a/extensions/admin_ui/controllers/modules/modules.rb
+++ b/extensions/admin_ui/controllers/modules/modules.rb
@@ -75,6 +75,7 @@ class Modules < BeEF::Extension::AdminUI::HttpController
# Browser Components
['Browser Components', 'Flash', 'HasFlash'],
+ ['Browser Components', 'Unity Web Player', 'HasUnity'],
['Browser Components', 'Java', 'JavaEnabled'],
['Browser Components', 'VBScript', 'VBScriptEnabled'],
['Browser Components', 'PhoneGap', 'HasPhonegap'],
diff --git a/extensions/admin_ui/controllers/panel/panel.rb b/extensions/admin_ui/controllers/panel/panel.rb
index 255deef34..e02938af3 100644
--- a/extensions/admin_ui/controllers/panel/panel.rb
+++ b/extensions/admin_ui/controllers/panel/panel.rb
@@ -85,6 +85,7 @@ module BeEF
hw_name = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'Hardware')
domain = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'HostName')
has_flash = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'HasFlash')
+ has_unity = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'HasUnity')
has_web_sockets = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'HasWebSocket')
has_googlegears = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'HasGoogleGears')
has_java = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'JavaEnabled')
@@ -111,6 +112,7 @@ module BeEF
'hw_icon' => hw_icon,
'hw_name' => hw_name,
'has_flash' => has_flash,
+ 'has_unity' => has_unity,
'has_web_sockets' => has_web_sockets,
'has_googlegears' => has_googlegears,
'has_java' => has_java,
diff --git a/extensions/admin_ui/media/javascript/ui/panel/ZombiesMgr.js b/extensions/admin_ui/media/javascript/ui/panel/ZombiesMgr.js
index edcb09c5e..68c314a8e 100644
--- a/extensions/admin_ui/media/javascript/ui/panel/ZombiesMgr.js
+++ b/extensions/admin_ui/media/javascript/ui/panel/ZombiesMgr.js
@@ -24,6 +24,7 @@ var ZombiesMgr = function(zombies_tree_lists) {
var domain = zombie_array[index]["domain"];
var port = zombie_array[index]["port"];
var has_flash = zombie_array[index]["has_flash"];
+ var has_unity = zombie_array[index]["has_unity"];
var has_web_sockets = zombie_array[index]["has_web_sockets"];
var has_googlegears = zombie_array[index]["has_googlegears"];
var has_java = zombie_array[index]["has_java"];
@@ -48,6 +49,7 @@ var ZombiesMgr = function(zombies_tree_lists) {
balloon_text+= "
Hardware: " + hw_name;
balloon_text+= "
Domain: " + domain + ":" + port;
balloon_text+= "
Flash: " + has_flash;
+ balloon_text+= "
Unity Web Player: " + has_unity;
balloon_text+= "
Java: " + has_java;
balloon_text+= "
Web Sockets: " + has_web_sockets;
balloon_text+= "
WebRTC: " + has_webrtc;
diff --git a/extensions/console/lib/shellinterface.rb b/extensions/console/lib/shellinterface.rb
index 2051dd7cc..03c01669c 100644
--- a/extensions/console/lib/shellinterface.rb
+++ b/extensions/console/lib/shellinterface.rb
@@ -291,6 +291,7 @@ class ShellInterface
# Browser Components
['Browser Components', 'Flash', 'HasFlash'],
+ ['Browser Components', 'Unity Web Player', 'HasUnity'],
['Browser Components', 'Java', 'JavaEnabled'],
['Browser Components', 'VBScript', 'VBScriptEnabled'],
['Browser Components', 'PhoneGap', 'HasPhonegap'],
diff --git a/modules/browser/detect_unity/command.js b/modules/browser/detect_unity/command.js
new file mode 100644
index 000000000..304766b2d
--- /dev/null
+++ b/modules/browser/detect_unity/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.hasUnity())? "Yes" : "No";
+
+ beef.net.send("<%= @command_url %>", <%= @command_id %>, "unity="+result);
+
+});
+
diff --git a/modules/browser/detect_unity/config.yaml b/modules/browser/detect_unity/config.yaml
new file mode 100644
index 000000000..350ec01b4
--- /dev/null
+++ b/modules/browser/detect_unity/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_unity:
+ enable: true
+ category: "Browser"
+ name: "Detect Unity Web Player"
+ description: "This module will check if the browser has Unity support."
+ authors: ["gcattani"]
+ target:
+ working: ["All"]
diff --git a/modules/browser/detect_unity/module.rb b/modules/browser/detect_unity/module.rb
new file mode 100644
index 000000000..70575825d
--- /dev/null
+++ b/modules/browser/detect_unity/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_unity < BeEF::Core::Command
+
+ def post_execute
+ content = {}
+ content['unity'] = @datastore['unity']
+ save content
+ end
+
+end