diff --git a/core/main/client/browser.js b/core/main/client/browser.js index 7428853ef..35d030c66 100644 --- a/core/main/client/browser.js +++ b/core/main/client/browser.js @@ -2943,6 +2943,7 @@ beef.browser = { var has_googlegears = (beef.browser.hasGoogleGears()) ? "Yes" : "No"; var has_web_socket = (beef.browser.hasWebSocket()) ? "Yes" : "No"; var has_web_worker = (beef.browser.hasWebWorker()) ? "Yes" : "No"; + var has_web_gl = (beef.browser.hasWebGL()) ? "Yes" : "No"; var has_webrtc = (beef.browser.hasWebRTC()) ? "Yes" : "No"; var has_activex = (beef.browser.hasActiveX()) ? "Yes" : "No"; var has_quicktime = (beef.browser.hasQuickTime()) ? "Yes" : "No"; @@ -2984,6 +2985,7 @@ beef.browser = { if (has_phonegap) details['HasPhonegap'] = has_phonegap; if (has_web_socket) details['HasWebSocket'] = has_web_socket; if (has_web_worker) details['HasWebWorker'] = has_web_worker; + if (has_web_gl) details['HasWebGL'] = has_web_gl; if (has_googlegears) details['HasGoogleGears'] = has_googlegears; if (has_webrtc) details['HasWebRTC'] = has_webrtc; if (has_activex) details['HasActiveX'] = has_activex; @@ -3098,6 +3100,22 @@ beef.browser = { return (typeof(Worker) !== "undefined"); }, + /** + * Checks if the zombie has WebGL enabled. + * @return: {Boolean} true or false. + * + * @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; + } + }, + /** * Checks if the zombie has Google Gears installed. * @return: {Boolean} true or false. diff --git a/core/main/handlers/browserdetails.rb b/core/main/handlers/browserdetails.rb index 829bc259f..5dd830967 100644 --- a/core/main/handlers/browserdetails.rb +++ b/core/main/handlers/browserdetails.rb @@ -320,7 +320,7 @@ module BeEF # get and store the yes|no value for browser components components = [ 'VBScriptEnabled', 'HasFlash', 'HasPhonegap', 'HasGoogleGears', - 'HasWebSocket', 'HasWebWorker', 'HasWebRTC', 'HasActiveX', + 'HasWebSocket', 'HasWebWorker', 'HasWebGL', 'HasWebRTC', 'HasActiveX', 'HasQuickTime', 'HasRealPlayer', 'HasWMP' ] components.each do |k| diff --git a/extensions/admin_ui/controllers/modules/modules.rb b/extensions/admin_ui/controllers/modules/modules.rb index d404f528d..10e5bafd7 100644 --- a/extensions/admin_ui/controllers/modules/modules.rb +++ b/extensions/admin_ui/controllers/modules/modules.rb @@ -85,6 +85,7 @@ class Modules < BeEF::Extension::AdminUI::HttpController ['Browser Components', 'Google Gears', 'HasGoogleGears'], ['Browser Components', 'Web Sockets', 'HasWebSocket'], ['Browser Components', 'Web Workers', 'HasWebWorker'], + ['Browser Components', 'WebGL', 'HasWebGL'], ['Browser Components', 'QuickTime', 'HasQuickTime'], ['Browser Components', 'RealPlayer', 'HasRealPlayer'], ['Browser Components', 'Windows Media Player','HasWMP'],