metasploit-framework/tools/modules/solo.rb

70 lines
1.4 KiB
Ruby
Executable File

#!/usr/bin/env ruby
module Msf
module Modules
end
end
msfbase = __FILE__
while File.symlink?(msfbase)
msfbase = File.expand_path(File.readlink(msfbase), File.dirname(msfbase))
end
$:.unshift(File.expand_path(File.join(File.dirname(msfbase), '..', '..', 'lib')))
require 'msf/core/modules/external'
require 'json'
module_path = ARGV.shift
# Usage when we don't have a module name
def usage(mod='MODULE_FILE', name='Run a module outside of Metasploit Framework')
$stderr.puts "Usage: solo.rb #{mod} [OPTIONS] [ACTION]"
$stderr.puts name
end
def log_output(m)
message = m.params['message']
sigil = case m.params['level']
when 'error', 'warning'
'!'
when 'good'
'+'
else
'*'
end
$stderr.puts "[#{sigil}] #{message}"
end
def process_report(m)
puts "[+] Found #{m.params['type']}: #{JSON.generate m.params['data']}"
end
if !module_path || module_path[0] == '-'
usage
else
mod = Msf::Modules::External.new module_path
args, method = Msf::Modules::External::CLI.parse_options mod
success = mod.exec(method: method, args: args) do |m|
begin
case m.method
when :message
log_output(m)
when :report
process_report(m)
when :reply
puts m.params['return']
end
rescue Interrupt => e
abort 'Exiting...'
rescue Exception => e
abort "Encountered an error: #{e.message}"
end
end
abort 'Module exited abnormally' if !success
end