Я пытаюсь написать базовый модуль для 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, получит ответ, затем сервер прервет соединение.