Как заставить модуль Metasploit HTTP Server не закрываться преждевременно - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь написать базовый модуль для Metasploit, который просто действует как сервер. Проблема, с которой я сталкиваюсь, заключается в том, что после подключения клиента и получения ответа от моего модуля соединение разрывается. Мне нужно, чтобы модуль мог обрабатывать более 1 ответа в сеансе.

Я просмотрел большинство существующих модулей, которые поставляются с metasploit, и все они, похоже, просто полагаются на один ответ.

class MetasploitModule < Msf::Exploit::Remote
  Rank = NormalRanking

  include Msf::Exploit::Remote::HttpServer
  def initialize(info = {})
    super(
      update_info(
        info,
        'Name'           => 'Test',
        'Description'    => %q(
            test desc.
        ),
        'License'        => MSF_LICENSE,
        'Author'         => ['me'],
        'Targets'        =>
          [
            [
              'Linux',
              {
                'Platform' => 'linux'
              }
            ],
          ]
      )
    )
    register_options([
        OptString.new('SRVHOST', [false, 'The local host to listen on.  This must be an address on the local machine or 0.0.0.0', '0.0.0.0']),
        OptString.new('SRVPORT', [false, 'The local port to listen on', '80']),
        OptString.new('URIPATH', [false, 'The URI to use', 'test_file']),
    deregister_options('SSL', 'SSLCert')
  end

  def on_request_uri(cli, request)
    if some_condition
      response = create_response(200)
      cli.send_response(response)
    else
      response = create_response(404)
      cli.send_response(response)
    end
  end

В настоящее время клиент настроит трехстороннее рукопожатие, выполнит GET, получит ответ, затем сервер прервет соединение.

...