diff --git a/lib/msf/core/payload/windows/meterpreter_loader.rb b/lib/msf/core/payload/windows/meterpreter_loader.rb index 64ac7dca328d9..85b2b32adb14a 100644 --- a/lib/msf/core/payload/windows/meterpreter_loader.rb +++ b/lib/msf/core/payload/windows/meterpreter_loader.rb @@ -82,9 +82,9 @@ def generate_config(opts={}) transports: opts[:transport_config] || [transport_config(opts)], extensions: [], stageless: opts[:stageless] == true, - debug_build: datastore['MeterpreterDebugBuild'] + debug_build: datastore['MeterpreterDebugBuild'], + log_path: Msf::OptMeterpreterDebugLogging.parse_logging_options(ds['MeterpreterDebugLogging'])[:rpath] } - # create the configuration instance based off the parameters config = Rex::Payloads::Meterpreter::Config.new(config_opts) diff --git a/lib/msf/core/payload/windows/x64/meterpreter_loader_x64.rb b/lib/msf/core/payload/windows/x64/meterpreter_loader_x64.rb index 859e26c7b79b3..be4066fc77c87 100644 --- a/lib/msf/core/payload/windows/x64/meterpreter_loader_x64.rb +++ b/lib/msf/core/payload/windows/x64/meterpreter_loader_x64.rb @@ -85,7 +85,8 @@ def generate_config(opts={}) transports: opts[:transport_config] || [transport_config(opts)], extensions: [], stageless: opts[:stageless] == true, - debug_build: datastore['MeterpreterDebugBuild'] + debug_build: datastore['MeterpreterDebugBuild'], + log_path: Msf::OptMeterpreterDebugLogging.parse_logging_options(ds['MeterpreterDebugLogging'])[:rpath] } # create the configuration instance based off the parameters diff --git a/lib/rex/payloads/meterpreter/config.rb b/lib/rex/payloads/meterpreter/config.rb index 9e980621eb977..62b02239a3ed5 100644 --- a/lib/rex/payloads/meterpreter/config.rb +++ b/lib/rex/payloads/meterpreter/config.rb @@ -12,6 +12,7 @@ class Rex::Payloads::Meterpreter::Config PROXY_USER_SIZE = 64 PROXY_PASS_SIZE = 64 CERT_HASH_SIZE = 20 + LOG_PATH_SIZE = 260 # https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd def initialize(opts={}) @opts = opts @@ -33,6 +34,7 @@ def is_x86? end def to_str(item, size) + if item.size >= size # ">=" instead of only ">", because we need space for a terminating null byte (for string handling in C) raise Msf::PayloadItemSizeError.new(item, size - 1) end @@ -58,16 +60,16 @@ def session_block(opts) else session_guid = [SecureRandom.uuid.gsub(/-/, '')].pack('H*') end - session_data = [ 0, # comms socket, patched in by the stager exit_func, # exit function identifer opts[:expiration], # Session expiry uuid, # the UUID - session_guid # the Session GUID + session_guid, # the Session GUID + to_str(opts[:log_path] || '', LOG_PATH_SIZE) # Path to log file on remote target ] - session_data.pack('QVVA*A*') + session_data.pack('QVVA*A*A*') end def transport_block(opts) diff --git a/modules/payloads/singles/windows/meterpreter_bind_named_pipe.rb b/modules/payloads/singles/windows/meterpreter_bind_named_pipe.rb index fa70c4d4c1fdb..d40c97ddb7d69 100644 --- a/modules/payloads/singles/windows/meterpreter_bind_named_pipe.rb +++ b/modules/payloads/singles/windows/meterpreter_bind_named_pipe.rb @@ -51,7 +51,8 @@ def generate_config(opts={}) extensions: (datastore['EXTENSIONS'] || '').split(','), ext_init: (datastore['EXTINIT'] || ''), stageless: true, - debug_build: datastore['MeterpreterDebugBuild'] + debug_build: datastore['MeterpreterDebugBuild'], + log_path: Msf::OptMeterpreterDebugLogging.parse_logging_options(datastore['MeterpreterDebugLogging'])[:rpath] } # create the configuration instance based off the parameters diff --git a/modules/payloads/singles/windows/meterpreter_bind_tcp.rb b/modules/payloads/singles/windows/meterpreter_bind_tcp.rb index f497aae56eedd..f5d00a271e4d6 100644 --- a/modules/payloads/singles/windows/meterpreter_bind_tcp.rb +++ b/modules/payloads/singles/windows/meterpreter_bind_tcp.rb @@ -51,7 +51,8 @@ def generate_config(opts={}) extensions: (datastore['EXTENSIONS'] || '').split(','), ext_init: (datastore['EXTINIT'] || ''), stageless: true, - debug_build: datastore['MeterpreterDebugBuild'] + debug_build: datastore['MeterpreterDebugBuild'], + log_path: Msf::OptMeterpreterDebugLogging.parse_logging_options(datastore['MeterpreterDebugLogging'])[:rpath] } # create the configuration instance based off the parameters diff --git a/modules/payloads/singles/windows/meterpreter_reverse_http.rb b/modules/payloads/singles/windows/meterpreter_reverse_http.rb index ca12e41f05a12..55e4333729ddd 100644 --- a/modules/payloads/singles/windows/meterpreter_reverse_http.rb +++ b/modules/payloads/singles/windows/meterpreter_reverse_http.rb @@ -56,7 +56,8 @@ def generate_config(opts={}) extensions: (datastore['EXTENSIONS'] || '').split(','), ext_init: (datastore['EXTINIT'] || ''), stageless: true, - debug_build: datastore['MeterpreterDebugBuild'] + debug_build: datastore['MeterpreterDebugBuild'], + log_path: Msf::OptMeterpreterDebugLogging.parse_logging_options(datastore['MeterpreterDebugLogging'])[:rpath] } # create the configuration instance based off the parameters diff --git a/modules/payloads/singles/windows/meterpreter_reverse_https.rb b/modules/payloads/singles/windows/meterpreter_reverse_https.rb index f97bdaf9e0ead..0ad56be2b4bc3 100644 --- a/modules/payloads/singles/windows/meterpreter_reverse_https.rb +++ b/modules/payloads/singles/windows/meterpreter_reverse_https.rb @@ -56,7 +56,8 @@ def generate_config(opts={}) extensions: (datastore['EXTENSIONS'] || '').split(','), ext_init: (datastore['EXTINIT'] || ''), stageless: true, - debug_build: datastore['MeterpreterDebugBuild'] + debug_build: datastore['MeterpreterDebugBuild'], + log_path: Msf::OptMeterpreterDebugLogging.parse_logging_options(datastore['MeterpreterDebugLogging'])[:rpath] } # create the configuration instance based off the parameters diff --git a/modules/payloads/singles/windows/meterpreter_reverse_ipv6_tcp.rb b/modules/payloads/singles/windows/meterpreter_reverse_ipv6_tcp.rb index 961e0a88868f8..fdb4403456e12 100644 --- a/modules/payloads/singles/windows/meterpreter_reverse_ipv6_tcp.rb +++ b/modules/payloads/singles/windows/meterpreter_reverse_ipv6_tcp.rb @@ -52,7 +52,8 @@ def generate_config(opts={}) extensions: (datastore['EXTENSIONS'] || '').split(','), ext_init: (datastore['EXTINIT'] || ''), stageless: true, - debug_build: datastore['MeterpreterDebugBuild'] + debug_build: datastore['MeterpreterDebugBuild'], + log_path: Msf::OptMeterpreterDebugLogging.parse_logging_options(datastore['MeterpreterDebugLogging'])[:rpath] } # create the configuration instance based off the parameters diff --git a/modules/payloads/singles/windows/meterpreter_reverse_tcp.rb b/modules/payloads/singles/windows/meterpreter_reverse_tcp.rb index 524f40264db27..db2f2b8ca5f14 100644 --- a/modules/payloads/singles/windows/meterpreter_reverse_tcp.rb +++ b/modules/payloads/singles/windows/meterpreter_reverse_tcp.rb @@ -51,7 +51,8 @@ def generate_config(opts={}) extensions: (datastore['EXTENSIONS'] || '').split(','), ext_init: (datastore['EXTINIT'] || ''), stageless: true, - debug_build: datastore['MeterpreterDebugBuild'] + debug_build: datastore['MeterpreterDebugBuild'], + log_path: Msf::OptMeterpreterDebugLogging.parse_logging_options(datastore['MeterpreterDebugLogging'])[:rpath] } # create the configuration instance based off the parameters diff --git a/modules/payloads/singles/windows/x64/meterpreter_bind_named_pipe.rb b/modules/payloads/singles/windows/x64/meterpreter_bind_named_pipe.rb index e624f309a650c..1b6a365115de6 100644 --- a/modules/payloads/singles/windows/x64/meterpreter_bind_named_pipe.rb +++ b/modules/payloads/singles/windows/x64/meterpreter_bind_named_pipe.rb @@ -51,7 +51,8 @@ def generate_config(opts={}) extensions: (datastore['EXTENSIONS'] || '').split(','), ext_init: (datastore['EXTINIT'] || ''), stageless: true, - debug_build: datastore['MeterpreterDebugBuild'] + debug_build: datastore['MeterpreterDebugBuild'], + log_path: Msf::OptMeterpreterDebugLogging.parse_logging_options(datastore['MeterpreterDebugLogging'])[:rpath] } # create the configuration instance based off the parameters diff --git a/modules/payloads/singles/windows/x64/meterpreter_bind_tcp.rb b/modules/payloads/singles/windows/x64/meterpreter_bind_tcp.rb index f367109eacdc0..910ca6d77446d 100644 --- a/modules/payloads/singles/windows/x64/meterpreter_bind_tcp.rb +++ b/modules/payloads/singles/windows/x64/meterpreter_bind_tcp.rb @@ -51,7 +51,8 @@ def generate_config(opts={}) extensions: (datastore['EXTENSIONS'] || '').split(','), ext_init: (datastore['EXTINIT'] || ''), stageless: true, - debug_build: datastore['MeterpreterDebugBuild'] + debug_build: datastore['MeterpreterDebugBuild'], + log_path: Msf::OptMeterpreterDebugLogging.parse_logging_options(datastore['MeterpreterDebugLogging'])[:rpath] } # create the configuration instance based off the parameters diff --git a/modules/payloads/singles/windows/x64/meterpreter_reverse_http.rb b/modules/payloads/singles/windows/x64/meterpreter_reverse_http.rb index e0eb33273d491..d82d788f7e56d 100644 --- a/modules/payloads/singles/windows/x64/meterpreter_reverse_http.rb +++ b/modules/payloads/singles/windows/x64/meterpreter_reverse_http.rb @@ -56,7 +56,8 @@ def generate_config(opts={}) extensions: (datastore['EXTENSIONS'] || '').split(','), ext_init: (datastore['EXTINIT'] || ''), stageless: true, - debug_build: datastore['MeterpreterDebugBuild'] + debug_build: datastore['MeterpreterDebugBuild'], + log_path: Msf::OptMeterpreterDebugLogging.parse_logging_options(datastore['MeterpreterDebugLogging'])[:rpath] } # create the configuration instance based off the parameters diff --git a/modules/payloads/singles/windows/x64/meterpreter_reverse_https.rb b/modules/payloads/singles/windows/x64/meterpreter_reverse_https.rb index 53e7e0c5139b1..73d3448e20d86 100644 --- a/modules/payloads/singles/windows/x64/meterpreter_reverse_https.rb +++ b/modules/payloads/singles/windows/x64/meterpreter_reverse_https.rb @@ -56,7 +56,8 @@ def generate_config(opts={}) extensions: (datastore['EXTENSIONS'] || '').split(','), ext_init: (datastore['EXTINIT'] || ''), stageless: true, - debug_build: datastore['MeterpreterDebugBuild'] + debug_build: datastore['MeterpreterDebugBuild'], + log_path: Msf::OptMeterpreterDebugLogging.parse_logging_options(datastore['MeterpreterDebugLogging'])[:rpath] } # create the configuration instance based off the parameters diff --git a/modules/payloads/singles/windows/x64/meterpreter_reverse_ipv6_tcp.rb b/modules/payloads/singles/windows/x64/meterpreter_reverse_ipv6_tcp.rb index a90cd121be576..7a4e064d67d64 100644 --- a/modules/payloads/singles/windows/x64/meterpreter_reverse_ipv6_tcp.rb +++ b/modules/payloads/singles/windows/x64/meterpreter_reverse_ipv6_tcp.rb @@ -52,7 +52,8 @@ def generate_config(opts={}) extensions: (datastore['EXTENSIONS'] || '').split(','), ext_init: (datastore['EXTINIT'] || ''), stageless: true, - debug_build: datastore['MeterpreterDebugBuild'] + debug_build: datastore['MeterpreterDebugBuild'], + log_path: Msf::OptMeterpreterDebugLogging.parse_logging_options(datastore['MeterpreterDebugLogging'])[:rpath] } # create the configuration instance based off the parameters diff --git a/modules/payloads/singles/windows/x64/meterpreter_reverse_tcp.rb b/modules/payloads/singles/windows/x64/meterpreter_reverse_tcp.rb index 4c9d0cdd227ad..57b348f3fdc2b 100644 --- a/modules/payloads/singles/windows/x64/meterpreter_reverse_tcp.rb +++ b/modules/payloads/singles/windows/x64/meterpreter_reverse_tcp.rb @@ -51,7 +51,8 @@ def generate_config(opts={}) extensions: (datastore['EXTENSIONS'] || '').split(','), ext_init: (datastore['EXTINIT'] || ''), stageless: true, - debug_build: datastore['MeterpreterDebugBuild'] + debug_build: datastore['MeterpreterDebugBuild'], + log_path: Msf::OptMeterpreterDebugLogging.parse_logging_options(datastore['MeterpreterDebugLogging'])[:rpath] } # create the configuration instance based off the parameters