Class: Metasploit::Aggregator::Server

Inherits:
Service
  • Object
show all
Defined in:
lib/metasploit/aggregator.rb

Instance Method Summary collapse

Methods inherited from Service

#version

Constructor Details

#initializeServer

Returns a new instance of Server.



440
441
442
443
# File 'lib/metasploit/aggregator.rb', line 440

def initialize
  @router = Router.instance
  @manager = ConnectionManager.instance
end

Instance Method Details

#add_cable(type, host, port, certificate = nil) ⇒ Object



474
475
476
477
478
479
480
481
482
483
484
485
486
487
# File 'lib/metasploit/aggregator.rb', line 474

def add_cable(type, host, port, certificate = nil)
  unless @manager.nil?
    case type
      when Cable::HTTPS
        # TODO: check if already listening on that port
        @manager.add_cable_https(host, port, certificate)
      when Cable::HTTP
        @manager.add_cable_http(host, port)
      else
        Logger.log("#{type} cables are not supported.")
    end
  end
  true
end

#available?Boolean

Returns:

  • (Boolean)


445
446
447
# File 'lib/metasploit/aggregator.rb', line 445

def available?
  !@manager.nil?
end

#available_addressesObject



507
508
509
510
511
512
513
514
# File 'lib/metasploit/aggregator.rb', line 507

def available_addresses
  addr_list = Socket.ip_address_list
  addresses = []
  addr_list.each do |addr|
    addresses << addr.ip_address
  end
  addresses
end

#cablesObject



453
454
455
# File 'lib/metasploit/aggregator.rb', line 453

def cables
  @manager.cables
end

#defaultObject



502
503
504
505
# File 'lib/metasploit/aggregator.rb', line 502

def default
  _send, _recv, console = @router.get_forward('default')
  console
end

#obtain_session(payload, uuid) ⇒ Object



457
458
459
460
461
462
463
# File 'lib/metasploit/aggregator.rb', line 457

def obtain_session(payload, uuid)
  # return session object details or UUID/uri
  # forwarding will cause new session creation on the console
  # TODO: check and set lock on payload requested see note below in register_default
  @manager.register_forward(uuid, [ payload ])
  true # update later to return if lock obtained
end

#register_default(uuid, payload_list) ⇒ Object



495
496
497
498
499
500
# File 'lib/metasploit/aggregator.rb', line 495

def register_default(uuid, payload_list)
  # add this payload list to each forwarder for this remote console
  # TODO: consider adding boolean param to ConnectionManager.register_forward to 'lock'
  @manager.register_forward(uuid, payload_list)
  true
end

#register_response_channel(io) ⇒ Object



539
540
541
542
543
544
# File 'lib/metasploit/aggregator.rb', line 539

def register_response_channel(io)
  # not implemented "client only method"
  response = "register_response_channel not implemented on server"
  Logger.log response
  response
end

#release_session(payload) ⇒ Object



465
466
467
468
# File 'lib/metasploit/aggregator.rb', line 465

def release_session(payload)
  @manager.park(payload)
  true # return always return success for now
end

#remove_cable(host, port) ⇒ Object



489
490
491
492
493
# File 'lib/metasploit/aggregator.rb', line 489

def remove_cable(host, port)
  unless @manager.nil?
    @manager.remove_cable(host, port)
  end
end

#request(uuid) ⇒ Object



524
525
526
527
528
529
530
531
# File 'lib/metasploit/aggregator.rb', line 524

def request(uuid)
  # return requests here
  send, _recv = @router.reverse_route(uuid)
  if send.length > 0
    result = send.pop
  end
  result
end

#respond(uuid, data) ⇒ Object



533
534
535
536
537
# File 'lib/metasploit/aggregator.rb', line 533

def respond(uuid, data)
  _send, recv = @router.get_forward(uuid)
  recv << data unless recv.nil?
  true
end

#session_details(payload) ⇒ Object



470
471
472
# File 'lib/metasploit/aggregator.rb', line 470

def session_details(payload)
  @manager.connection_details(payload)
end

#sessionsObject



449
450
451
# File 'lib/metasploit/aggregator.rb', line 449

def sessions
  @manager.connections
end

#stopObject



516
517
518
519
520
521
522
# File 'lib/metasploit/aggregator.rb', line 516

def stop
  unless @manager.nil?
    @manager.stop
  end
  @manager = nil
  true
end