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