ruby-on-rails - Metasploit:send_request_cgi 为 HTTPS 连接返回 nil

标签 ruby-on-rails ssl https network-programming metasploit

我目前正在尝试为 Metasploit 编写一个辅助模块。该模块基本上会尝试多个默认凭据来访问路由器的管理页面。身份验证是通过网络完成的,即 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 连接到路由器(除了必须添加一个异常(exception),因为证书不受信任)并显示登录页面。使用 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。

基于 this page在 Metasploit 的 GitHub 上,我的印象是与 HTTPS 网站的连接是由底层框架处理的。我还没有看到任何让我不相信的文章/教程/资源。关于 send_request_cgi 的文档没有指定建立 HTTPS 连接的任何特定要求。其他 posts没有遇到与我完全相同的问题。在这一点上,我怀疑操作系统、框架或我忘记启用某些东西。 Other modules我查看了要么只针对 HTTP 网站(我对此表示怀疑),要么没有对 HTTPS 连接进行任何特殊处理。

如果您能帮助确定原因,我们将不胜感激。

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

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

最佳答案

根据 this post on SecurityStreet ,解决方案是在初始化函数的 DefaultOptions 中将 SSL 设置为 true:

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

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

关于ruby-on-rails - Metasploit:send_request_cgi 为 HTTPS 连接返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26150514/

相关文章:

javascript - 通过 HTTPS 进行客户端哈希/加盐

ruby-on-rails - "Ago"Ruby/Rails 中的日期/时间函数

ssl - NGINX - SSL 握手时关闭连接,同时 SSL 握手到上游

node.js - Node https 服务器 secureOptions 不起作用

http - 如何在客户端和服务器中使用 HTTP/1.x

java - 如何使 web 应用程序可以从 java 中的 https 访问

MySQL 全文索引与 Rails 2.3.2(迁移问题)

ruby-on-rails - Ruby on Rails 中的 ActiveAdmin 未初始化常量

javascript - 充当嵌套资源的 Votable

apache - SSL 域名不匹配(仅限 IE9)