diff --git a/core/main/client/browser.js b/core/main/client/browser.js index e1b119cc5..ee3cfe9ca 100644 --- a/core/main/client/browser.js +++ b/core/main/client/browser.js @@ -646,6 +646,31 @@ beef.browser = { return this.isS4() || this.isS5() || this.isS6() || this.isS7() || this.isS8(); }, + /** + * Returns true if Webkit based + * + * **** DUPLICATE WARNING **** Changes here may aldo need addressed in /isS\d+/ functions. + */ + isWebKitBased: function () { + return (!window.opera && !window.chrome + && window.navigator.userAgent.match(/ Version\/\d/) != null + && !window.globalStorage + && !!window.getComputedStyle + && !("MozWebSocket" in window)); + }, + + /** + * Return true if Epiphany + * @example: beef.browser.isEpi() + */ + isEpi: function () { + // Epiphany is based on webkit + // due to the uncertainty of webkit version vs Epiphany versions tracking. + // -- do webkit based checking (i.e. do safari checks) + return this.isWebKitBased() && window.navigator.userAgent.match(/Epiphany\//) != null; + }, + + /** * Returns true if Chrome 5. * @example: beef.browser.isC5() @@ -1647,6 +1672,8 @@ beef.browser = { O12: this.isO12(), // Opera 12.xx O: this.isO(), // Opera any version + EP: this.isEpi(), // Epiphany any version + S4: this.isS4(), // Safari 4.xx S5: this.isS5(), // Safari 5.xx S6: this.isS6(), // Safari 6.x @@ -1657,8 +1684,8 @@ beef.browser = { }, /** - * Returns the type of browser being used. - * @return: {String} User agent software and version. + * Returns the major version of the browser being used. + * @return: {String} version number || 'UNKNOWN'. * * @example: beef.browser.getBrowserVersion() */ @@ -1667,47 +1694,47 @@ beef.browser = { if (this.isC5()) { return '5' } - ; // Chrome 5 + ; // Chrome 5 if (this.isC6()) { return '6' } - ; // Chrome 6 + ; // Chrome 6 if (this.isC7()) { return '7' } - ; // Chrome 7 + ; // Chrome 7 if (this.isC8()) { return '8' } - ; // Chrome 8 + ; // Chrome 8 if (this.isC9()) { return '9' } - ; // Chrome 9 + ; // Chrome 9 if (this.isC10()) { return '10' } - ; // Chrome 10 + ; // Chrome 10 if (this.isC11()) { return '11' } - ; // Chrome 11 + ; // Chrome 11 if (this.isC12()) { return '12' } - ; // Chrome 12 + ; // Chrome 12 if (this.isC13()) { return '13' } - ; // Chrome 13 + ; // Chrome 13 if (this.isC14()) { return '14' } - ; // Chrome 14 + ; // Chrome 14 if (this.isC15()) { return '15' } - ; // Chrome 15 + ; // Chrome 15 if (this.isC16()) { return '16' } @@ -1984,7 +2011,7 @@ beef.browser = { return '51' } ; // Chrome 51 for iOS - if (this.isC52()) { + if (this.isC52()) { return '52' } ;// Chrome 52 @@ -2305,6 +2332,18 @@ beef.browser = { } ; // Microsoft Edge + if (this.isEpi()) { + // believe the UserAgent string for version info - until whenever + var epiphanyRe = /Epiphany\/(\d+)/; + var versionDetails = epiphanyRe.exec( beef.browser.getBrowserReportedName()); + if (versionDetails.length > 1) { + return versionDetails[1]; + } else { + return "UNKNOWN"; // returns from here or it may take Safari version details + } + } + ; // Epiphany + if (this.isS4()) { return '4' } @@ -2362,7 +2401,7 @@ beef.browser = { if (this.isC()) { return 'C' } - ; // Chrome any version + ; // Chrome any version if (this.isFF()) { return 'FF' } @@ -2379,6 +2418,10 @@ beef.browser = { return 'O' } ; // Opera any version + if (this.isEpi()) { + return 'EP' + } + ; // Epiphany any version if (this.isS()) { return 'S' } @@ -2862,8 +2905,9 @@ beef.browser = { */ getPluginsIE: function () { var results = ''; - var plugins = {'AdobePDF6': { - 'control': 'PDF.PdfCtrl', + var plugins = { + 'AdobePDF6': { + 'control': 'PDF.PdfCtrl', 'return': function (control) { version = control.getVersions().split(','); version = version[0].split('='); @@ -2981,14 +3025,14 @@ beef.browser = { var page_referrer = (document.referrer) ? document.referrer : "Unknown"; var hostname = (document.location.hostname) ? document.location.hostname : "Unknown"; switch (document.location.protocol) { - case "http:": - var default_port = "80"; - break; - case "https:": - var default_port = "443"; - break - default: - var default_port = ""; + case "http:": + var default_port = "80"; + break; + case "https:": + var default_port = "443"; + break + default: + var default_port = ""; } var hostport = (document.location.port) ? document.location.port : default_port; var browser_plugins = beef.browser.getPlugins(); @@ -3175,13 +3219,13 @@ beef.browser = { * @from: https://github.com/idofilin/webgl-by-example/blob/master/detect-webgl/detect-webgl.js * */ hasWebGL: function () { - try { - var canvas = document.createElement("canvas"); - var gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl"); - return !!(gl && gl instanceof WebGLRenderingContext); - } catch(e) { - return false; - } + try { + var canvas = document.createElement("canvas"); + var gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl"); + return !!(gl && gl instanceof WebGLRenderingContext); + } catch(e) { + return false; + } }, /** @@ -3339,7 +3383,7 @@ beef.browser = { if (scope == 'PER_DOMAIN') testUrl = "http://browserspy.dk/connections.php?img=1&random="; else - // The token will be replaced by a different number with each request (different origin). + // The token will be replaced by a different number with each request (different origin). testUrl = "http://.browserspy.dk/connections.php?img=1&random="; var imagesLoaded = 0; // Number of responding images before timeout. diff --git a/core/main/constants/browsers.rb b/core/main/constants/browsers.rb index 181abed24..2cdffa01f 100644 --- a/core/main/constants/browsers.rb +++ b/core/main/constants/browsers.rb @@ -15,6 +15,7 @@ module Constants IE = 'IE' # Internet Explorer E = 'E' # Microsoft Edge S = 'S' # Safari + EP = 'EP' # Epiphany K = 'K' # Konqueror C = 'C' # Chrome O = 'O' # Opera @@ -30,6 +31,7 @@ module Constants FRIENDLY_IE_NAME = 'Internet Explorer' FRIENDLY_E_NAME = 'Microsoft Edge' FRIENDLY_S_NAME = 'Safari' + FRIENDLY_EP_NAME = 'Epiphany' FRIENDLY_K_NAME = 'Konqueror' FRIENDLY_C_NAME = 'Chrome' FRIENDLY_O_NAME = 'Opera' @@ -50,6 +52,7 @@ module Constants when IE; return FRIENDLY_IE_NAME when E ; return FRIENDLY_E_NAME when S ; return FRIENDLY_S_NAME + when EP; return FRIENDLY_EP_NAME when K ; return FRIENDLY_K_NAME when C ; return FRIENDLY_C_NAME when O ; return FRIENDLY_O_NAME diff --git a/core/main/models/browserdetails.rb b/core/main/models/browserdetails.rb index e4e2a5d1c..3209d90a7 100644 --- a/core/main/models/browserdetails.rb +++ b/core/main/models/browserdetails.rb @@ -65,21 +65,22 @@ module Models def self.browser_icon(session_id) browser = get(session_id, 'BrowserName') - - return BeEF::Extension::AdminUI::Constants::Agents::AGENT_IE_IMG if browser.eql? 'IE' # Internet Explorer - return BeEF::Extension::AdminUI::Constants::Agents::AGENT_EDGE_IMG if browser.eql? 'E' # Microsoft Edge - return BeEF::Extension::AdminUI::Constants::Agents::AGENT_FIREFOX_IMG if browser.eql? 'FF' # Firefox - return BeEF::Extension::AdminUI::Constants::Agents::AGENT_SAFARI_IMG if browser.eql? 'S' # Safari - return BeEF::Extension::AdminUI::Constants::Agents::AGENT_CHROME_IMG if browser.eql? 'C' # Chrome - return BeEF::Extension::AdminUI::Constants::Agents::AGENT_OPERA_IMG if browser.eql? 'O' # Opera - return BeEF::Extension::AdminUI::Constants::Agents::AGENT_MIDORI_IMG if browser.eql? 'MI' # Midori - return BeEF::Extension::AdminUI::Constants::Agents::AGENT_ODYSSEY_IMG if browser.eql? 'OD' # Odyssey - return BeEF::Extension::AdminUI::Constants::Agents::AGENT_BRAVE_IMG if browser.eql? 'BR' # Brave + + return BeEF::Extension::AdminUI::Constants::Agents::AGENT_IE_IMG if browser.eql? 'IE' # Internet Explorer + return BeEF::Extension::AdminUI::Constants::Agents::AGENT_EDGE_IMG if browser.eql? 'E' # Microsoft Edge + return BeEF::Extension::AdminUI::Constants::Agents::AGENT_FIREFOX_IMG if browser.eql? 'FF' # Firefox + return BeEF::Extension::AdminUI::Constants::Agents::AGENT_EPIPHANY_IMG if browser.eql? 'EP' # Epiphany + return BeEF::Extension::AdminUI::Constants::Agents::AGENT_SAFARI_IMG if browser.eql? 'S' # Safari + return BeEF::Extension::AdminUI::Constants::Agents::AGENT_CHROME_IMG if browser.eql? 'C' # Chrome + return BeEF::Extension::AdminUI::Constants::Agents::AGENT_OPERA_IMG if browser.eql? 'O' # Opera + return BeEF::Extension::AdminUI::Constants::Agents::AGENT_MIDORI_IMG if browser.eql? 'MI' # Midori + return BeEF::Extension::AdminUI::Constants::Agents::AGENT_ODYSSEY_IMG if browser.eql? 'OD' # Odyssey + return BeEF::Extension::AdminUI::Constants::Agents::AGENT_BRAVE_IMG if browser.eql? 'BR' # Brave BeEF::Extension::AdminUI::Constants::Agents::AGENT_UNKNOWN_IMG end - + # # Returns the icon representing the os type the # zombie is running (i.e. Windows, Linux) diff --git a/extensions/admin_ui/constants/agents.rb b/extensions/admin_ui/constants/agents.rb index 2e68fcfc2..839d63433 100644 --- a/extensions/admin_ui/constants/agents.rb +++ b/extensions/admin_ui/constants/agents.rb @@ -7,7 +7,7 @@ module BeEF module Extension module AdminUI module Constants - + # The User Agent strings for browser detection module Agents @@ -20,6 +20,8 @@ module Constants AGENT_IE_IMG = 'msie.png' AGENT_EDGE_UA_STR = 'Edge' AGENT_EDGE_IMG = 'edge.png' + AGENT_EPIPHANY_UA_STR = 'Epiphany' + AGENT_EPIPHANY_IMG = 'epiphany.png' AGENT_SAFARI_UA_STR = 'Safari' AGENT_SAFARI_IMG = 'safari.png' AGENT_KONQ_UA_STR = 'Konqueror' diff --git a/extensions/admin_ui/media/images/icons/epiphany.png b/extensions/admin_ui/media/images/icons/epiphany.png index dc87718c5..9861d1226 100644 Binary files a/extensions/admin_ui/media/images/icons/epiphany.png and b/extensions/admin_ui/media/images/icons/epiphany.png differ