Module: Msf::Payload::Adapter
- Included in:
- Fetch::HTTP, Fetch::Https, Fetch::SMB, Fetch::TFTP
- Defined in:
- lib/msf/core/payload/adapter.rb
Defined Under Namespace
Modules: Fetch
Constant Summary collapse
- CachedSize =
since an adapter wraps a single or stager payload, the cached size would be different for each, this means the cached size can’t be a single value and must be set to dynamic
:dynamic
Instance Method Summary collapse
- #compatible?(mod) ⇒ Boolean
- #initialize(info = {}) ⇒ Object
-
#merge_info_adapted(key, info, opt) ⇒ Object
Due to how payloads are made by combining all the modules, this is necessary to ensure that the adapted information isn’t placed into the final object.
- #merge_info_arch(info, opt) ⇒ Object
- #merge_info_platform(info, opt) ⇒ Object
- #payload_type ⇒ Object
Instance Method Details
#compatible?(mod) ⇒ Boolean
15 16 17 18 19 20 21 22 23 |
# File 'lib/msf/core/payload/adapter.rb', line 15 def compatible?(mod) if mod.type == Msf::MODULE_PAYLOAD return false if Set.new([module_info['AdaptedArch']]) != mod.arch.to_set return false if (Msf::Module::PlatformList.new(module_info['AdaptedPlatform']) & mod.platform).empty? end super end |
#initialize(info = {}) ⇒ Object
6 7 8 9 10 11 12 13 |
# File 'lib/msf/core/payload/adapter.rb', line 6 def initialize(info={}) super if self.is_a?(Msf::Payload::Stager) self.stage_arch = Rex::Transformer.transform(module_info['AdaptedArch'], Array, [ String ], 'AdaptedArch') self.stage_platform = Msf::Module::PlatformList.transform(module_info['AdaptedPlatform']) end end |
#merge_info_adapted(key, info, opt) ⇒ Object
Due to how payloads are made by combining all the modules, this is necessary to ensure that the adapted information isn’t placed into the final object. The current implementation requires that AdaptedArch/AdaptedPlatform are single entries and not arrays of entries like the normal Arch/Platform info keys are.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/msf/core/payload/adapter.rb', line 40 def merge_info_adapted(key, info, opt) if info[key] && !info[key].kind_of?(Array) info[key] = [ info[key] ] elsif !info[key] info[key] = [] end if opt.kind_of?(Array) opt.each do |opt_val| next if info["Adapted#{key}"] == opt_val next if info[key].include?(opt_val) info[key] << opt_val end elsif opt != info["Adapted#{key}"] && !info[key].include?(opt) info[key] << opt end end |
#merge_info_arch(info, opt) ⇒ Object
29 30 31 |
# File 'lib/msf/core/payload/adapter.rb', line 29 def merge_info_arch(info, opt) merge_info_adapted('Arch', info, opt) end |
#merge_info_platform(info, opt) ⇒ Object
33 34 35 |
# File 'lib/msf/core/payload/adapter.rb', line 33 def merge_info_platform(info, opt) merge_info_adapted('Platform', info, opt) end |