Class: Rex::Post::Meterpreter::Extensions::Stdapi::Net::Socket

Inherits:
Object
  • Object
show all
Defined in:
lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb

Overview

This class provides an interface to interacting with sockets on the remote machine. It allows callers to open TCP, UDP, and other arbitrary socket-based connections as channels that can then be interacted with through the established meterpreter connection.

Instance Method Summary collapse

Constructor Details

#initialize(client) ⇒ Socket

Initialize the socket subsystem and start monitoring sockets as they come in.


39
40
41
42
43
44
45
46
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb', line 39

def initialize(client)
  self.client = client

  # register the inbound handler for the tcp server channel (allowing us to
  # receive new client connections to a tcp server channel)
  client.register_inbound_handler( Rex::Post::Meterpreter::Extensions::Stdapi::Net::SocketSubsystem::TcpServerChannel )

end

Instance Method Details

#create(params) ⇒ Object

Creates an arbitrary client socket channel using the information supplied in the socket parameters instance. The params argument is expected to be of type Rex::Socket::Parameters.


66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb', line 66

def create( params )
  res = nil

  if( params.tcp? )
    if( params.server? )
      res = create_tcp_server_channel( params )
    else
      res = create_tcp_client_channel( params )
    end
  elsif( params.udp? )
    res = create_udp_channel( params )
  end

  return res
end

#create_tcp_client_channel(params) ⇒ Object

Creates a TCP client channel.


100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb', line 100

def create_tcp_client_channel(params)
  begin
    channel = SocketSubsystem::TcpClientChannel.open(client, params)
    if( channel != nil )
      return channel.lsock
    end
    return nil
  rescue ::Rex::Post::Meterpreter::RequestError => e
    case e.code
    when 10000 .. 10100
      raise ::Rex::ConnectionError.new
    end
    raise e
  end
end

#create_tcp_server_channel(params) ⇒ Object

Create a TCP server channel.


85
86
87
88
89
90
91
92
93
94
95
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb', line 85

def create_tcp_server_channel(params)
  begin
    return SocketSubsystem::TcpServerChannel.open(client, params)
  rescue ::Rex::Post::Meterpreter::RequestError => e
    case e.code
    when 10000 .. 10100
      raise ::Rex::ConnectionError.new
    end
    raise e
  end
end

#create_udp_channel(params) ⇒ Object

Creates a UDP channel.


119
120
121
122
123
124
125
126
127
128
129
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb', line 119

def create_udp_channel(params)
  begin
    return SocketSubsystem::UdpChannel.open(client, params)
  rescue ::Rex::Post::Meterpreter::RequestError => e
    case e.code
      when 10000 .. 10100
      raise ::Rex::ConnectionError.new
    end
    raise e
  end
end

#shutdownObject

Deregister the inbound handler for the tcp server channel


51
52
53
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb', line 51

def shutdown
  client.deregister_inbound_handler(  Rex::Post::Meterpreter::Extensions::Stdapi::Net::SocketSubsystem::TcpServerChannel )
end