59 lines
1.6 KiB
Ruby
59 lines
1.6 KiB
Ruby
# -*- coding: binary -*-
|
|
#
|
|
# frozen_string_literal: true
|
|
|
|
# A mixin used for providing Modules with post-exploitation options and helper methods
|
|
#
|
|
module Msf
|
|
module OptionalSession
|
|
include Msf::SessionCompatibility
|
|
|
|
# Validates options depending on whether we are using SESSION or an RHOST for our connection
|
|
def validate
|
|
super
|
|
return unless optional_session_enabled?
|
|
|
|
# If the session is set use that by default regardless of rhost being (un)set
|
|
if session
|
|
validate_session
|
|
elsif rhost
|
|
validate_rhost
|
|
else
|
|
raise Msf::OptionValidateError.new(message: 'A SESSION or RHOST must be provided')
|
|
end
|
|
end
|
|
|
|
def session
|
|
return nil unless optional_session_enabled?
|
|
|
|
super
|
|
end
|
|
|
|
protected
|
|
|
|
# Used to validate options when RHOST has been set
|
|
def validate_rhost
|
|
validate_group('RHOST')
|
|
end
|
|
|
|
# Used to validate options when SESSION has been set
|
|
def validate_session
|
|
issues = {}
|
|
if session_types && !session_types.include?(session.type)
|
|
issues['SESSION'] = "Incompatible session type: #{session.type}. This module works with: #{session_types.join(', ')}."
|
|
end
|
|
raise Msf::OptionValidateError.new(issues.keys.to_a, reasons: issues) unless issues.empty?
|
|
|
|
validate_group('SESSION')
|
|
end
|
|
|
|
# Validates the options within an option group
|
|
#
|
|
# @param group_name [String] Name of the option group
|
|
def validate_group(group_name)
|
|
option_group = options.groups[group_name]
|
|
option_group.validate(options, datastore) if option_group
|
|
end
|
|
end
|
|
end
|