2005-07-14 06:34:58 +00:00
|
|
|
require 'msf/base/simple'
|
|
|
|
|
|
|
|
module Msf
|
|
|
|
module Simple
|
|
|
|
|
|
|
|
###
|
|
|
|
#
|
|
|
|
# This class wraps the framework-core supplied Framework class and adds some
|
|
|
|
# helper methods for analyzing statistics as well as other potentially useful
|
|
|
|
# information that is directly necessary to drive the framework-core.
|
|
|
|
#
|
|
|
|
###
|
|
|
|
module Framework
|
|
|
|
|
2005-11-28 21:38:48 +00:00
|
|
|
###
|
|
|
|
#
|
|
|
|
# Extends the framework.plugins class instance to automatically check in
|
|
|
|
# the framework plugin's directory.
|
|
|
|
#
|
|
|
|
###
|
|
|
|
module PluginManager
|
|
|
|
|
|
|
|
#
|
|
|
|
# Loads the supplied plugin by checking to see if it exists in the
|
|
|
|
# framework default plugin path as necessary.
|
|
|
|
#
|
|
|
|
def load(path, opts = {})
|
|
|
|
def_path = Msf::Config.plugin_directory + File::SEPARATOR + path
|
|
|
|
|
|
|
|
if (File.exists?(def_path) or File.exists?(def_path + ".rb"))
|
|
|
|
super(def_path, opts)
|
|
|
|
else
|
|
|
|
super
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
2005-07-14 06:34:58 +00:00
|
|
|
include GeneralEventSubscriber
|
|
|
|
|
|
|
|
ModuleSimplifiers =
|
|
|
|
{
|
|
|
|
MODULE_ENCODER => Msf::Simple::Encoder,
|
|
|
|
MODULE_EXPLOIT => Msf::Simple::Exploit,
|
|
|
|
MODULE_NOP => Msf::Simple::Nop,
|
|
|
|
MODULE_PAYLOAD => Msf::Simple::Payload,
|
2006-01-24 03:59:44 +00:00
|
|
|
MODULE_AUX => Msf::Simple::Auxiliary,
|
2005-07-14 06:34:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#
|
2005-10-01 21:51:45 +00:00
|
|
|
# Create a simplified instance of the framework. This routine takes a hash
|
|
|
|
# of parameters as an argument. This hash can contain:
|
2005-07-14 06:34:58 +00:00
|
|
|
#
|
2005-10-01 21:51:45 +00:00
|
|
|
# OnCreateProc => A callback procedure that is called once the framework
|
|
|
|
# instance is created.
|
|
|
|
#
|
|
|
|
def self.create(opts = {})
|
2005-07-14 06:34:58 +00:00
|
|
|
framework = Msf::Framework.new
|
|
|
|
|
2005-10-01 21:51:45 +00:00
|
|
|
return simplify(framework, opts)
|
2005-07-14 06:34:58 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
#
|
2005-11-15 15:11:43 +00:00
|
|
|
# Extends a framework object that may already exist.
|
2005-07-14 06:34:58 +00:00
|
|
|
#
|
2005-10-01 21:51:45 +00:00
|
|
|
def self.simplify(framework, opts)
|
2005-11-28 21:38:48 +00:00
|
|
|
|
|
|
|
# If the framework instance has not already been extended, do it now.
|
|
|
|
if (framework.kind_of?(Msf::Simple::Framework) == false)
|
|
|
|
framework.extend(Msf::Simple::Framework)
|
|
|
|
framework.plugins.extend(Msf::Simple::Framework::PluginManager)
|
|
|
|
end
|
2005-07-14 06:34:58 +00:00
|
|
|
|
|
|
|
# Initialize the simplified framework
|
|
|
|
framework.init_simplified()
|
|
|
|
|
2005-10-01 21:51:45 +00:00
|
|
|
# Call the creation procedure if one was supplied
|
|
|
|
if (opts['OnCreateProc'])
|
|
|
|
opts['OnCreateProc'].call(framework)
|
|
|
|
end
|
|
|
|
|
2005-10-01 21:26:17 +00:00
|
|
|
# Initialize configuration and logging
|
|
|
|
Msf::Config.init
|
|
|
|
Msf::Logging.init
|
|
|
|
|
2005-07-15 22:30:04 +00:00
|
|
|
# Load the configuration
|
|
|
|
framework.load_config
|
|
|
|
|
2005-10-01 09:10:41 +00:00
|
|
|
# Initialize the default module search paths
|
|
|
|
if (Msf::Config.module_directory)
|
|
|
|
framework.modules.add_module_path(Msf::Config.module_directory)
|
|
|
|
end
|
|
|
|
|
|
|
|
if (Msf::Config.user_module_directory)
|
|
|
|
framework.modules.add_module_path(Msf::Config.user_module_directory)
|
|
|
|
end
|
|
|
|
|
2005-07-14 06:34:58 +00:00
|
|
|
# Set the on_module_created procedure to simplify any module
|
|
|
|
# instance that is created
|
|
|
|
framework.on_module_created_proc = Proc.new { |instance|
|
|
|
|
simplify_module(instance)
|
|
|
|
}
|
|
|
|
|
|
|
|
# Register the framework as its own general event subscriber in this
|
|
|
|
# instance
|
|
|
|
framework.events.add_general_subscriber(framework)
|
|
|
|
|
|
|
|
return framework
|
|
|
|
end
|
|
|
|
|
|
|
|
#
|
|
|
|
# Simplifies a module instance if the type is supported by extending it
|
|
|
|
# with the simplified module interface.
|
|
|
|
#
|
|
|
|
def self.simplify_module(instance)
|
|
|
|
if ((ModuleSimplifiers[instance.type]) and
|
|
|
|
(instance.class.include?(ModuleSimplifiers[instance.type]) == false))
|
|
|
|
instance.extend(ModuleSimplifiers[instance.type])
|
2005-07-15 22:30:04 +00:00
|
|
|
|
|
|
|
instance.init_simplified
|
2005-07-14 06:34:58 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
##
|
|
|
|
#
|
|
|
|
# Simplified interface
|
|
|
|
#
|
|
|
|
##
|
|
|
|
|
|
|
|
#
|
2005-11-15 15:11:43 +00:00
|
|
|
# Initializes the simplified interface.
|
2005-07-14 06:34:58 +00:00
|
|
|
#
|
|
|
|
def init_simplified
|
|
|
|
self.stats = Statistics.new(self)
|
|
|
|
end
|
|
|
|
|
2005-07-15 22:30:04 +00:00
|
|
|
#
|
|
|
|
# Loads configuration, populates the root datastore, etc.
|
|
|
|
#
|
|
|
|
def load_config
|
|
|
|
self.datastore.from_file(Msf::Config.config_file, 'framework/core')
|
|
|
|
end
|
|
|
|
|
|
|
|
#
|
|
|
|
# Saves the module's datastore to the file
|
|
|
|
#
|
|
|
|
def save_config
|
|
|
|
self.datastore.to_file(Msf::Config.config_file, 'framework/core')
|
|
|
|
end
|
|
|
|
|
2005-11-15 15:11:43 +00:00
|
|
|
#
|
|
|
|
# Statistics.
|
|
|
|
#
|
2005-07-14 06:34:58 +00:00
|
|
|
attr_reader :stats
|
|
|
|
|
|
|
|
protected
|
|
|
|
|
2005-11-15 15:11:43 +00:00
|
|
|
attr_writer :stats # :nodoc:
|
2005-07-14 06:34:58 +00:00
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
end
|