diff --git a/core/main/client/browser.js b/core/main/client/browser.js index 736b5f7b5..4efc5d63c 100644 --- a/core/main/client/browser.js +++ b/core/main/client/browser.js @@ -1463,63 +1463,64 @@ beef.browser = { getDetails:function () { var details = new Array(); - var browser_name = beef.browser.getBrowserName(); - var browser_version = beef.browser.getBrowserVersion(); + var browser_name = beef.browser.getBrowserName(); + var browser_version = beef.browser.getBrowserVersion(); var browser_reported_name = beef.browser.getBrowserReportedName(); - var page_title = (document.title) ? document.title : "Unknown"; - var page_uri = document.location.href; - var page_referrer = (document.referrer) ? document.referrer : "Unknown"; - var hostname = document.location.hostname; - var hostport = (document.location.port) ? document.location.port : "80"; - var browser_plugins = beef.browser.getPlugins(); - var date_stamp = new Date().toString(); - var os_name = beef.os.getName(); - var hw_name = beef.hardware.getName(); - var cpu_type = beef.hardware.cpuType(); - var touch_enabled = (beef.hardware.isTouchEnabled()) ? "Yes" : "No"; + var page_title = (document.title) ? document.title : "Unknown"; + var page_uri = (document.location.href) ? document.location.href : "Unknown"; + var page_referrer = (document.referrer) ? document.referrer : "Unknown"; + var hostname = (document.location.hostname) ? document.location.hostname : "Unknown"; + var hostport = (document.location.port) ? document.location.port : "80"; + var browser_plugins = beef.browser.getPlugins(); + var date_stamp = new Date().toString(); + var os_name = beef.os.getName(); + var hw_name = beef.hardware.getName(); + var cpu_type = beef.hardware.cpuType(); + var touch_enabled = (beef.hardware.isTouchEnabled()) ? "Yes" : "No"; var browser_platform = (typeof(navigator.platform) != "undefined" && navigator.platform != "") ? navigator.platform : null; var browser_type = JSON.stringify(beef.browser.type(), function (key, value) { if (value == true) return value; else if (typeof value == 'object') return value; else return; }); - var screen_size = beef.browser.getScreenSize(); - var window_size = beef.browser.getWindowSize(); - 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_phonegap = (beef.browser.hasPhonegap()) ? "Yes" : "No"; - var has_googlegears = (beef.browser.hasGoogleGears()) ? "Yes" : "No"; - var has_web_socket = (beef.browser.hasWebSocket()) ? "Yes" : "No"; - 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_wmp = (beef.browser.hasWMP()) ? "Yes" : "No"; - var has_vlc = (beef.browser.hasVLC()) ? "Yes" : "No"; - var has_foxit = (beef.browser.hasFoxit()) ? "Yes" : "No"; + var screen_size = beef.browser.getScreenSize(); + var window_size = beef.browser.getWindowSize(); + 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_phonegap = (beef.browser.hasPhonegap()) ? "Yes" : "No"; + var has_googlegears = (beef.browser.hasGoogleGears()) ? "Yes" : "No"; + var has_web_socket = (beef.browser.hasWebSocket()) ? "Yes" : "No"; + var has_webrtc = (beef.browser.hasWebRTC()) ? "Yes" : "No"; + 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_wmp = (beef.browser.hasWMP()) ? "Yes" : "No"; + var has_vlc = (beef.browser.hasVLC()) ? "Yes" : "No"; + var has_foxit = (beef.browser.hasFoxit()) ? "Yes" : "No"; try{ var cookies = document.cookie; var has_session_cookies = (beef.browser.cookie.hasSessionCookies("cookie")) ? "Yes" : "No"; var has_persistent_cookies = (beef.browser.cookie.hasPersistentCookies("cookie")) ? "Yes" : "No"; - if (cookies) details["Cookies"] = cookies; - if (has_session_cookies) details["hasSessionCookies"] = has_session_cookies; - if (has_persistent_cookies) details["hasPersistentCookies"] = has_persistent_cookies; + if (cookies) details['Cookies'] = cookies; + if (has_session_cookies) details['hasSessionCookies'] = has_session_cookies; + if (has_persistent_cookies) details['hasPersistentCookies'] = has_persistent_cookies; }catch(e){ // the hooked domain is using HttpOnly. EverCookie is persisting the BeEF hook in a different way, // and there is no reason to read cookies at this point - details["Cookies"] = "Cookies can't be read. The hooked domain is most probably using HttpOnly."; - details["hasSessionCookies"] = "No"; - details["hasPersistentCookies"] = "No"; + details['Cookies'] = "Cookies can't be read. The hooked domain is most probably using HttpOnly."; + details['hasSessionCookies'] = "No"; + details['hasPersistentCookies'] = "No"; } - if (browser_name) details["BrowserName"] = browser_name; - if (browser_version) details["BrowserVersion"] = browser_version; - if (browser_reported_name) details["BrowserReportedName"] = browser_reported_name; - if (page_title) details["PageTitle"] = page_title; - if (page_uri) details["PageURI"] = page_uri; - if (page_referrer) details["PageReferrer"] = page_referrer; - if (hostname) details["HostName"] = hostname; - if (hostport) details["HostPort"] = hostport; - if (browser_plugins) details["BrowserPlugins"] = browser_plugins; + if (browser_name) details['BrowserName'] = browser_name; + if (browser_version) details['BrowserVersion'] = browser_version; + if (browser_reported_name) details['BrowserReportedName'] = browser_reported_name; + if (page_title) details['PageTitle'] = page_title; + if (page_uri) details['PageURI'] = page_uri; + if (page_referrer) details['PageReferrer'] = page_referrer; + if (hostname) details['HostName'] = hostname; + if (hostport) details['HostPort'] = hostport; + if (browser_plugins) details['BrowserPlugins'] = browser_plugins; if (os_name) details['OsName'] = os_name; if (hw_name) details['Hardware'] = hw_name; if (cpu_type) details['CPU'] = cpu_type; @@ -1530,11 +1531,12 @@ beef.browser = { if (screen_size) details['ScreenSize'] = screen_size; if (window_size) details['WindowSize'] = window_size; if (java_enabled) details['JavaEnabled'] = java_enabled; - if (vbscript_enabled) details['VBScriptEnabled'] = vbscript_enabled - if (has_flash) details['HasFlash'] = has_flash - if (has_phonegap) details['HasPhonegap'] = has_phonegap - if (has_web_socket) details['HasWebSocket'] = has_web_socket - if (has_googlegears) details['HasGoogleGears'] = has_googlegears + if (vbscript_enabled) details['VBScriptEnabled'] = vbscript_enabled; + if (has_flash) details['HasFlash'] = has_flash; + if (has_phonegap) details['HasPhonegap'] = has_phonegap; + if (has_web_socket) details['HasWebSocket'] = has_web_socket; + if (has_googlegears) details['HasGoogleGears'] = has_googlegears; + if (has_webrtc) details['HasWebRTC'] = has_webrtc; if (has_activex) details['HasActiveX'] = has_activex; if (has_silverlight) details['HasSilverlight'] = has_silverlight; if (has_quicktime) details['HasQuickTime'] = has_quicktime; @@ -1553,6 +1555,13 @@ beef.browser = { return !!window.ActiveXObject; }, + /** + * Returns boolean value depending on whether the browser supports WebRTC + */ + hasWebRTC:function () { + return (!!window.mozRTCPeerConnection || !!window.webkitRTCPeerConnection); + }, + /** * Returns boolean value depending on whether the browser supports Silverlight */ diff --git a/core/main/handlers/browserdetails.rb b/core/main/handlers/browserdetails.rb index ae9218d65..46a3b610d 100644 --- a/core/main/handlers/browserdetails.rb +++ b/core/main/handlers/browserdetails.rb @@ -255,6 +255,14 @@ module BeEF self.err_msg "Invalid value for HasWebSocket returned from the hook browser's initial connection." end + # get and store the yes|no value for HasWebRTC + has_webrtc = get_param(@data['results'], 'HasWebRTC') + if BeEF::Filters.is_valid_yes_no?(has_webrtc) + BD.set(session_id, 'HasWebRTC', has_webrtc) + else + self.err_msg "Invalid value for HasWebRTC returned from the hook browser's initial connection." + end + # get and store the yes|no value for HasActiveX has_activex = get_param(@data['results'], 'HasActiveX') if BeEF::Filters.is_valid_yes_no?(has_activex) diff --git a/extensions/admin_ui/controllers/modules/modules.rb b/extensions/admin_ui/controllers/modules/modules.rb index 3d71bc7aa..7e8f5a280 100644 --- a/extensions/admin_ui/controllers/modules/modules.rb +++ b/extensions/admin_ui/controllers/modules/modules.rb @@ -86,6 +86,7 @@ class Modules < BeEF::Extension::AdminUI::HttpController ['Browser Components', 'Windows Media Player','HasWMP'], ['Browser Components', 'VLC', 'HasVLC'], ['Browser Components', 'Foxit Reader', 'HasFoxit'], + ['Browser Components', 'WebRTC', 'HasWebRTC'], ['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 22eeb00b6..255deef34 100644 --- a/extensions/admin_ui/controllers/panel/panel.rb +++ b/extensions/admin_ui/controllers/panel/panel.rb @@ -88,6 +88,7 @@ module BeEF 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') + has_webrtc = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'HasWebRTC') 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') @@ -113,6 +114,7 @@ module BeEF 'has_web_sockets' => has_web_sockets, 'has_googlegears' => has_googlegears, 'has_java' => has_java, + 'has_webrtc' => has_webrtc, 'has_activex' => has_activex, 'has_silverlight' => has_silverlight, 'has_quicktime' => has_quicktime, diff --git a/extensions/admin_ui/media/javascript/ui/panel/ZombiesMgr.js b/extensions/admin_ui/media/javascript/ui/panel/ZombiesMgr.js index d983ba4a9..edcb09c5e 100644 --- a/extensions/admin_ui/media/javascript/ui/panel/ZombiesMgr.js +++ b/extensions/admin_ui/media/javascript/ui/panel/ZombiesMgr.js @@ -27,10 +27,11 @@ var ZombiesMgr = function(zombies_tree_lists) { 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"]; + var has_webrtc = zombie_array[index]["has_webrtc"]; var has_activex = zombie_array[index]["has_activex"]; - var has_wmp = zombie_array[index]["has_wmp"]; + var has_wmp = zombie_array[index]["has_wmp"]; var has_vlc = zombie_array[index]["has_vlc"]; - var has_foxit = zombie_array[index]["has_foxit"]; + var has_foxit = zombie_array[index]["has_foxit"]; var has_silverlight = zombie_array[index]["has_silverlight"]; var has_quicktime = zombie_array[index]["has_quicktime"]; var has_realplayer = zombie_array[index]["has_realplayer"]; @@ -47,14 +48,15 @@ var ZombiesMgr = function(zombies_tree_lists) { balloon_text+= "
Hardware: " + hw_name; balloon_text+= "
Domain: " + domain + ":" + port; balloon_text+= "
Flash: " + has_flash; - balloon_text+= "
Java: " + has_java; - balloon_text+= "
Web Sockets: " + has_web_sockets; + balloon_text+= "
Java: " + has_java; + balloon_text+= "
Web Sockets: " + has_web_sockets; + balloon_text+= "
WebRTC: " + has_webrtc; balloon_text+= "
ActiveX: " + has_activex; balloon_text+= "
Silverlight: " + has_silverlight; balloon_text+= "
QuickTime: " + has_quicktime; - balloon_text+= "
Windows MediaPlayer: " + has_wmp; - balloon_text+= "
VLC: " + has_vlc; - balloon_text+= "
Foxit: " + has_foxit; + balloon_text+= "
Windows MediaPlayer: " + has_wmp; + balloon_text+= "
VLC: " + has_vlc; + balloon_text+= "
Foxit: " + has_foxit; balloon_text+= "
RealPlayer: " + has_realplayer; balloon_text+= "
Google Gears: " + has_googlegears; balloon_text+= "
Date: " + date_stamp; @@ -67,7 +69,7 @@ var ZombiesMgr = function(zombies_tree_lists) { 'balloon_text' : balloon_text, 'check' : false, 'domain' : domain, - 'port' : port + 'port' : port }; return new_zombie; diff --git a/extensions/console/lib/shellinterface.rb b/extensions/console/lib/shellinterface.rb index ff9082626..2051dd7cc 100644 --- a/extensions/console/lib/shellinterface.rb +++ b/extensions/console/lib/shellinterface.rb @@ -302,6 +302,7 @@ class ShellInterface ['Browser Components', 'Windows Media Player','HasWMP'], ['Browser Components', 'VLC', 'HasVLC'], ['Browser Components', 'Foxit', 'HasFoxit'], + ['Browser Components', 'WebRTC', 'HasWebRTC'], ['Browser Components', 'ActiveX', 'HasActiveX'], ['Browser Components', 'Session Cookies', 'hasSessionCookies'], ['Browser Components', 'Persistent Cookies', 'hasPersistentCookies'], @@ -310,7 +311,7 @@ class ShellInterface ['Hooked Page', 'Page Title', 'PageTitle'], ['Hooked Page', 'Page URI', 'PageURI'], ['Hooked Page', 'Page Referrer', 'PageReferrer'], - ['Hooked Page', 'Hook Host', 'HostName'], + ['Hooked Page', 'Hook Host', 'HostName'], ['Hooked Page', 'Cookies', 'Cookies'], # Host