From f707bf66f384a701d4bfc8f8b8c385baeadb0493 Mon Sep 17 00:00:00 2001 From: Brendan Coles Date: Mon, 25 Feb 2019 10:29:46 +0000 Subject: [PATCH] rubocop extensions/network --- extensions/network/api.rb | 3 - extensions/network/extension.rb | 23 +++--- extensions/network/models/network_host.rb | 71 +++++++++++------- extensions/network/models/network_service.rb | 77 ++++++++++++-------- extensions/network/rest/network.rb | 25 +++---- 5 files changed, 115 insertions(+), 84 deletions(-) diff --git a/extensions/network/api.rb b/extensions/network/api.rb index a7f6ec622..9093c2309 100644 --- a/extensions/network/api.rb +++ b/extensions/network/api.rb @@ -6,9 +6,7 @@ module BeEF module Extension module Network - module RegisterHttpHandler - BeEF::API::Registrar.instance.register(BeEF::Extension::Network::RegisterHttpHandler, BeEF::API::Server, 'mount_handler') # Mounts the handler for processing network host info. @@ -17,7 +15,6 @@ module BeEF def self.mount_handler(beef_server) beef_server.mount('/api/network', BeEF::Extension::Network::NetworkRest.new) end - end end end diff --git a/extensions/network/extension.rb b/extensions/network/extension.rb index 82e80143d..beb210a5e 100644 --- a/extensions/network/extension.rb +++ b/extensions/network/extension.rb @@ -4,21 +4,22 @@ # See the file 'doc/COPYING' for copying permission # module BeEF -module Extension -module Network - - extend BeEF::API::Extension - - @short_name = 'network' - @full_name = 'Network' - @description = "This extension provides a simple interface for interacting with hosts on a zombie browser's local area networks." + module Extension + # + # This extension provides a simple interface for interacting with hosts + # on a zombie browser's local area network(s). + # + module Network + extend BeEF::API::Extension -end -end + @short_name = 'network' + @full_name = 'Network' + @description = "This extension provides a simple interface for interacting with hosts on a zombie browser's local area networks." + end + end end require 'extensions/network/models/network_host' require 'extensions/network/models/network_service' require 'extensions/network/api' require 'extensions/network/rest/network' - diff --git a/extensions/network/models/network_host.rb b/extensions/network/models/network_host.rb index 7542823de..ebeeccee1 100644 --- a/extensions/network/models/network_host.rb +++ b/extensions/network/models/network_host.rb @@ -10,32 +10,38 @@ module BeEF # Table stores each host identified on the zombie browser's network(s) # class NetworkHost - include DataMapper::Resource storage_names[:default] = 'network_host' property :id, Serial - property :hooked_browser_id, Text, :lazy => false - property :ip, Text, :lazy => false - property :hostname, String, :lazy => false - property :type, String, :lazy => false # proxy, router, gateway, dns, etc - property :os, String, :lazy => false - property :mac, String, :lazy => false - property :lastseen, String, :length => 15 + property :hooked_browser_id, Text, lazy: false + property :ip, Text, lazy: false + property :hostname, String, lazy: false + property :type, String, lazy: false # proxy, router, gateway, dns, etc + property :os, String, lazy: false + property :mac, String, lazy: false + property :lastseen, String, length: 15 # # Stores a network host in the data store # - def self.add(host={}) - (print_error "Invalid hooked browser session"; return) unless BeEF::Filters.is_valid_hook_session_id?(host[:hooked_browser_id]) - (print_error "Invalid IP address"; return) unless BeEF::Filters.is_valid_ip?(host[:ip]) + def self.add(host = {}) + unless BeEF::Filters.is_valid_hook_session_id?(host[:hooked_browser_id]) + print_error 'Invalid hooked browser session' + return + end + unless BeEF::Filters.is_valid_ip?(host[:ip]) + print_error 'Invalid IP address' + return + end # save network hosts with private IP addresses only? unless BeEF::Filters.is_valid_private_ip?(host[:ip]) configuration = BeEF::Core::Configuration.instance - if configuration.get("beef.extension.network.ignore_public_ips") == true - (print_debug "Ignoring network host with public IP address [ip: #{host[:ip]}]"; return) + if configuration.get('beef.extension.network.ignore_public_ips') == true + print_debug "Ignoring network host with public IP address [ip: #{host[:ip]}]" + return end end @@ -51,13 +57,19 @@ module BeEF # if host already exists in data store with the same details # then update lastseen and return existing_host = BeEF::Core::Models::NetworkHost.all(new_host) - (existing_host.update( :lastseen => Time.new.to_i ); return) unless existing_host.empty? + unless existing_host.empty? + existing_host.update(lastseen: Time.new.to_i) + return + end # store the new network host details new_host[:lastseen] = Time.new.to_i network_host = BeEF::Core::Models::NetworkHost.new(new_host) result = network_host.save - (print_error "Failed to save network host"; return) if result.nil? + if result.nil? + print_error 'Failed to save network host' + return + end network_host end @@ -66,23 +78,32 @@ module BeEF # Removes a network host from the data store # def self.delete(id) - (print_error "Failed to remove network host. Invalid host ID."; return) if id.to_s !~ /\A\d+\z/ + unless BeEF::Filters.nums_only?(id.to_s) + print_error 'Failed to remove network host. Invalid host ID.' + return + end + host = BeEF::Core::Models::NetworkHost.get(id.to_i) - (print_error "Failed to remove network host [id: #{id}]. Host does not exist."; return) if host.nil? + if host.nil? + print_error "Failed to remove network host [id: #{id}]. Host does not exist." + return + end host.destroy end + # # Convert a Network Host object to JSON + # def to_h { - :id => id, - :hooked_browser_id => hooked_browser_id, - :ip => ip, - :hostname => hostname, - :type => type, - :os => os, - :mac => mac, - :lastseen => lastseen + id: id, + hooked_browser_id: hooked_browser_id, + ip: ip, + hostname: hostname, + type: type, + os: os, + mac: mac, + lastseen: lastseen } end end diff --git a/extensions/network/models/network_service.rb b/extensions/network/models/network_service.rb index 38518490a..06dafef1c 100644 --- a/extensions/network/models/network_service.rb +++ b/extensions/network/models/network_service.rb @@ -10,56 +10,71 @@ module BeEF # Table stores each open port identified on the zombie browser's network(s) # class NetworkService - include DataMapper::Resource storage_names[:default] = 'network_service' property :id, Serial - property :hooked_browser_id, Text, :lazy => false - property :proto, String, :lazy => false - property :ip, Text, :lazy => false - property :port, String, :lazy => false - property :type, String, :lazy => false + property :hooked_browser_id, Text, lazy: false + property :proto, String, lazy: false + property :ip, Text, lazy: false + property :port, String, lazy: false + property :type, String, lazy: false # # Stores a network service in the data store # - def self.add(service={}) - (print_error "Invalid hooked browser session"; return) if not BeEF::Filters.is_valid_hook_session_id?(service[:hooked_browser_id]) - (print_error "Invalid IP address"; return) if not BeEF::Filters.is_valid_ip?(service[:ip]) - (print_error "Invalid port"; return) if not BeEF::Filters.is_valid_port?(service[:port]) + def self.add(service = {}) + unless BeEF::Filters.is_valid_hook_session_id?(service[:hooked_browser_id]) + print_error 'Invalid hooked browser session' + return + end + unless BeEF::Filters.is_valid_ip?(service[:ip]) + print_error 'Invalid IP address' + return + end + unless BeEF::Filters.is_valid_port?(service[:port]) + print_error 'Invalid port' + return + end # save network services with private IP addresses only? unless BeEF::Filters.is_valid_private_ip?(service[:ip]) configuration = BeEF::Core::Configuration.instance - if configuration.get("beef.extension.network.ignore_public_ips") == true - (print_debug "Ignoring network service with public IP address [ip: #{service[:ip]}]"; return) + if configuration.get('beef.extension.network.ignore_public_ips') == true + print_debug "Ignoring network service with public IP address [ip: #{service[:ip]}]" + return end end # store the returned network host details BeEF::Core::Models::NetworkHost.add( - :hooked_browser_id => service[:hooked_browser_id], - :ip => service[:ip]) + hooked_browser_id: service[:hooked_browser_id], + ip: service[:ip] + ) # prevent duplicates return unless BeEF::Core::Models::NetworkService.all( - :hooked_browser_id => service[:hooked_browser_id], - :proto => service[:proto], - :ip => service[:ip], - :port => service[:port], - :type => service[:type]).empty? + hooked_browser_id: service[:hooked_browser_id], + proto: service[:proto], + ip: service[:ip], + port: service[:port], + type: service[:type] + ).empty? # store the returned network service details network_service = BeEF::Core::Models::NetworkService.new( - :hooked_browser_id => service[:hooked_browser_id], - :proto => service[:proto], - :ip => service[:ip], - :port => service[:port], - :type => service[:type]) + hooked_browser_id: service[:hooked_browser_id], + proto: service[:proto], + ip: service[:ip], + port: service[:port], + type: service[:type] + ) result = network_service.save - (print_error "Failed to save network service"; return) if result.nil? + if result.nil? + print_error 'Failed to save network service' + return + end network_service end @@ -67,12 +82,12 @@ module BeEF # Convert a Network Service object to JSON def to_h { - :id => id, - :hooked_browser_id => hooked_browser_id, - :proto => proto, - :ip => ip, - :port => port, - :type => type, + id: id, + hooked_browser_id: hooked_browser_id, + proto: proto, + ip: ip, + port: port, + type: type } end end diff --git a/extensions/network/rest/network.rb b/extensions/network/rest/network.rb index 27132ef2c..dbd35e6c5 100644 --- a/extensions/network/rest/network.rb +++ b/extensions/network/rest/network.rb @@ -6,10 +6,8 @@ module BeEF module Extension module Network - # This class handles the routing of RESTful API requests that interact with network services on the zombie's LAN class NetworkRest < BeEF::Core::Router::Router - # Filters out bad requests before performing any routing before do config = BeEF::Core::Configuration.instance @@ -29,7 +27,7 @@ module BeEF # Returns the entire list of network hosts for all zombies get '/hosts' do begin - hosts = @nh.all(:unique => true, :order => [:id.asc]) + hosts = @nh.all(unique: true, order: [:id.asc]) count = hosts.length result = {} @@ -49,7 +47,7 @@ module BeEF # Returns the entire list of network services for all zombies get '/services' do begin - services = @ns.all(:unique => true, :order => [:id.asc]) + services = @ns.all(unique: true, order: [:id.asc]) count = services.length result = {} @@ -71,7 +69,7 @@ module BeEF begin id = params[:id] - hosts = @nh.all(:hooked_browser_id => id, :unique => true, :order => [:id.asc]) + hosts = @nh.all(hooked_browser_id: id, unique: true, order: [:id.asc]) count = hosts.length result = {} @@ -96,7 +94,7 @@ module BeEF begin id = params[:id] - services = @ns.all(:hooked_browser_id => id, :unique => true, :order => [:id.asc]) + services = @ns.all(hooked_browser_id: id, unique: true, order: [:id.asc]) count = services.length result = {} @@ -121,7 +119,7 @@ module BeEF begin id = params[:id] - host = @nh.all(:id => id) + host = @nh.all(id: id) raise InvalidParamError, 'id' if host.nil? halt 404 if host.empty? @@ -139,9 +137,9 @@ module BeEF delete '/host/:id' do begin id = params[:id] - raise InvalidParamError, 'id' unless BeEF::Filters::nums_only?(id) + raise InvalidParamError, 'id' unless BeEF::Filters.nums_only?(id) - host = @nh.all(:id => id) + host = @nh.all(id: id) halt 404 if host.nil? result = {} @@ -161,7 +159,7 @@ module BeEF begin id = params[:id] - service = @ns.all(:id => id) + service = @ns.all(id: id) raise InvalidParamError, 'id' if service.nil? halt 404 if service.empty? @@ -177,7 +175,7 @@ module BeEF # Raised when invalid JSON input is passed to an /api/network handler. class InvalidJsonError < StandardError - DEFAULT_MESSAGE = 'Invalid JSON input passed to /api/network handler' + DEFAULT_MESSAGE = 'Invalid JSON input passed to /api/network handler'.freeze def initialize(message = nil) super(message || DEFAULT_MESSAGE) @@ -186,11 +184,10 @@ module BeEF # Raised when an invalid named parameter is passed to an /api/network handler. class InvalidParamError < StandardError - DEFAULT_MESSAGE = 'Invalid parameter passed to /api/network handler' + DEFAULT_MESSAGE = 'Invalid parameter passed to /api/network handler'.freeze def initialize(message = nil) - str = "Invalid \"%s\" parameter passed to /api/network handler" - message = sprintf str, message unless message.nil? + message = "Invalid \"#{message}\" parameter passed to /api/network handler" unless message.nil? super(message) end end