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.



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

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

Instance Method Details

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



480
481
482
483
484
485
486
487
488
489
490
491
492
493
# File 'lib/metasploit/aggregator.rb', line 480

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)


451
452
453
# File 'lib/metasploit/aggregator.rb', line 451

def available?
  !@manager.nil?
end

#available_addressesObject



513
514
515
516
517
518
519
520
# File 'lib/metasploit/aggregator.rb', line 513

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

#cablesObject



459
460
461
# File 'lib/metasploit/aggregator.rb', line 459

def cables
  @manager.cables
end

#defaultObject



508
509
510
511
# File 'lib/metasploit/aggregator.rb', line 508

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

#obtain_session(payload, uuid) ⇒ Object



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

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



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

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



545
546
547
548
549
550
# File 'lib/metasploit/aggregator.rb', line 545

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



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

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

#remove_cable(host, port) ⇒ Object



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

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

#request(uuid) ⇒ Object



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

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



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

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

#session_details(payload) ⇒ Object



476
477
478
# File 'lib/metasploit/aggregator.rb', line 476

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

#sessionsObject



455
456
457
# File 'lib/metasploit/aggregator.rb', line 455

def sessions
  @manager.connections
end

#stopObject



522
523
524
525
526
527
528
# File 'lib/metasploit/aggregator.rb', line 522

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