Fixed auxiliarytarget issue, updated frame.rb to handle on-demand module loading

git-svn-id: file:///home/svn/incoming/trunk@3551 4d416f70-5f16-0410-b530-b9f4589650da
unstable
HD Moore 2006-03-04 16:46:15 +00:00
parent 0b1d97f653
commit c0a8b6cf22
3 changed files with 61 additions and 12 deletions

48
dev/aux_design.txt Normal file
View File

@ -0,0 +1,48 @@
Auxiliary Module Design
-----------------------
The goal of this document is to define the requirements and basic
implementation of Metasploit v3.0 Auxiliary Modules. Auxiliary modules have a
unique role in the Framework in that they can do just about anything.
Auxiliary modules work similar to exploits, in that the user selects a module,
configures, and launches it, but differs in that they do not execute arbitrary
code on target systems.
Design Goals
------------
Auxiliary modules should be capable of performing reconnaisance activities,
such as sending probes or listening to the network, and exporting the data
into a persistent storage system accessible to the rest of the Framework. Not
all auxiliary modules produce this type of data, some may perform intrusive
actions, such as file retrieval or modifying access credentials.
An Auxiliary module has the ability to define new commands and then process
these commands. Any user interface that sypports Auxiliary modules needs to
take into account this fact and allow these optional commands to be accessed.
Unlike exploits, auxiliary modules do not use Targets, instead they support
what we call Actions. An Action is an option, that when set, causes the
auxiliary module to perform a selected task. Between the extensible command
set and the Actions system, a single auxiliary module is capable performing an
almost infinite number of tasks.
An example would be a module that performs various tasks against a Microsoft
SQL Server. This module would only support the default command of 'run', but
could allow the user to send a UDP probe and display the data, perform an
account brute force, or scan all open ports for an exposed MSSQL DCERPC
interface.
Storage
-------
Requirements
------------

View File

@ -9,12 +9,11 @@ class Msf::Module::AuxiliaryAction
#
# Serialize from an array to a Target instance.
# Serialize from an array to an Action instance.
#
def self.from_a(ary)
return nil if (ary.length < 2)
self.new(ary.shift, ary.shift)
return nil if ary.nil?
self.new(*ary)
end
#
@ -24,7 +23,9 @@ class Msf::Module::AuxiliaryAction
Rex::Transformer.transform(src, Array, [ self, String ], 'AuxiliaryAction')
end
#
# Creates a new action definition
#
def initialize(name, opts={})
self.name = name
self.opts = opts

View File

@ -201,13 +201,13 @@ class MyFrame < ::Wx::Frame
n_exploits = @m_tree_modules_exploits.append_item(n_modules, 'Standard', FRAME_ICONS_EXPLOITS)
n_auxiliary = @m_tree_modules_exploits.append_item(n_modules, 'Auxiliary', FRAME_ICONS_AUXILIARY)
framework.exploits.sort.each do |mod, obj|
framework.exploits.each_module do |mod, obj|
next if not mod.match(filter)
oid = @m_tree_modules_exploits.append_item(n_exploits, obj.new.name, FRAME_ICONS_MOD_EXPLOIT)
@m_tree_modules_items[oid] = obj
end
framework.auxiliary.sort.each do |mod, obj|
framework.auxiliary.each_module do |mod, obj|
next if not mod.match(filter)
oid = @m_tree_modules_exploits.append_item(n_auxiliary, obj.new.name, FRAME_ICONS_MOD_AUXILIARY)
@m_tree_modules_items[oid] = obj
@ -224,19 +224,19 @@ class MyFrame < ::Wx::Frame
n_nops = @m_tree_modules_payloads.append_item(n_modules, 'Nops', FRAME_ICONS_NOPS)
framework.payloads.sort.each do |mod, obj|
framework.payloads.each_module do |mod, obj|
next if not mod.match(filter)
oid = @m_tree_modules_payloads.append_item(n_payloads, obj.new.name, FRAME_ICONS_MOD_PAYLOAD)
@m_tree_modules_items[oid] = obj
end
framework.encoders.sort.each do |mod, obj|
framework.encoders.each_module do |mod, obj|
next if not mod.match(filter)
oid = @m_tree_modules_payloads.append_item(n_encoders, obj.new.name, FRAME_ICONS_MOD_ENCODER)
@m_tree_modules_items[oid] = obj
end
framework.nops.sort.each do |mod, obj|
framework.nops.each_module do |mod, obj|
next if not mod.match(filter)
oid = @m_tree_modules_payloads.append_item(n_nops, obj.new.name, FRAME_ICONS_MOD_NOP)
@m_tree_modules_items[oid] = obj