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.



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

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

Instance Method Details

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



485
486
487
488
489
490
491
492
493
494
495
496
497
498
# File 'lib/metasploit/aggregator.rb', line 485

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)


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

def available?
  !@manager.nil?
end

#available_addressesObject



518
519
520
521
522
523
524
525
# File 'lib/metasploit/aggregator.rb', line 518

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

#cablesObject



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

def cables
  @manager.cables
end

#defaultObject



513
514
515
516
# File 'lib/metasploit/aggregator.rb', line 513

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

#obtain_session(payload, uuid) ⇒ Object



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

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



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

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



550
551
552
553
554
555
# File 'lib/metasploit/aggregator.rb', line 550

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



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

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

#remove_cable(host, port) ⇒ Object



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

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

#request(uuid) ⇒ Object



535
536
537
538
539
540
541
542
# File 'lib/metasploit/aggregator.rb', line 535

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



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

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

#session_details(payload) ⇒ Object



481
482
483
# File 'lib/metasploit/aggregator.rb', line 481

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

#sessionsObject



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

def sessions
  @manager.connections
end

#stopObject



527
528
529
530
531
532
533
# File 'lib/metasploit/aggregator.rb', line 527

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