Land #8763, exploit/multi/handler improvements

ExitOnSession=false && Passive
bug/bundler_fix
William Vu 2017-07-24 17:55:16 -05:00
commit 2d9e14b208
No known key found for this signature in database
GPG Key ID: 68BD00CE25866743
1 changed files with 40 additions and 36 deletions

View File

@ -12,49 +12,53 @@ class MetasploitModule < Msf::Exploit::Remote
# #
def initialize(info = {}) def initialize(info = {})
super(update_info(info, super(
update_info(
info,
'Name' => 'Generic Payload Handler', 'Name' => 'Generic Payload Handler',
'Description' => %q{ 'Description' => %q(
This module is a stub that provides all of the This module is a stub that provides all of the
features of the Metasploit payload system to exploits features of the Metasploit payload system to exploits
that have been launched outside of the framework. that have been launched outside of the framework.
}, ),
'License' => MSF_LICENSE, 'License' => MSF_LICENSE,
'Author' => ['hdm'], 'Author' => [ 'hdm', 'bcook-r7' ],
'References' => [ ], 'References' => [ ],
'Payload' => 'Payload' =>
{ {
'Space' => 10000000, 'Space' => 10000000,
'BadChars' => '', 'BadChars' => '',
'DisableNops' => true, 'DisableNops' => true
}, },
'Platform' => %w{ android bsd java js linux osx nodejs php python ruby solaris unix win mainframe multi }, 'Platform' => %w[android bsd java js linux osx nodejs php python ruby solaris unix win mainframe multi],
'Arch' => ARCH_ALL, 'Arch' => ARCH_ALL,
'Targets' => [ [ 'Wildcard Target', {} ] ], 'Targets' => [ [ 'Wildcard Target', {} ] ],
'DefaultTarget' => 0 'DefaultTarget' => 0,
)) 'Stance' => Msf::Exploit::Stance::Passive
)
)
register_advanced_options( register_advanced_options(
[ [
OptBool.new("ExitOnSession", [ false, "Return from the exploit after a session has been created", true ]), OptBool.new(
OptInt.new("ListenerTimeout", [ false, "The maximum number of seconds to wait for new sessions", 0]) "ExitOnSession",
]) [ true, "Return from the exploit after a session has been created", false ]
),
OptInt.new(
"ListenerTimeout",
[ false, "The maximum number of seconds to wait for new sessions", 0 ]
)
]
)
end end
def exploit def exploit
if not datastore['ExitOnSession'] and not job_id
fail_with(Failure::Unknown, "Setting ExitOnSession to false requires running as a job (exploit -j)")
end
stime = Time.now.to_f stime = Time.now.to_f
print_status "Starting the payload handler..." timeout = datastore['ListenerTimeout'].to_i
while(true) loop do
break if session_created? and datastore['ExitOnSession'] break if session_created? && datastore['ExitOnSession']
break if ( datastore['ListenerTimeout'].to_i > 0 and (stime + datastore['ListenerTimeout'].to_i < Time.now.to_f) ) break if timeout.positive? && (stime + timeout < Time.now.to_f)
sleep(1)
select(nil,nil,nil,1)
end end
end end
end end