diff --git a/lib/msf/base/sessions/mettle_config.rb b/lib/msf/base/sessions/mettle_config.rb index cb6c0af415..5dbcf7e618 100644 --- a/lib/msf/base/sessions/mettle_config.rb +++ b/lib/msf/base/sessions/mettle_config.rb @@ -18,6 +18,11 @@ module Msf 'MeterpreterTryToFork', 'Fork a new process if the functionality is available', default: false + ), + OptBool.new( + 'MeterpreterLegacyElf', + 'Legacy stageless ELF file without in-memory loading, works with Linux < 3.17', + default: false ) ] ) diff --git a/modules/payloads/singles/linux/aarch64/meterpreter_reverse_http.rb b/modules/payloads/singles/linux/aarch64/meterpreter_reverse_http.rb index 899ce5b2dc..bf37292489 100644 --- a/modules/payloads/singles/linux/aarch64/meterpreter_reverse_http.rb +++ b/modules/payloads/singles/linux/aarch64/meterpreter_reverse_http.rb @@ -3,6 +3,7 @@ # Current source: https://github.com/rapid7/metasploit-framework ## + # Module generated by tools/modules/generate_mettle_payloads.rb module MetasploitModule CachedSize = 1184672 @@ -17,28 +18,32 @@ module MetasploitModule super( update_info( info, - 'Name' => 'Linux Meterpreter, Reverse HTTP Inline', - 'Description' => 'Run the Meterpreter / Mettle server payload (stageless)', - 'Author' => [ + 'Name' => 'Linux Meterpreter, Reverse HTTP Inline', + 'Description' => 'Run the Meterpreter / Mettle server payload (stageless)', + 'Author' => [ 'Adam Cammack ', 'Brent Cook ', 'timwr' ], - 'Platform' => 'linux', - 'Arch' => ARCH_AARCH64, - 'License' => MSF_LICENSE, - 'Handler' => Msf::Handler::ReverseHttp, - 'Session' => Msf::Sessions::Meterpreter_aarch64_Linux + 'Platform' => 'linux', + 'Arch' => ARCH_AARCH64, + 'License' => MSF_LICENSE, + 'Handler' => Msf::Handler::ReverseHttp, + 'Session' => Msf::Sessions::Meterpreter_aarch64_Linux ) ) end - def generate + def generate(_opts = {}) opts = { scheme: 'http', stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('aarch64-linux-musl', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/aarch64/meterpreter_reverse_https.rb b/modules/payloads/singles/linux/aarch64/meterpreter_reverse_https.rb index 5431e6cb24..0f2230a8ea 100644 --- a/modules/payloads/singles/linux/aarch64/meterpreter_reverse_https.rb +++ b/modules/payloads/singles/linux/aarch64/meterpreter_reverse_https.rb @@ -3,6 +3,7 @@ # Current source: https://github.com/rapid7/metasploit-framework ## + # Module generated by tools/modules/generate_mettle_payloads.rb module MetasploitModule CachedSize = 1184672 @@ -17,18 +18,18 @@ module MetasploitModule super( update_info( info, - 'Name' => 'Linux Meterpreter, Reverse HTTPS Inline', - 'Description' => 'Run the Meterpreter / Mettle server payload (stageless)', - 'Author' => [ + 'Name' => 'Linux Meterpreter, Reverse HTTPS Inline', + 'Description' => 'Run the Meterpreter / Mettle server payload (stageless)', + 'Author' => [ 'Adam Cammack ', 'Brent Cook ', 'timwr' ], - 'Platform' => 'linux', - 'Arch' => ARCH_AARCH64, - 'License' => MSF_LICENSE, - 'Handler' => Msf::Handler::ReverseHttps, - 'Session' => Msf::Sessions::Meterpreter_aarch64_Linux + 'Platform' => 'linux', + 'Arch' => ARCH_AARCH64, + 'License' => MSF_LICENSE, + 'Handler' => Msf::Handler::ReverseHttps, + 'Session' => Msf::Sessions::Meterpreter_aarch64_Linux ) ) end @@ -39,6 +40,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('aarch64-linux-musl', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/aarch64/meterpreter_reverse_tcp.rb b/modules/payloads/singles/linux/aarch64/meterpreter_reverse_tcp.rb index fa99c172ca..0817b37ba7 100644 --- a/modules/payloads/singles/linux/aarch64/meterpreter_reverse_tcp.rb +++ b/modules/payloads/singles/linux/aarch64/meterpreter_reverse_tcp.rb @@ -3,6 +3,7 @@ # Current source: https://github.com/rapid7/metasploit-framework ## + # Module generated by tools/modules/generate_mettle_payloads.rb module MetasploitModule CachedSize = 1184672 @@ -16,18 +17,18 @@ module MetasploitModule super( update_info( info, - 'Name' => 'Linux Meterpreter, Reverse TCP Inline', - 'Description' => 'Run the Meterpreter / Mettle server payload (stageless)', - 'Author' => [ + 'Name' => 'Linux Meterpreter, Reverse TCP Inline', + 'Description' => 'Run the Meterpreter / Mettle server payload (stageless)', + 'Author' => [ 'Adam Cammack ', 'Brent Cook ', 'timwr' ], - 'Platform' => 'linux', - 'Arch' => ARCH_AARCH64, - 'License' => MSF_LICENSE, - 'Handler' => Msf::Handler::ReverseTcp, - 'Session' => Msf::Sessions::Meterpreter_aarch64_Linux + 'Platform' => 'linux', + 'Arch' => ARCH_AARCH64, + 'License' => MSF_LICENSE, + 'Handler' => Msf::Handler::ReverseTcp, + 'Session' => Msf::Sessions::Meterpreter_aarch64_Linux ) ) end @@ -38,6 +39,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('aarch64-linux-musl', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/armbe/meterpreter_reverse_http.rb b/modules/payloads/singles/linux/armbe/meterpreter_reverse_http.rb index f8a9b8324d..14564f2bfa 100644 --- a/modules/payloads/singles/linux/armbe/meterpreter_reverse_http.rb +++ b/modules/payloads/singles/linux/armbe/meterpreter_reverse_http.rb @@ -39,6 +39,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('armv5b-linux-musleabi', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/armbe/meterpreter_reverse_https.rb b/modules/payloads/singles/linux/armbe/meterpreter_reverse_https.rb index 6688b28458..7e5ebd301e 100644 --- a/modules/payloads/singles/linux/armbe/meterpreter_reverse_https.rb +++ b/modules/payloads/singles/linux/armbe/meterpreter_reverse_https.rb @@ -38,6 +38,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('armv5b-linux-musleabi', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/armbe/meterpreter_reverse_tcp.rb b/modules/payloads/singles/linux/armbe/meterpreter_reverse_tcp.rb index 17095ce8ad..4379093986 100644 --- a/modules/payloads/singles/linux/armbe/meterpreter_reverse_tcp.rb +++ b/modules/payloads/singles/linux/armbe/meterpreter_reverse_tcp.rb @@ -39,6 +39,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('armv5b-linux-musleabi', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/armle/meterpreter_reverse_http.rb b/modules/payloads/singles/linux/armle/meterpreter_reverse_http.rb index 241d78224c..8f15f06d1a 100644 --- a/modules/payloads/singles/linux/armle/meterpreter_reverse_http.rb +++ b/modules/payloads/singles/linux/armle/meterpreter_reverse_http.rb @@ -38,6 +38,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('armv5l-linux-musleabi', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/armle/meterpreter_reverse_https.rb b/modules/payloads/singles/linux/armle/meterpreter_reverse_https.rb index 933f30845d..930d6d4222 100644 --- a/modules/payloads/singles/linux/armle/meterpreter_reverse_https.rb +++ b/modules/payloads/singles/linux/armle/meterpreter_reverse_https.rb @@ -39,6 +39,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('armv5l-linux-musleabi', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/armle/meterpreter_reverse_tcp.rb b/modules/payloads/singles/linux/armle/meterpreter_reverse_tcp.rb index 44d1116301..b2a816339a 100644 --- a/modules/payloads/singles/linux/armle/meterpreter_reverse_tcp.rb +++ b/modules/payloads/singles/linux/armle/meterpreter_reverse_tcp.rb @@ -39,6 +39,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('armv5l-linux-musleabi', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/mips64/meterpreter_reverse_http.rb b/modules/payloads/singles/linux/mips64/meterpreter_reverse_http.rb index 0a68ff1c2b..78ed5d6ded 100644 --- a/modules/payloads/singles/linux/mips64/meterpreter_reverse_http.rb +++ b/modules/payloads/singles/linux/mips64/meterpreter_reverse_http.rb @@ -38,6 +38,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('mips64-linux-muslsf', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/mips64/meterpreter_reverse_https.rb b/modules/payloads/singles/linux/mips64/meterpreter_reverse_https.rb index 7d44186e3b..75890fea0d 100644 --- a/modules/payloads/singles/linux/mips64/meterpreter_reverse_https.rb +++ b/modules/payloads/singles/linux/mips64/meterpreter_reverse_https.rb @@ -39,6 +39,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('mips64-linux-muslsf', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/mips64/meterpreter_reverse_tcp.rb b/modules/payloads/singles/linux/mips64/meterpreter_reverse_tcp.rb index 028af6ce61..3d5489e412 100644 --- a/modules/payloads/singles/linux/mips64/meterpreter_reverse_tcp.rb +++ b/modules/payloads/singles/linux/mips64/meterpreter_reverse_tcp.rb @@ -38,6 +38,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('mips64-linux-muslsf', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/mipsbe/meterpreter_reverse_http.rb b/modules/payloads/singles/linux/mipsbe/meterpreter_reverse_http.rb index e8ba0fc317..82f102cbfb 100644 --- a/modules/payloads/singles/linux/mipsbe/meterpreter_reverse_http.rb +++ b/modules/payloads/singles/linux/mipsbe/meterpreter_reverse_http.rb @@ -38,6 +38,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('mips-linux-muslsf', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/mipsbe/meterpreter_reverse_https.rb b/modules/payloads/singles/linux/mipsbe/meterpreter_reverse_https.rb index a38a3875aa..ba21d2ba32 100644 --- a/modules/payloads/singles/linux/mipsbe/meterpreter_reverse_https.rb +++ b/modules/payloads/singles/linux/mipsbe/meterpreter_reverse_https.rb @@ -38,6 +38,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('mips-linux-muslsf', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/mipsbe/meterpreter_reverse_tcp.rb b/modules/payloads/singles/linux/mipsbe/meterpreter_reverse_tcp.rb index 4fd14de3a0..59a65002ea 100644 --- a/modules/payloads/singles/linux/mipsbe/meterpreter_reverse_tcp.rb +++ b/modules/payloads/singles/linux/mipsbe/meterpreter_reverse_tcp.rb @@ -38,6 +38,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('mips-linux-muslsf', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/mipsle/meterpreter_reverse_http.rb b/modules/payloads/singles/linux/mipsle/meterpreter_reverse_http.rb index ae96d4fe37..1bd31b824e 100644 --- a/modules/payloads/singles/linux/mipsle/meterpreter_reverse_http.rb +++ b/modules/payloads/singles/linux/mipsle/meterpreter_reverse_http.rb @@ -38,6 +38,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('mipsel-linux-muslsf', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/mipsle/meterpreter_reverse_https.rb b/modules/payloads/singles/linux/mipsle/meterpreter_reverse_https.rb index 08b7106507..9e4a64e836 100644 --- a/modules/payloads/singles/linux/mipsle/meterpreter_reverse_https.rb +++ b/modules/payloads/singles/linux/mipsle/meterpreter_reverse_https.rb @@ -38,6 +38,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('mipsel-linux-muslsf', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/mipsle/meterpreter_reverse_tcp.rb b/modules/payloads/singles/linux/mipsle/meterpreter_reverse_tcp.rb index 91a2063cb8..f54cdbe10d 100644 --- a/modules/payloads/singles/linux/mipsle/meterpreter_reverse_tcp.rb +++ b/modules/payloads/singles/linux/mipsle/meterpreter_reverse_tcp.rb @@ -38,6 +38,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('mipsel-linux-muslsf', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/x64/meterpreter_reverse_http.rb b/modules/payloads/singles/linux/x64/meterpreter_reverse_http.rb index 10815b94d4..1e099a159e 100644 --- a/modules/payloads/singles/linux/x64/meterpreter_reverse_http.rb +++ b/modules/payloads/singles/linux/x64/meterpreter_reverse_http.rb @@ -38,6 +38,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('x86_64-linux-musl', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/x64/meterpreter_reverse_https.rb b/modules/payloads/singles/linux/x64/meterpreter_reverse_https.rb index f390ac3769..de5b5ed29c 100644 --- a/modules/payloads/singles/linux/x64/meterpreter_reverse_https.rb +++ b/modules/payloads/singles/linux/x64/meterpreter_reverse_https.rb @@ -38,6 +38,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('x86_64-linux-musl', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/x64/meterpreter_reverse_tcp.rb b/modules/payloads/singles/linux/x64/meterpreter_reverse_tcp.rb index 06d418618b..7c5220de9f 100644 --- a/modules/payloads/singles/linux/x64/meterpreter_reverse_tcp.rb +++ b/modules/payloads/singles/linux/x64/meterpreter_reverse_tcp.rb @@ -38,6 +38,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('x86_64-linux-musl', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/x86/meterpreter_reverse_http.rb b/modules/payloads/singles/linux/x86/meterpreter_reverse_http.rb index c947cea9d7..4e672612f6 100644 --- a/modules/payloads/singles/linux/x86/meterpreter_reverse_http.rb +++ b/modules/payloads/singles/linux/x86/meterpreter_reverse_http.rb @@ -38,6 +38,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('i486-linux-musl', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/x86/meterpreter_reverse_https.rb b/modules/payloads/singles/linux/x86/meterpreter_reverse_https.rb index 33f79e5305..a191b33279 100644 --- a/modules/payloads/singles/linux/x86/meterpreter_reverse_https.rb +++ b/modules/payloads/singles/linux/x86/meterpreter_reverse_https.rb @@ -38,6 +38,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('i486-linux-musl', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/x86/meterpreter_reverse_tcp.rb b/modules/payloads/singles/linux/x86/meterpreter_reverse_tcp.rb index 05378c8201..1ccb31d83d 100644 --- a/modules/payloads/singles/linux/x86/meterpreter_reverse_tcp.rb +++ b/modules/payloads/singles/linux/x86/meterpreter_reverse_tcp.rb @@ -38,6 +38,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('i486-linux-musl', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/zarch/meterpreter_reverse_http.rb b/modules/payloads/singles/linux/zarch/meterpreter_reverse_http.rb index 3f6b34f531..869d359f1c 100644 --- a/modules/payloads/singles/linux/zarch/meterpreter_reverse_http.rb +++ b/modules/payloads/singles/linux/zarch/meterpreter_reverse_http.rb @@ -39,6 +39,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('s390x-linux-musl', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/zarch/meterpreter_reverse_https.rb b/modules/payloads/singles/linux/zarch/meterpreter_reverse_https.rb index f53c1a208b..2b83f1f748 100644 --- a/modules/payloads/singles/linux/zarch/meterpreter_reverse_https.rb +++ b/modules/payloads/singles/linux/zarch/meterpreter_reverse_https.rb @@ -38,6 +38,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('s390x-linux-musl', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/modules/payloads/singles/linux/zarch/meterpreter_reverse_tcp.rb b/modules/payloads/singles/linux/zarch/meterpreter_reverse_tcp.rb index e261fe05dd..a89a3869b7 100644 --- a/modules/payloads/singles/linux/zarch/meterpreter_reverse_tcp.rb +++ b/modules/payloads/singles/linux/zarch/meterpreter_reverse_tcp.rb @@ -41,6 +41,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('s390x-linux-musl', generate_config(opts)).to_binary :exec - in_memory_load(payload) + payload + ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end + payload end end diff --git a/tools/modules/meterpreter_reverse.erb b/tools/modules/meterpreter_reverse.erb index a616190205..3e30180ce5 100644 --- a/tools/modules/meterpreter_reverse.erb +++ b/tools/modules/meterpreter_reverse.erb @@ -38,6 +38,10 @@ module MetasploitModule stageless: true }.merge(mettle_logging_config) payload = MetasploitPayloads::Mettle.new('<%= payload %>', generate_config(opts)).to_binary :exec - <% if platform.downcase == 'linux' %>in_memory_load(payload) + <% end %>payload + <% if platform.downcase == 'linux' %>ds = opts[:datastore] || datastore + unless ds['MeterpreterLegacyElf'] + return in_memory_load(payload) + payload + end<% end %> + payload end end