1

我目前正在尝试为 Metasploit 编写一个辅助模块。该模块基本上会尝试使用多个默认凭据来访问路由器的管理页面。身份验证是通过 Web 完成的,即 HTTP POST。

目前,该模块对普通 HTTP 连接(即不安全的连接)按预期工作,但是通过 HTTPS(端口 443)的每次连接尝试都返回 nil。下面是 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调用返回 nil。没有异常被捕获或抛出。我已经尝试使用 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。

基于 Metasploit 的 GitHub 上的这个页面,我的印象是到 HTTPS 网站的连接是由底层框架处理的。我没有看到任何文章/教程/资料让我不相信。关于send_request_cgi的文档没有指定建立 HTTPS 连接的任何特定要求。其他帖子没有我遇到的完全相同的问题。在这一点上,我怀疑操作系统、框架或我忘记启用某些东西。我看过的其他模块要么只针对 HTTP 网站——我对此表示怀疑——要么对 HTTPS 连接没有任何特殊处理。

任何帮助确定原因将不胜感激。

Metasploit 版本:框架:4.9.3-2014060501 控制台:4.9.3-2014060501.15168

操作系统版本:SMP Debian 3.14.5-1kali1 (2014-06-07)

4

1 回答 1

0

根据SecurityStreet 上的这篇文章,解决方案是在初始化函数的 DefaultOptions 中将 SSL 设置为 true:

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

之后使用 HTTPS 连接到路由器。

于 2014-10-02T16:31:58.683 回答