69 lines
1.5 KiB
Ruby
69 lines
1.5 KiB
Ruby
#
|
|
# Core service class that provides storage of module metadata as well as operations on the metadata.
|
|
# Note that operations on this metadata are included as separate modules.
|
|
#
|
|
module Msf::Modules::Metadata::Maps
|
|
|
|
@mrefs = {}
|
|
@mports = {}
|
|
@mservs = {}
|
|
|
|
|
|
def all_exploit_maps
|
|
|
|
return @mrefs, @mports, @mservs if @mrefs && !@mrefs.empty?
|
|
|
|
mrefs = {}
|
|
mports = {}
|
|
mservs = {}
|
|
|
|
get_metadata.each do |exploit|
|
|
# expand this in future to be more specific about remote exploits.
|
|
next unless exploit.type == "exploit"
|
|
exploit.references.each do |reference|
|
|
next if reference =~ /^URL/
|
|
ref = reference
|
|
ref.upcase!
|
|
|
|
mrefs[ref] ||= Set.new
|
|
mrefs[ref] << exploit
|
|
end
|
|
|
|
if exploit.rport
|
|
rport = exploit.rport
|
|
mports[rport.to_i] ||= []
|
|
mports[rport.to_i] << exploit
|
|
end
|
|
|
|
unless exploit.autofilter_ports.nil? || exploit.autofilter_ports.empty?
|
|
exploit.autofilter_ports.each do |rport|
|
|
mports[rport.to_i] ||= Set.new
|
|
mports[rport.to_i] << exploit
|
|
end
|
|
end
|
|
|
|
unless exploit.autofilter_services.nil? || exploit.autofilter_services.empty?
|
|
exploit.autofilter_services.each do |serv|
|
|
mservs[serv] ||= Set.new
|
|
mservs[serv] << exploit
|
|
end
|
|
end
|
|
|
|
end
|
|
@mrefs = mrefs
|
|
@mports = mports
|
|
@mservs = mservs
|
|
|
|
return @mrefs, @mports, @mservs
|
|
end
|
|
|
|
private
|
|
|
|
def clear_maps
|
|
@mrefs = nil
|
|
@mports = nil
|
|
@mservs = nil
|
|
end
|
|
|
|
end
|