2014-10-01 2 views
0

В настоящее время я пытаюсь написать вспомогательный модуль для Metasploit. Модуль в основном пытается получить несколько учетных данных по умолчанию для доступа к странице управления маршрутизатором. Аутентификация выполняется через Интернет, то есть HTTP POST.Metasploit: send_request_cgi возвращает nil для соединений HTTPS

В настоящее время модуль работает так, как ожидалось, для простых HTTP-соединений, то есть незащищенных соединений, однако каждая попытка подключения через HTTPS (порт 443) возвращает нуль. Ниже функция используется в Metasploit классе, чтобы получить страницу входа в систему:

def get_login_page(ip) 
begin 
    response = send_request_cgi(
    'uri' => '/', 
    'method' => 'GET' 
) 

    # Some models of ZyXEL ZyWALL return a 200 OK response 
    # and use javascript to redirect to the rpAuth.html page. 
    if response && response.body =~ /changeURL\('rpAuth.html'\)/ 
    vprint_status "#{ip}- Redirecting to rpAuth.html page..." 
    response = send_request_cgi(
     'uri' => '/rpAuth.html', 
     'method' => 'GET' 
    ) 
    end 

rescue ::Rex::ConnectionError 
    vprint_error "#{ip} - Failed to connect to Web management console." 
end 
return response 
end 

При попытке подключения через HTTPS, то первый send_request_cgi вызов возвращает ноль . Никакое исключение не попадает и не бросается. Я попытался с тремя разными хостами, чтобы убедиться, что проблема не связана с конкретной конечной точкой. Все мои 3 попытки не смогли вернуть ответ. При каждой попытке я установил параметр RPORT равным 443;

RHOSTS 0.0.0.0 yes  The target address range or CIDR identifier 
RPORT 443  yes  The target port 

Обратите внимание, что я заменил настоящий IP 0.0.0.0. Используя веб-браузер, я могу фактически подключиться к маршрутизатору через HTTPS без каких-либо проблем (кроме необходимости добавлять исключение, так как сертификат не доверен), и я представил страницу входа. С Wireshark я попытался посмотреть генерируемый трафик. Я ясно вижу, что маршрутизатор ничего не посылает. Я замечаю 3 рукопожатия быть завершено, и запрос GET HTTP, вносимый:

GET/HTTP/1.1 
Host: 0.0.0.0 
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 0 

Есть 3-4 ACK после, а затем FIN/PUSH посылается сервером.

Основываясь на this page на GitHub от Metasploit, у меня создалось впечатление, что подключения к HTTPS-сайтам обрабатывались базовой структурой. Я не видел никаких статей/учебников/источников, которые заставляют меня думать иначе. Документ о send_request_cgi не указывает каких-либо конкретных требований для установления HTTPS-соединения. У другого posts не было той же проблемы, что и у меня. На данный момент я подозреваю, что OS, каркас или я забываем что-то активировать. Other modules Я рассматривал либо только объекты HTTP-сайтов, что я сомневаюсь, либо не имею специальной обработки для соединений HTTPS.

Любая помощь, определяющая причину, была бы весьма признательна.

версия Metasploit: Framework: 4.9.3-2014060501 консоли: 4.9.3-2014060501.15168

Версия ОС: SMP Debian 3.14.5-1kali1 (2014-06-07)

+0

Я столкнулся с этим [сообщение] (https://community.rapid7.com/message/8822#8822) и попробую его, как только вернусь домой. – InfectedPacket

ответ

0

согласно this post on SecurityStreet, решение было установить SSL истина в DefaultOptions в функции инициализации:

def initialize 
    super(
    ... 
    'DefaultOptions' => 
     { 
     ... 
     'SSL' => true 
     } 
    ) 
    ... 
end 

Соединения с маршрутизаторами с использованием протокола HTTPS работал впоследствии.