f696a5ab0e
MSP-11671 Add command line option --defer-module-loads to msfconsole. It will stop `Msf::Ui::Console::Driver` from calling `framework.modules.init_module_paths` AND `framework.modules.refresh_cache_from_database`. This flag is only meant to speed up msfconsole boot when modules do not need to accessed, such as during cucumber testing of command help or command line options.
81 lines
2.3 KiB
Ruby
81 lines
2.3 KiB
Ruby
#
|
|
# Project
|
|
#
|
|
|
|
require 'metasploit/framework/command'
|
|
require 'metasploit/framework/command/base'
|
|
|
|
# Based on pattern used for lib/rails/commands in the railties gem.
|
|
class Metasploit::Framework::Command::Console < Metasploit::Framework::Command::Base
|
|
|
|
def spinner
|
|
return if $msf_spinner_thread
|
|
$msf_spinner_thread = Thread.new do
|
|
$stderr.print "[*] Starting the Metasploit Framework console..."
|
|
loop do
|
|
%q{/-\|}.each_char do |c|
|
|
$stderr.print c
|
|
$stderr.print "\b"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def start
|
|
case parsed_options.options.subcommand
|
|
when :version
|
|
$stderr.puts "Framework Version: #{Metasploit::Framework::VERSION}"
|
|
else
|
|
spinner unless parsed_options.options.console.quiet
|
|
driver.run
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
# The console UI driver.
|
|
#
|
|
# @return [Msf::Ui::Console::Driver]
|
|
def driver
|
|
unless @driver
|
|
# require here so minimum loading is done before {start} is called.
|
|
require 'msf/ui'
|
|
|
|
@driver = Msf::Ui::Console::Driver.new(
|
|
Msf::Ui::Console::Driver::DefaultPrompt,
|
|
Msf::Ui::Console::Driver::DefaultPromptChar,
|
|
driver_options
|
|
)
|
|
end
|
|
|
|
@driver
|
|
end
|
|
|
|
def driver_options
|
|
unless @driver_options
|
|
options = parsed_options.options
|
|
|
|
driver_options = {}
|
|
driver_options['Config'] = options.framework.config
|
|
driver_options['ConfirmExit'] = options.console.confirm_exit
|
|
driver_options['DatabaseEnv'] = options.environment
|
|
driver_options['DatabaseMigrationPaths'] = options.database.migrations_paths
|
|
driver_options['DatabaseYAML'] = options.database.config
|
|
driver_options['DeferModuleLoads'] = options.modules.defer_loads
|
|
driver_options['Defanged'] = options.console.defanged
|
|
driver_options['DisableBanner'] = options.console.quiet
|
|
driver_options['DisableDatabase'] = options.database.disable
|
|
driver_options['LocalOutput'] = options.console.local_output
|
|
driver_options['ModulePath'] = options.modules.path
|
|
driver_options['Plugins'] = options.console.plugins
|
|
driver_options['RealReadline'] = options.console.real_readline
|
|
driver_options['Resource'] = options.console.resources
|
|
driver_options['XCommands'] = options.console.commands
|
|
|
|
@driver_options = driver_options
|
|
end
|
|
|
|
@driver_options
|
|
end
|
|
end
|