Class: Msf::Framework

Inherits:
Object
  • Object
show all
Includes:
MonitorMixin
Defined in:
lib/msf/core/framework.rb

Overview

This class is the primary context that modules, scripts, and user interfaces interact with. It ties everything together.

Defined Under Namespace

Modules: Offspring

Constant Summary collapse

Major =

Versioning information

Metasploit::Framework::Version::MAJOR
Minor =
Metasploit::Framework::Version::MINOR
Point =
Metasploit::Framework::Version::PATCH
Release =
"-#{Metasploit::Framework::Version::PRERELEASE}"
Version =
Metasploit::Framework::VERSION
Revision =
"$Revision$"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Framework

Creates an instance of the framework context.



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/msf/core/framework.rb', line 57

def initialize(options={})
  self.options = options
  # call super to initialize MonitorMixin.  #synchronize won't work without this.
  super()

  # Allow specific module types to be loaded
  types = options[:module_types] || Msf::MODULE_TYPES

  self.history_manager = Rex::Ui::Text::Shell::HistoryManager.new

  self.features = FeatureManager.instance
  self.features.load_config

  self.events    = EventDispatcher.new(self)
  self.modules   = ModuleManager.new(self,types)
  self.datastore = DataStore.new
  self.jobs      = Rex::JobContainer.new
  self.analyze   = Analyze.new(self)
  self.plugins   = PluginManager.new(self)
  self.browser_profiles = Hash.new

  # Configure the thread factory
  Rex::ThreadFactory.provider = Metasploit::Framework::ThreadFactoryProvider.new(framework: self)

  # Configure the SSL certificate generator
  require 'msf/core/cert_provider'
  Rex::Socket::Ssl.cert_provider = Msf::Ssl::CertProvider

  if options.include?('CustomDnsResolver') && Msf::FeatureManager.instance.enabled?(Msf::FeatureManager::DNS)
    self.dns_resolver = options['CustomDnsResolver']
    self.dns_resolver.set_framework(self)
    Rex::Socket._install_global_resolver(self.dns_resolver)
  end

  subscriber = FrameworkEventSubscriber.new(self)
  events.add_exploit_subscriber(subscriber)
  events.add_session_subscriber(subscriber)
  events.add_general_subscriber(subscriber)
  events.add_db_subscriber(subscriber)
  events.add_ui_subscriber(subscriber)
end

Instance Attribute Details

#analyzeObject

The framework instance’s analysis utility. Provide method to analyze framework objects to offer related objects/actions available.



201
202
203
# File 'lib/msf/core/framework.rb', line 201

def analyze
  @analyze
end

#auxmgrObject

The framework instance’s aux manager. The aux manager is responsible for collecting and cataloging all aux information that comes in from aux modules.



179
180
181
# File 'lib/msf/core/framework.rb', line 179

def auxmgr
  @auxmgr
end

#browser_profilesObject

The framework instance’s browser profile store. These profiles are generated by client-side modules and need to be shared across different contexts.



196
197
198
# File 'lib/msf/core/framework.rb', line 196

def browser_profiles
  @browser_profiles
end

#datastoreObject

The global framework datastore that can be used by modules.



173
174
175
# File 'lib/msf/core/framework.rb', line 173

def datastore
  @datastore
end

#dbMetasploit::Framework::DataService::DataProxy

The framework instance’s data service proxy



217
218
219
220
221
222
223
# File 'lib/msf/core/framework.rb', line 217

def db
  return @db if @db

  synchronize {
    @db ||= get_db
  }
end

#dns_resolverObject

DNS resolver for the framework



159
160
161
# File 'lib/msf/core/framework.rb', line 159

def dns_resolver
  @dns_resolver
end

#eventsObject

Event management interface for registering event handler subscribers and for interacting with the correlation engine.



164
165
166
# File 'lib/msf/core/framework.rb', line 164

def events
  @events
end

#featuresMsf::FeatureManager

The framework instance’s feature manager. The feature manager is responsible for configuring feature flags that can change characteristics of framework.

Returns:



206
207
208
# File 'lib/msf/core/framework.rb', line 206

def features
  @features
end

#history_managerRex::Ui::Text::Shell::HistoryManager

The framework instance’s history manager, responsible for managing command history in different contexts



211
212
213
# File 'lib/msf/core/framework.rb', line 211

