检测Rails是否正在运行网站

7

我是一个团队的成员,负责管理公司的公共云平台。我们有大量用户运行面向互联网的虚拟机。我想运行一个自动扫描我们的地址空间,看看是否有人在运行Rails应用程序,以便通知他们升级Rails版本,避免本周出现的关键安全漏洞。

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

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

然而,这种方法并不可靠。我在想是否有一种可靠的方式来检测Rails是否在Web服务器后面运行,可以使用响应头或某种GET / POST请求进行确定。谢谢!

4
这可能被恶意方利用来寻找易受攻击的目标,因此在这里公开信息可能不是一个好主意。 - Pekka
... 但如果决定保留它,我想知道是否将其迁移到Server Fault会有意义?我会通知管理员并向他们咨询。 - Pekka
2
你们没有能够针对开发人员的企业邮箱吗?有些应用故意搞乱,以便服务器/框架无法被检测到,从而混淆那些可能容易受到特定攻击的网站。 - Dave Newton
我投了你的问题反对票(这是我作为会员唯一的一次反对)。我认为目前可能的答案会带来更多的伤害而不是好处。这并不是说,脚本小子找不到方法,但让我们暂时不要给他们任何想法。 - vise
这很愚蠢,你可以查找实际的漏洞并且有例子。我曾考虑使用那段代码进行检查,但它太具侵入性了。 - Joey
5个回答

8
每个Rails网站都有:
meta content="authenticity_token" name="csrf-param'

或者可以有一个提交按钮,其中 name="commit"

至少这是我一直看到的。

头响应并不可靠,以下是来自各种Rails站点的三个响应示例:

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

你知道在Rails社区中nginx和Thin很受欢迎,但这并不足以证明它们背后有Rails。你需要运行一个脚本来爬取站点并查找上面的meta标签。如果你的脚本将使用Python,则BeautifulSoup是一个相当不错的选择。如果你选择Ruby,则Mechanize gem非常好用。

不需要使用像Mechanize或BeautifulSoup这样的重量级工具。简单的HTTP GET请求索引页面就可以了。问题在于所有端口都必须被覆盖。如果获取索引页面似乎不够全面,那么一个完整的站点爬虫将不得不遍历页面以寻找meta标签,以便彻底地完成任务。 - the Tin Man

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

0

Wappalyzer是一个不错的选择,(无耻地自荐)你看过Spotkick了吗?我们现在处于私人测试阶段,但它是一个分布式引擎,用于运行开源应用程序,因此您可以在所有站点上运行Wappalyzer,以查看哪些网站可能正在使用Rails。

我为banklook.com这样做-我检查了大约6800家银行,以挖掘有关安全风险的详细信息。

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


0

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

相反,如果您拥有托管权,则拥有支持应用程序的驱动器和系统。为什么不在系统上运行grep,查找与Rails匹配的字符串呢?

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


我理解安全方面的顾虑,但请理解我并不是在寻求漏洞。我认为最好的方法是多方面检查。感谢您的建议。如果我能够访问用户的虚拟机,这个问题将会相对容易解决。 - Joey
我在一家大型托管网站工作,拥有数十个虚拟机。这些虚拟机可供我们的网站管理员进行维护和支持问题的访问,而此需求将属于此范畴。 - the Tin Man

0

Rails 的另一个默认设置通常不会被更改,那就是主要的 /assets/application-<hex hash>.{css,js} 文件的名称。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接