Metasploit: send_request_cgi връща нула за HTTPS връзки

В момента се опитвам да напиша спомагателен модул за Metasploit. Модулът основно опитва множество идентификационни данни по подразбиране, за да получи достъп до страницата за управление на рутера. Удостоверяването се извършва чрез уеб, т.е. HTTP POST.

Понастоящем модулът работи според очакванията за обикновени 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 различни хоста, за да се уверя, че проблемът не е с конкретна крайна точка. Всичките ми 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-посочното ръкостискане е завършено и е направена HTTP GET заявката:

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, изпратени от сървъра.

Въз основа на тази страница в GitHub на Metasploit останах с впечатлението, че връзките към HTTPS уебсайтове се обработват от основната рамка. Не съм виждал никакви статии/уроки/източници, които да ме карат да вярвам в противното. Документът за send_request_cgi не посочва никакви специфично изискване за установяване на HTTPS връзка. Други публикации нямаха абсолютно същия проблем, който имам аз. В този момент подозирам, че или операционната система, рамката или аз съм забравил да активирам нещо. Други модули Разгледах или насочени само към HTTP уебсайтове - което се съмнявам - или нямат никаква специална обработка за HTTPS връзки.

Всяка помощ за определяне на причината ще бъде високо оценена.

Версия на Metasploit: Framework: 4.9.3-2014060501 Конзола: 4.9.3-2014060501.15168

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


person InfectedPacket    schedule 01.10.2014    source източник
comment
Попаднах на тази публикация и ще я пробвам, след като се прибера.   -  person InfectedPacket    schedule 02.10.2014


Отговори (1)


Според тази публикация в SecurityStreet, решението беше да се зададе SSL на true в DefaultOptions в функцията за инициализиране:

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

Връзките към рутери, използващи HTTPS, проработиха след това.

person InfectedPacket    schedule 02.10.2014