本文翻译自https://royduineveld.nl/hacking-public-git-repositories/,版权所有© 2018 Roy Duineveld.
公开你的git目录是一个坏主意,但为什么是一个坏主意?这样做的后果是什么?你怎么能防止被入侵呢?
让我们开始预防
预防这一点很容易,只要确保你的git目录不在你的虚拟主机中。以Laravel为例,你的虚拟主机的web目录应该指向“public”目录,这样你的Laravel项目就不是脆弱的。当你使用WordPress的时候,你可以选择Bedrock来充当版本控制系统,或者你不打算使用Bedrock的话,用你的web服务器去阻止外界访问git目录!对于Magento,你可以测试你的GIT目录是否可以通过Magereport访问。
Apache配置
RedirectMatch 404 /\.git
Nginx配置
location ~ /.git/ { deny all; }
可能性
当git目录是可访问时,你可以很容易地阅读git的配置文件,只需在网站url后面加上“/.git/config”即可。酷,我们可以看到remote,但我们还能做什么?我们还可以下载整个存储库!
下载一个开放的git存储库
Github有一个叫DVCS Ripper的工具可以下载git存储库。下载其中的“rip-git.pl”文件然后运行它。
./rip-git.pl -s -v -u http://www.example.com/.git/
下载时间视存储库的大小,如果是一个纯代码的库,几分钟就可以下载完成。如果是一个包含产品图片的库(随便说一句,把二进制文件存在git里是一个坏主意)可能需要几个小时。我最长的下载时间是4个小时,那次我一共下载了几千MB的数据。
接下来是什么?有啥危险?
有比下载你网站整个源代码的事还要危险的吗?他们可以制造出你网站的副本、搜索代码里的Bug去利用它们,或者在开发者真的很愚蠢的情况下,一个公开的git存储库包含了一个存储数据库密码的配置文件!我不是在开玩笑,我已经在众多网站或者多个大型商城体验过这点。为了让它们的网站更好(或者更糟糕),一些网站经常把PhpMyAdmin装在“/phpmyadmin”下面。从这一点来说,可能性是无限的,我可以做以下的几点:
- 玷污一个网站,把一个甘道夫萨克斯放上去
- 创建一个管理员账户来访问后台
- 更改一些支付提供商的凭据,以便所有的支付到我的银行账户
- 转储一个数据库并把它卖给竞争对手或者黑市
- 泄露用户名和密码
如何找到开放的git存储库
正如之前所提到的,只需在url后面尝试“/.git/config”。谷歌也可以帮到你,只需在谷歌搜索:
.git intitle:"Index of"
你会找到很多网站,但这些网站都启用了目录列表(所以你可以浏览那个网站都有啥文件)。谷歌不会直接索引诸如“/.git/config”之类的文件,所以说有更多的网站拥有这问题。
有哪些大网站有这个问题
我写了一个简单的脚本来循环访问Alexa排名前100万的网站,你可以在Github Gist中找到这个脚本。运行这个脚本几个小时扫描前1W排名的网站后,我发现有73个网站有着一个公开的git存储库。因为它是一个开源的网站,如列表中的AngularJS,但其中大部分的网站都是闭源的。我不打算在这里输入那些网站的名字,直到这个漏洞被修复为止。但我遇到下面这些“开放的网站”并这些网站的所有者同意在这里发布他们的站名:
- Webshops
- News sites
- File sharing sites
- Cloud providers
- Online advertising companies
- Online video streaming sites
- Stock image sites
- Proxy providers
再次强调,这些是在世界浏览量前1万的网站!后来,我遇到了这个网站,他们抓取了整个Alexa前100万的网站,并创建了一些奇特的图表。
结论
不要公开你的git存储库。包括诸如HG、Bazaar、SVN、CVS等其它的版本控制系统。