Files
metasploit-gs/spec/support/acceptance/target.rb
T
2024-03-07 10:35:45 +00:00

66 lines
2.2 KiB
Ruby

module Acceptance
###
# Stores the data for a target. These credentials can be used to create a sesion, or run a module against
###
class Target
attr_reader :session_module, :type, :datastore
def initialize(options)
@type = options.fetch(:type)
@session_module = options.fetch(:session_module)
@datastore = options.fetch(:datastore)
end
def [](k)
options[k]
end
# @param [Hash] default_global_datastore
# @return [String] The setg commands for setting the global datastore
def setg_commands(default_global_datastore: {})
commands = []
# Ensure the global framework datastore is always clear
commands << "irb -e '(self.respond_to?(:framework) ? framework : self).datastore.user_defined.clear'"
# Call setg
global_datastore = default_global_datastore.merge(@datastore[:global])
global_datastore.each do |key, value|
commands << "setg #{key} #{value}"
end
commands.join("\n")
end
# @param [Hash] default_module_datastore
# @return [String] The datastore options string
def datastore_options(default_module_datastore: {})
module_datastore = default_module_datastore.merge(@datastore[:module])
module_options = module_datastore.map do |key, value|
"#{key}=#{value}"
end
module_options.join(' ')
end
# @param [Hash] default_module_datastore
# @return [String] The command which can be used on msfconsole to generate the payload
def run_command(default_module_datastore: {})
"run #{datastore_options(default_module_datastore: default_module_datastore)}"
end
# @param [Hash] default_global_datastore
# @param [Hash] default_module_datastore
# @return [String] A human readable representation of the payload configuration object
def as_readable_text(default_global_datastore: {}, default_module_datastore: {})
<<~EOF
## Session module
use #{session_module}
## Set global datastore
#{setg_commands(default_global_datastore: default_global_datastore)}
## Run command
#{run_command(default_module_datastore: default_module_datastore)}
EOF
end
end
end