#
# ronin-exploits - A Ruby library for ronin-rb that provides exploitation and
# payload crafting functionality.
#
# Copyright (c) 2007-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
#
# ronin-exploits is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# ronin-exploits is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with ronin-exploits. If not, see .
#
require 'ronin/exploits/registry'
require 'ronin/exploits/exceptions'
require 'ronin/core/params/exceptions'
module Ronin
module Exploits
class CLI
module ExploitMethods
#
# Loads a exploit class.
#
# @param [String] name
# The exploit name to load.
#
# @return [Class]
# The loaded exploit class.
#
def load_exploit(name)
Exploits.load_class(name)
rescue Exploits::ClassNotFound => error
print_error error.message
exit(1)
rescue => error
print_exception(error)
print_error "an unhandled exception occurred while loading exploit #{name}"
exit(-1)
end
#
# Loads the exploit from a given file.
#
# @param [String] file
# The file to load the exploit class from.
#
# @return [Class]
# The loaded exploit class.
#
def load_exploit_from(file)
Exploits.load_class_from_file(file)
rescue Exploits::ClassNotFound => error
print_error error.message
exit(1)
rescue => error
print_exception(error)
print_error "an unhandled exception occurred while loading exploit from file #{file}"
exit(-1)
end
#
# Initializes the exploit class.
#
# @param [Class] exploit_class
# The encoder class.
#
# @param [Hash{Symbol => Object}] kwargs
# Additional keyword arguments for {Exploit#initialize}.
#
def initialize_exploit(exploit_class,**kwargs)
exploit_class.new(**kwargs)
rescue Core::Params::ParamError => error
print_error error.message
exit(1)
rescue => error
print_exception(error)
print_error "an unhandled exception occurred while initializing exploit #{exploit_class.id}"
exit(-1)
end
#
# Validates the loaded exploit.
#
# @param [Exploit] exploit
# The exploit to validate.
#
# @raise [Ronin::Core::Params::RequiredParam]
# One of the required params was not set.
#
# @raise [ValidationError]
# Another exploit validation error occurred.
#
def validate_exploit(exploit)
exploit.perform_validate
rescue Core::Params::ParamError, ValidationError => error
print_error "failed to validate the exploit #{exploit.class_id}: #{error.message}"
exit(1)
rescue => error
print_exception(error)
print_error "an unhandled exception occurred while validating the exploit #{exploit.class_id}"
exit(-1)
end
end
end
end
end