В момента се опитвам да напиша спомагателен модул за 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)