Add support for the set of timeout values
This removes the need for a separate get call behind the scenes as meterpreter does get and set in a single call.bug/bundler_fix
parent
ec7fab7ef6
commit
1c5de59d99
|
@ -100,8 +100,22 @@ class ClientCore < Extension
|
||||||
commands
|
commands
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_transport_timeouts
|
def set_transport_timeouts(opts={})
|
||||||
request = Packet.create_request('core_transport_get_timeouts')
|
request = Packet.create_request('core_transport_set_timeouts')
|
||||||
|
|
||||||
|
if opts[:session_exp]
|
||||||
|
request.add_tlv(TLV_TYPE_TRANS_SESSION_EXP, opts[:session_exp])
|
||||||
|
end
|
||||||
|
if opts[:comm_timeout]
|
||||||
|
request.add_tlv(TLV_TYPE_TRANS_COMM_TIMEOUT, opts[:comm_timeout])
|
||||||
|
end
|
||||||
|
if opts[:retry_total]
|
||||||
|
request.add_tlv(TLV_TYPE_TRANS_RETRY_TOTAL, opts[:retry_total])
|
||||||
|
end
|
||||||
|
if opts[:retry_wait]
|
||||||
|
request.add_tlv(TLV_TYPE_TRANS_RETRY_WAIT, opts[:retry_wait])
|
||||||
|
end
|
||||||
|
|
||||||
response = client.send_request(request)
|
response = client.send_request(request)
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# -*- coding: binary -*-
|
# -*- coding: binary -*-
|
||||||
require 'set'
|
require 'set'
|
||||||
require 'dotiw'
|
|
||||||
require 'rex/post/meterpreter'
|
require 'rex/post/meterpreter'
|
||||||
require 'rex/parser/arguments'
|
require 'rex/parser/arguments'
|
||||||
|
|
||||||
|
@ -59,7 +58,8 @@ class Console::CommandDispatcher::Core
|
||||||
"run" => "Executes a meterpreter script or Post module",
|
"run" => "Executes a meterpreter script or Post module",
|
||||||
"bgrun" => "Executes a meterpreter script as a background thread",
|
"bgrun" => "Executes a meterpreter script as a background thread",
|
||||||
"bgkill" => "Kills a background meterpreter script",
|
"bgkill" => "Kills a background meterpreter script",
|
||||||
"get_timeouts" => "Kills a background meterpreter script",
|
"get_timeouts" => "Get the current session timeout values",
|
||||||
|
"set_timeouts" => "Set the current session timeout values",
|
||||||
"bglist" => "Lists running background scripts",
|
"bglist" => "Lists running background scripts",
|
||||||
"write" => "Writes data to a channel",
|
"write" => "Writes data to a channel",
|
||||||
"enable_unicode_encoding" => "Enables encoding of unicode strings",
|
"enable_unicode_encoding" => "Enables encoding of unicode strings",
|
||||||
|
@ -69,6 +69,7 @@ class Console::CommandDispatcher::Core
|
||||||
if client.passive_service
|
if client.passive_service
|
||||||
c["detach"] = "Detach the meterpreter session (for http/https)"
|
c["detach"] = "Detach the meterpreter session (for http/https)"
|
||||||
end
|
end
|
||||||
|
|
||||||
# The only meterp that implements this right now is native Windows and for
|
# The only meterp that implements this right now is native Windows and for
|
||||||
# whatever reason it is not adding core_migrate to its list of commands.
|
# whatever reason it is not adding core_migrate to its list of commands.
|
||||||
# Use a dumb platform til it gets sorted.
|
# Use a dumb platform til it gets sorted.
|
||||||
|
@ -324,8 +325,50 @@ class Console::CommandDispatcher::Core
|
||||||
Rex::Ui::Text::IrbShell.new(binding).run
|
Rex::Ui::Text::IrbShell.new(binding).run
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@@set_timeouts_opts = Rex::Parser::Arguments.new(
|
||||||
|
'-c' => [ true, 'Comms timeout (seconds)' ],
|
||||||
|
'-x' => [ true, 'Expiration timout (seconds)' ],
|
||||||
|
'-t' => [ true, 'Retry total time (seconds)' ],
|
||||||
|
'-w' => [ true, 'Retry wait time (seconds)' ],
|
||||||
|
'-h' => [ false, 'Help menu' ])
|
||||||
|
|
||||||
|
def cmd_set_timeouts(*args)
|
||||||
|
if ( args.length == 0 or args.include?("-h") )
|
||||||
|
cmd_transport_help
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
opts = {}
|
||||||
|
|
||||||
|
@@set_timeouts_opts.parse(args) do |opt, idx, val|
|
||||||
|
case opt
|
||||||
|
when '-c'
|
||||||
|
opts[:comm_timeout] = val.to_i if val
|
||||||
|
when '-x'
|
||||||
|
opts[:session_exp] = val.to_i if val
|
||||||
|
when '-t'
|
||||||
|
opts[:retry_total] = val.to_i if val
|
||||||
|
when '-w'
|
||||||
|
opts[:retry_wait] = val.to_i if val
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if opts.keys.length == 0
|
||||||
|
print_error("No options set")
|
||||||
|
else
|
||||||
|
timeouts = client.core.set_transport_timeouts(opts)
|
||||||
|
print_timeouts(timeouts)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def cmd_get_timeouts(*args)
|
def cmd_get_timeouts(*args)
|
||||||
timeouts = client.core.get_transport_timeouts
|
# Calling set without passing values is the same as
|
||||||
|
# getting all the current timeouts
|
||||||
|
timeouts = client.core.set_transport_timeouts
|
||||||
|
print_timeouts(timeouts)
|
||||||
|
end
|
||||||
|
|
||||||
|
def print_timeouts(timeouts)
|
||||||
print_line("Session Expiry : @ #{(Time.now + timeouts[:session_exp]).strftime('%Y-%m-%d %H:%M:%S')}")
|
print_line("Session Expiry : @ #{(Time.now + timeouts[:session_exp]).strftime('%Y-%m-%d %H:%M:%S')}")
|
||||||
print_line("Comm Timeout : #{timeouts[:comm_timeout]} seconds")
|
print_line("Comm Timeout : #{timeouts[:comm_timeout]} seconds")
|
||||||
print_line("Retry Total Time: #{timeouts[:retry_total]} seconds")
|
print_line("Retry Total Time: #{timeouts[:retry_total]} seconds")
|
||||||
|
|
Loading…
Reference in New Issue