def history_manager
  @history_manager
end

#jobsObject

Background job management specific to things spawned from this instance of the framework.



184
185
186
# File 'lib/msf/core/framework.rb', line 184

def jobs
  @jobs
end

#modulesObject

Module manager that contains information about all loaded modules, regardless of type.



169
170
171
# File 'lib/msf/core/framework.rb', line 169

def modules
  @modules
end

#optionsHash (protected)

Options passed to #initialize

Returns:

  • (Hash)


289
290
291
# File 'lib/msf/core/framework.rb', line 289

def options
  @options
end

#pluginsObject

The framework instance’s plugin manager. The plugin manager is responsible for exposing an interface that allows for the loading and unloading of plugins.



190
191
192
# File 'lib/msf/core/framework.rb', line 190

def plugins
  @plugins
end

Instance Method Details

#auxiliaryObject

Returns the module set for auxiliary modules



134
135
136
# File 'lib/msf/core/framework.rb', line 134

def auxiliary
  return modules.auxiliary
end

#eicar_corrupted?Boolean

EICAR Canary

Returns:

  • (Boolean)

    Should return true if the EICAR file has been corrupted



267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
# File 'lib/msf/core/framework.rb', line 267

def eicar_corrupted?
  path = ::File.expand_path(::File.join(
    ::File.dirname(__FILE__),"..", "..", "..", "data", "eicar.com")
  )
  return true unless ::File.exist?(path)

  data = ::File.read(path, mode: 'rb')
  return true unless Digest::SHA1.hexdigest(data) == "3395856ce81f2b7382dee72602f798b642f14140"

  false

# If anything goes wrong assume AV got us
rescue ::Exception
  true
end

#encodersObject

Returns the module set for encoders.



106
107
108
# File 'lib/msf/core/framework.rb', line 106

def encoders
  return modules.encoders
end

#evasionObject



145
146
147
# File 'lib/msf/core/framework.rb', line 145

def evasion
  return modules.evasion
end

#exploitsObject

Returns the module set for exploits.



113
114
115
# File 'lib/msf/core/framework.rb', line 113

def exploits
  return modules.exploits
end

#inspectObject



99
100
101
# File 'lib/msf/core/framework.rb', line 99

def inspect
  "#<Framework (#{sessions.length} sessions, #{jobs.length} jobs, #{plugins.length} plugins#{db.active ? ", #{db.driver} database active" : ""})>"
end

#nopsObject

Returns the module set for nops



120
121
122
# File 'lib/msf/core/framework.rb', line 120

def nops
  return modules.nops
end

#payloadsObject

Returns the module set for payloads



127
128
129
# File 'lib/msf/core/framework.rb', line 127

def payloads
  return modules.payloads
end

#postObject

Returns the module set for post modules



141
142
143
# File 'lib/msf/core/framework.rb', line 141

def post
  return modules.post
end

#search(search_string) ⇒ Object



259
260
261
262
# File 'lib/msf/core/framework.rb', line 259

def search(search_string)
  search_params = Msf::Modules::Metadata::Search.parse_search_string(search_string)
  Msf::Modules::Metadata::Cache.instance.find(search_params)
end

#sessionsMsf::SessionManager

Session manager that tracks sessions associated with this framework instance over the course of their lifetime.

Returns:



229
230
231
232
233
234
235
# File 'lib/msf/core/framework.rb', line 229

def sessions
  return @sessions if @sessions

  synchronize {
    @sessions ||= Msf::SessionManager.new(self)
  }
end

#threadsMsf::ThreadManager

The framework instance’s thread manager. The thread manager provides a cleaner way to manage spawned threads

Returns:



241
242
243
244
245
246
247
# File 'lib/msf/core/framework.rb', line 241

def threads
  return @threads if @threads

  synchronize {
    @threads ||= Msf::ThreadManager.new(self)
  }
end

#threads?true, false

Whether #threads has been initialized

Returns:

  • (true)

    if #threads has been initialized

  • (false)

    otherwise



253
254
255
256
257
# File 'lib/msf/core/framework.rb', line 253

def threads?
  synchronize {
    instance_variable_defined? :@threads
  }
end

#versionObject

Returns the framework version in Major.Minor format.



152
153
154
# File 'lib/msf/core/framework.rb', line 152

def version
  Version
end