Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
beefproject
GitHub Repository: beefproject/beef
Path: blob/master/extensions/network/models/network_service.rb
1154 views
1
#
2
# Copyright (c) 2006-2025 Wade Alcorn - [email protected]
3
# Browser Exploitation Framework (BeEF) - https://beefproject.com
4
# See the file 'doc/COPYING' for copying permission
5
#
6
module BeEF
7
module Core
8
module Models
9
#
10
# Table stores each open port identified on the zombie browser's network(s)
11
#
12
class NetworkService < BeEF::Core::Model
13
belongs_to :hooked_browser
14
15
#
16
# Stores a network service in the data store
17
#
18
def self.add(service = {})
19
unless BeEF::Filters.is_valid_hook_session_id?(service[:hooked_browser_id])
20
print_error 'Invalid hooked browser session'
21
return
22
end
23
unless BeEF::Filters.is_valid_ip?(service[:ip])
24
print_error 'Invalid IP address'
25
return
26
end
27
unless BeEF::Filters.is_valid_port?(service[:port])
28
print_error 'Invalid port'
29
return
30
end
31
32
# save network services with private IP addresses only?
33
unless BeEF::Filters.is_valid_private_ip?(service[:ip])
34
configuration = BeEF::Core::Configuration.instance
35
if configuration.get('beef.extension.network.ignore_public_ips') == true
36
print_debug "Ignoring network service with public IP address [ip: #{service[:ip]}]"
37
return
38
end
39
end
40
41
# store the returned network host details
42
BeEF::Core::Models::NetworkHost.create(
43
hooked_browser_id: service[:hooked_browser_id],
44
ip: service[:ip]
45
)
46
47
# prevent duplicates
48
total = BeEF::Core::Models::NetworkService.where(
49
hooked_browser_id: service[:hooked_browser_id],
50
proto: service[:proto],
51
ip: service[:ip],
52
port: service[:port],
53
ntype: service[:ntype]
54
).length
55
return if total.positive?
56
57
# store the returned network service details
58
network_service = BeEF::Core::Models::NetworkService.new(
59
hooked_browser_id: service[:hooked_browser_id],
60
proto: service[:proto],
61
ip: service[:ip],
62
port: service[:port],
63
ntype: service[:ntype]
64
)
65
if network_service.save
66
print_error 'Failed to save network service'
67
return
68
end
69
70
network_service
71
end
72
73
# Convert a Network Service object to JSON
74
def to_h
75
{
76
id: id,
77
hooked_browser_id: hooked_browser_id,
78
proto: proto,
79
ip: ip,
80
port: port,
81
ntype: ntype
82
}
83
end
84
end
85
end
86
end
87
end
88
89