【问题标题】:Detect if Rails is Running a Site检测 Rails 是否正在运行站点
【发布时间】:2012-12-25 05:53:06
【问题描述】:

我是管理公司面向公众的云平台的团队的一员。我们拥有大量运行面向互联网的虚拟机的用户群。我想对我们的地址空间进行自动扫描,看看是否有人在运行 Rails 应用程序,这样我就可以通知他们升级他们的 Rails 版本,以避免本周出现的严重安全漏洞。

我注意到,在一些 Apache 部署中,有一个有用的Passenger Header:

X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 2.0.3

但是,这并不可靠。我想知道是否有一种可靠的方法来检测在 Web 服务器后面运行的 Rails,无论是使用响应标头还是某种可以确定的 GET / POST。谢谢!

【问题讨论】:

  • 这很容易被恶意方用来寻找易受攻击的目标,因此在这里公开信息可能不是一个好主意。
  • ...但是如果决定让它活着,我想知道将它迁移到服务器故障是否有意义?我会标记一个模组并询问他们。
  • 您没有可以针对您的开发人员的公司电子邮件地址吗?一些应用程序故意弄乱,所以服务器/框架特别无法被检测到,正是为了混淆可能容易受到特定攻击的网站。
  • 我对你的问题投了反对票(这是我作为成员在这里投的唯一反对票)。我认为目前可能的答案弊大于利。这并不是说脚本小子不会找到办法,但我们暂时不要给他们任何想法。
  • 这很愚蠢,您可以通过示例查找实际的漏洞利用。我曾考虑使用该代码进行检查,但它的侵入性太大。

标签: ruby-on-rails ruby apache nginx passenger


【解决方案1】:

大多数 Rails 应用程序都有一个提交按钮,其中name="commit"

【讨论】:

    【解决方案2】:

    Wappalyzer 是个不错的选择,而且(无耻的插件)你看过Spotkick 吗?我们现在处于私人测试阶段,但它是一个用于运行开源应用程序的分布式引擎,因此您可以在您的所有站点上运行 Wappalyzer,以查看 可能在运行什么轨道。

    我为 banklook.com 做这件事 - 我运行了大约 6800 家银行来挖掘有关安全风险的详细信息。

    如果您需要更多详细信息或信息,请告诉我。

    【讨论】:

      【解决方案3】:

      Rails 的另一个通常保持不变的默认设置是主要/assets/application-<hex hash>.{css,js} 文件的名称。

      我不认为存在检测 Rails 的单一可靠方法,但是通过使用 authenticity_token、默认资产名称和 HTTP 标头的组合,您应该能够识别绝大多数 Rails应用程序。

      Wappalyzer 脚本使用这三个标准,并认为两个同时出现表示 Rails 应用程序。

      【讨论】:

        【解决方案4】:

        每个 Rails 站点都有:

        meta content="authenticity_token" name="csrf-param'
        

        至少这是我一直看到的。

        标题响应不可靠,以下是来自各个 Rails 站点的三个:

        Server:Apache/2.2.14 (Ubuntu)
        Server:nginx
        Server: thin 1.4.1 codename Chromeo
        

        您知道 nginx 和 Thin 在 Rails 社区中很受欢迎,但这还不足以说 Rails 支持它。您需要运行一个脚本来抓取该站点并查找上面的元标记。如果您的脚本将使用 Python,BeautifulSoup 非常好。 Mechanizegem 如果你使用 Ruby,那就太好了。

        【讨论】:

        • 没有必要使用像 Mechanize 或 BeautifulSoup 这样重量级的东西。索引页面的简单 HTTP GET 应该可以做到。问题是必须覆盖所有端口。如果获取索引页面似乎不够全面,那么成熟的网站爬虫将不得不遍历页面寻找元标记才能彻底。
        【解决方案5】:

        根据允许的配置,Rails 应用程序可以在许多不同的端口上运行。再加上应用程序可能无法以您可以识别的方式响应这一事实,这似乎是一种“次优”的查找方式。

        相反,如果您拥有主机,则您拥有支持应用程序的驱动器和系统。为什么不在系统中运行grep,寻找与 Rails 匹配的字符串。

        或者搜索一些标准的 Rails 文件;使用find 或locate(如果您正在运行)。

        【讨论】:

        • 我了解安全问题,但请理解我也不是要求利用漏洞。我认为最好的方法是多方面的检查。感谢您的建议。我无权访问我的用户虚拟机,否则这整个过程将相当容易。
        • 我在一个大型托管站点工作,有很多虚拟机。我们的站点管理员可以访问这些虚拟机以解决维护和支持问题,这将属于这种需求。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-06
        • 2015-01-28
        • 2012-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多