Files
beef/extensions/network/models/network_service.rb
2019-02-25 10:29:46 +00:00

97 lines
2.9 KiB
Ruby

#
# Copyright (c) 2006-2019 Wade Alcorn - wade@bindshell.net
# Browser Exploitation Framework (BeEF) - http://beefproject.com
# See the file 'doc/COPYING' for copying permission
#
module BeEF
module Core
module Models
#
# 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
#
# Stores a network service in the data store
#
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
end
end
# store the returned network host details
BeEF::Core::Models::NetworkHost.add(
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?
# 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]
)
result = network_service.save
if result.nil?
print_error 'Failed to save network service'
return
end
network_service
end
# 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
}
end
end
end
end
end