From 5d9c62967d84f0c4220df9fc7db877f19c5e9d6c Mon Sep 17 00:00:00 2001 From: Brendan Coles Date: Sat, 24 Jan 2015 18:26:15 +0000 Subject: [PATCH] Add options to scan commonly used LAN IPs --- extensions/admin_ui/media/css/base.css | 6 + .../admin_ui/media/images/icons/web.png | Bin 0 -> 32569 bytes .../ui/panel/tabs/ZombieTabNetwork.js | 171 +++++++++++++++++- extensions/network/extension.rb | 2 +- .../network/cross_origin_scanner/command.js | 54 ++++-- .../network/cross_origin_scanner/config.yaml | 2 +- modules/network/get_http_servers/command.js | 30 ++- modules/network/get_http_servers/config.yaml | 2 +- .../command.js | 32 ++-- .../config.yaml | 2 +- 10 files changed, 262 insertions(+), 39 deletions(-) create mode 100644 extensions/admin_ui/media/images/icons/web.png diff --git a/extensions/admin_ui/media/css/base.css b/extensions/admin_ui/media/css/base.css index 1acb3d86c..20d817c36 100644 --- a/extensions/admin_ui/media/css/base.css +++ b/extensions/admin_ui/media/css/base.css @@ -108,6 +108,12 @@ background-repeat: no-repeat; } +.network-host-ctxMenu-web { + background-image: url(../images/icons/web.png); + background-size: 16px 16px; + background-repeat: no-repeat; +} + .network-host-ctxMenu-adapter { background-image: url(../images/icons/adapter.png); background-size: 16px 16px; diff --git a/extensions/admin_ui/media/images/icons/web.png b/extensions/admin_ui/media/images/icons/web.png new file mode 100644 index 0000000000000000000000000000000000000000..fba0c645ebd1976191c36a18094f08517e91495a GIT binary patch literal 32569 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", <%= @command_id %>, "fail=malformed IP range supplied"); - return; - } - - // ipRange will be in the form of 192.168.0.1-192.168.0.254 - // the fourth octet will be iterated. - // (only C class IP ranges are supported atm) - ipBounds = ipRange.split('-'); - lowerBound = ipBounds[0].split('.')[3]; - upperBound = ipBounds[1].split('.')[3]; - for (var i = lowerBound; i <= upperBound; i++){ - ipToTest = ipBounds[0].split('.')[0]+"."+ipBounds[0].split('.')[1]+"."+ipBounds[0].split('.')[2]+"."+i; - ips.push(ipToTest); + // set target IP addresses + if (ipRange == 'common') { + // use default IPs + ips = [ + '192.168.0.1', + '192.168.0.100', + '192.168.0.254', + '192.168.1.1', + '192.168.1.100', + '192.168.1.254', + '10.0.0.1', + '10.1.1.1', + '192.168.2.1', + '192.168.2.254', + '192.168.100.1', + '192.168.100.254', + '192.168.123.1', + '192.168.123.254', + '192.168.10.1', + '192.168.10.254' + ]; + } else { + // set target IP range + var range = ipRange.match('^([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\-([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))$'); + if (range == null || range[1] == null) { + beef.net.send("<%= @command_url %>", <%= @command_id %>, "fail=malformed IP range supplied"); + return; + } + // ipRange will be in the form of 192.168.0.1-192.168.0.254 + // the fourth octet will be iterated. + // (only C class IP ranges are supported atm) + ipBounds = ipRange.split('-'); + lowerBound = ipBounds[0].split('.')[3]; + upperBound = ipBounds[1].split('.')[3]; + for (var i = lowerBound; i <= upperBound; i++){ + ipToTest = ipBounds[0].split('.')[0]+"."+ipBounds[0].split('.')[1]+"."+ipBounds[0].split('.')[2]+"."+i; + ips.push(ipToTest); + } } WorkerQueue = function(frequency) { diff --git a/modules/network/cross_origin_scanner/config.yaml b/modules/network/cross_origin_scanner/config.yaml index 7cedc2e37..204067d05 100644 --- a/modules/network/cross_origin_scanner/config.yaml +++ b/modules/network/cross_origin_scanner/config.yaml @@ -9,7 +9,7 @@ beef: enable: true category: "Network" name: "Cross-Origin Scanner" - description: "Scan an IP range for web servers which allow cross-origin requests using CORS. The HTTP response is returned to BeEF." + description: "Scan an IP range for web servers which allow cross-origin requests using CORS. The HTTP response is returned to BeEF.

Note: set the IP address range to 'common' to scan a list of common LAN addresses." authors: ["bcoles"] # http://caniuse.com/cors target: diff --git a/modules/network/get_http_servers/command.js b/modules/network/get_http_servers/command.js index a7a503c6a..c1e9eabfb 100644 --- a/modules/network/get_http_servers/command.js +++ b/modules/network/get_http_servers/command.js @@ -13,10 +13,36 @@ beef.execute(function() { var timeout = "<%= @timeout %>"; var wait = "<%= @wait %>"; var threads = "<%= @threads %>"; - var urls = new Array('/favicon.ico', '/favicon.png'); + var urls = new Array('/favicon.ico', '/favicon.png', '/images/favicon.ico', '/images/favicon.png'); // set target IP addresses - if (ipRange != null){ + if (ipRange == 'common') { + // use default IPs + ips = [ + '192.168.0.1', + '192.168.0.100', + '192.168.0.254', + '192.168.1.1', + '192.168.1.100', + '192.168.1.254', + '10.0.0.1', + '10.1.1.1', + '192.168.2.1', + '192.168.2.254', + '192.168.100.1', + '192.168.100.254', + '192.168.123.1', + '192.168.123.254', + '192.168.10.1', + '192.168.10.254' + ]; + } else { + // set target IP range + var range = ipRange.match('^([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\-([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))$'); + if (range == null || range[1] == null) { + beef.net.send("<%= @command_url %>", <%= @command_id %>, "fail=malformed IP range supplied"); + return; + } // ipRange will be in the form of 192.168.0.1-192.168.0.254 // the fourth octet will be iterated. // (only C class IP ranges are supported atm) diff --git a/modules/network/get_http_servers/config.yaml b/modules/network/get_http_servers/config.yaml index dd167d867..7ef33d540 100644 --- a/modules/network/get_http_servers/config.yaml +++ b/modules/network/get_http_servers/config.yaml @@ -9,7 +9,7 @@ beef: enable: true category: "Network" name: "Get HTTP Servers (Favicon)" - description: "Attempts to discover HTTP servers on the specified IP range by checking for a favicon." + description: "Attempts to discover HTTP servers on the specified IP range by checking for a favicon.

Note: set the IP address range to 'common' to scan a list of common LAN addresses." authors: ["bcoles"] target: user_notify: ["FF", "IE", "C", "S"] diff --git a/modules/network/internal_network_fingerprinting/command.js b/modules/network/internal_network_fingerprinting/command.js index a11a03862..ba68105cc 100644 --- a/modules/network/internal_network_fingerprinting/command.js +++ b/modules/network/internal_network_fingerprinting/command.js @@ -17,19 +17,8 @@ beef.execute(function() { ports = ports.split(','); } - // set target LAN IP addresses - if (ipRange != null){ - // ipRange will be in the form of 192.168.0.1-192.168.0.254 - // the fourth octet will be iterated. - // (only C class IP ranges are supported atm) - ipBounds = ipRange.split('-'); - lowerBound = ipBounds[0].split('.')[3]; - upperBound = ipBounds[1].split('.')[3]; - for (i=lowerBound;i<=upperBound;i++){ - ipToTest = ipBounds[0].split('.')[0]+"."+ipBounds[0].split('.')[1]+"."+ipBounds[0].split('.')[2]+"."+i; - ips.push(ipToTest); - } - } else { + // set target IP addresses + if (ipRange == 'common') { // use default IPs ips = [ '192.168.0.1', @@ -49,6 +38,23 @@ beef.execute(function() { '192.168.10.1', '192.168.10.254' ]; + } else { + // set target IP range + var range = ipRange.match('^([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\-([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))$'); + if (range == null || range[1] == null) { + beef.net.send("<%= @command_url %>", <%= @command_id %>, "fail=malformed IP range supplied"); + return; + } + // ipRange will be in the form of 192.168.0.1-192.168.0.254 + // the fourth octet will be iterated. + // (only C class IP ranges are supported atm) + ipBounds = ipRange.split('-'); + lowerBound = ipBounds[0].split('.')[3]; + upperBound = ipBounds[1].split('.')[3]; + for (i=lowerBound;i<=upperBound;i++){ + ipToTest = ipBounds[0].split('.')[0]+"."+ipBounds[0].split('.')[1]+"."+ipBounds[0].split('.')[2]+"."+i; + ips.push(ipToTest); + } } /* Signatures in the form of: diff --git a/modules/network/internal_network_fingerprinting/config.yaml b/modules/network/internal_network_fingerprinting/config.yaml index 77f6d75b4..34173741a 100644 --- a/modules/network/internal_network_fingerprinting/config.yaml +++ b/modules/network/internal_network_fingerprinting/config.yaml @@ -9,7 +9,7 @@ beef: enable: true category: "Network" name: "Fingerprint Local Network" - description: "Discover devices and applications in the victim's Local Area Network.

This module uses a signature based approach - based on default logo images/favicons for known network device/applications - to fingerprint each IP address within the LAN.

Partially based on Yokosou and jslanscanner." + description: "Discover devices and applications in the victim's Local Area Network.

This module uses a signature based approach - based on default logo images/favicons for known network device/applications - to fingerprint each IP address within the LAN.

Partially based on Yokosou and jslanscanner.

Note: set the IP address range to 'common' to scan a list of common LAN addresses." authors: ["bcoles", "wade", "antisnatchor"] target: user_notify: ["FF", "IE", "C", "S"]