fix portfwd command not functioning properly
git-svn-id: file:///home/svn/framework3/trunk@5075 4d416f70-5f16-0410-b530-b9f4589650daunstable
parent
b698d99209
commit
89d0e200f6
|
@ -23,6 +23,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "metsrv", "metsrv\metsrv.vcp
|
||||||
{9E4DE963-873F-4525-A7D0-CE34EDBBDCCA} = {9E4DE963-873F-4525-A7D0-CE34EDBBDCCA}
|
{9E4DE963-873F-4525-A7D0-CE34EDBBDCCA} = {9E4DE963-873F-4525-A7D0-CE34EDBBDCCA}
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ext_server_remoterub", "ext_server_remoterub\ext_server_remoterub.vcproj", "{6BEB2977-82CB-4783-A1A0-CBDD536CDC91}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Win32 = Debug|Win32
|
Debug|Win32 = Debug|Win32
|
||||||
|
@ -49,6 +51,10 @@ Global
|
||||||
{37E24F8F-1BD9-490B-8CD2-4768B89E5EAB}.Debug|Win32.Build.0 = Debug|Win32
|
{37E24F8F-1BD9-490B-8CD2-4768B89E5EAB}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{37E24F8F-1BD9-490B-8CD2-4768B89E5EAB}.Release|Win32.ActiveCfg = Release|Win32
|
{37E24F8F-1BD9-490B-8CD2-4768B89E5EAB}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{37E24F8F-1BD9-490B-8CD2-4768B89E5EAB}.Release|Win32.Build.0 = Release|Win32
|
{37E24F8F-1BD9-490B-8CD2-4768B89E5EAB}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{6BEB2977-82CB-4783-A1A0-CBDD536CDC91}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{6BEB2977-82CB-4783-A1A0-CBDD536CDC91}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{6BEB2977-82CB-4783-A1A0-CBDD536CDC91}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{6BEB2977-82CB-4783-A1A0-CBDD536CDC91}.Release|Win32.Build.0 = Release|Win32
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
|
@ -17,6 +17,23 @@ class Console::CommandDispatcher::Stdapi::Net
|
||||||
|
|
||||||
include Console::CommandDispatcher
|
include Console::CommandDispatcher
|
||||||
|
|
||||||
|
#
|
||||||
|
# This module is used to extend the meterpreter session
|
||||||
|
# so that local port forwards can be tracked and cleaned
|
||||||
|
# up when the meterpreter session goes away
|
||||||
|
#
|
||||||
|
module PortForwardTracker
|
||||||
|
def cleanup
|
||||||
|
super
|
||||||
|
|
||||||
|
if pfservice
|
||||||
|
pfservice.deref
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
attr_accessor :pfservice
|
||||||
|
end
|
||||||
|
|
||||||
#
|
#
|
||||||
# Options for the route command.
|
# Options for the route command.
|
||||||
#
|
#
|
||||||
|
@ -159,32 +176,34 @@ class Console::CommandDispatcher::Stdapi::Net
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# If we haven't extended the session, then do it now since we'll
|
||||||
|
# need to track port forwards
|
||||||
|
if client.kind_of?(PortForwardTracker) == false
|
||||||
|
client.extend(PortForwardTracker)
|
||||||
|
client.pfservice = Rex::ServiceManager.start(Rex::Services::LocalRelay)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Build a local port forward in association with the channel
|
||||||
|
service = client.pfservice
|
||||||
|
|
||||||
# Process the command
|
# Process the command
|
||||||
case args.shift
|
case args.shift
|
||||||
when "list"
|
when "list"
|
||||||
|
|
||||||
# Get the service context
|
cnt = 0
|
||||||
service = Rex::ServiceManager.start(Rex::Services::LocalRelay)
|
|
||||||
|
|
||||||
begin
|
# Enumerate each TCP relay
|
||||||
|
service.each_tcp_relay { |lhost, lport, rhost, rport, opts|
|
||||||
|
next if (opts['MeterpreterRelay'] == nil)
|
||||||
|
|
||||||
cnt = 0
|
print_line("#{cnt}: #{lhost}:#{lport} -> #{rhost}:#{rport}")
|
||||||
|
|
||||||
# Enumerate each TCP relay
|
cnt += 1
|
||||||
service.each_tcp_relay { |lhost, lport, rhost, rport, opts|
|
}
|
||||||
next if (opts['MeterpreterRelay'] == nil)
|
|
||||||
|
|
||||||
print_line("#{cnt}: #{lhost}:#{lport} -> #{rhost}:#{rport}")
|
print_line
|
||||||
|
print_line("#{cnt} total local port forwards.")
|
||||||
|
|
||||||
cnt += 1
|
|
||||||
}
|
|
||||||
|
|
||||||
print_line
|
|
||||||
print_line("#{cnt} total local port forwards.")
|
|
||||||
|
|
||||||
ensure
|
|
||||||
service.deref
|
|
||||||
end
|
|
||||||
|
|
||||||
when "add"
|
when "add"
|
||||||
|
|
||||||
|
@ -194,26 +213,17 @@ class Console::CommandDispatcher::Stdapi::Net
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
# Build a local port forward in association with the channel
|
# Start the local TCP relay in association with this stream
|
||||||
service = Rex::ServiceManager.start(Rex::Services::LocalRelay)
|
service.start_tcp_relay(lport,
|
||||||
|
'LocalHost' => lhost,
|
||||||
|
'PeerHost' => rhost,
|
||||||
|
'PeerPort' => rport,
|
||||||
|
'MeterpreterRelay' => true,
|
||||||
|
'OnLocalConnection' => Proc.new { |relay, lfd|
|
||||||
|
create_tcp_channel(relay)
|
||||||
|
})
|
||||||
|
|
||||||
begin
|
print_status("Local TCP relay created: #{lhost || '0.0.0.0'}:#{lport} <-> #{rhost}:#{rport}")
|
||||||
# Start the local TCP relay in association with this stream
|
|
||||||
service.start_tcp_relay(lport,
|
|
||||||
'LocalHost' => lhost,
|
|
||||||
'PeerHost' => rhost,
|
|
||||||
'PeerPort' => rport,
|
|
||||||
'MeterpreterRelay' => true,
|
|
||||||
'OnLocalConnection' => Proc.new { |relay, lfd|
|
|
||||||
create_tcp_channel(relay)
|
|
||||||
})
|
|
||||||
|
|
||||||
print_status("Local TCP relay created: #{lhost || '0.0.0.0'}:#{lport} <-> #{rhost}:#{rport}")
|
|
||||||
|
|
||||||
ensure
|
|
||||||
# Lost our reference to the service now that we're done with it
|
|
||||||
service.deref
|
|
||||||
end
|
|
||||||
|
|
||||||
# Delete local port forwards
|
# Delete local port forwards
|
||||||
when "delete"
|
when "delete"
|
||||||
|
@ -224,17 +234,11 @@ class Console::CommandDispatcher::Stdapi::Net
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
service = Rex::ServiceManager.start(Rex::Services::LocalRelay)
|
|
||||||
|
|
||||||
# Stop the service
|
# Stop the service
|
||||||
begin
|
if (service.stop_tcp_relay(lport, lhost))
|
||||||
if (service.stop_tcp_relay(lport, lhost))
|
print_status("Successfully stopped TCP relay on #{lhost || '0.0.0.0'}:#{lport}")
|
||||||
print_status("Successfully stopped TCP relay on #{lhost || '0.0.0.0'}:#{lport}")
|
else
|
||||||
else
|
print_error("Failed to stop TCP relay on #{lhost || '0.0.0.0'}:#{lport}")
|
||||||
print_error("Failed to stop TCP relay on #{lhost || '0.0.0.0'}:#{lport}")
|
|
||||||
end
|
|
||||||
ensure
|
|
||||||
service.deref
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue