文件泄露, 根据泄漏的信息敏感程度, 在WEB漏洞中可以算是中危甚至高危的漏洞, 本篇文章就来
介绍下一些常见的泄漏, 主要分为由版本管理软件导致的泄露, 文件包含导致的泄露和配置错误导致的泄露.
版本管理软件造成的泄露
git
git可以说是当今最受欢迎的版本控制/版本管理软件了, 很多基于git的云端托管仓库都提供了
免费的托管服务, 甚至有不少还支持免费私有仓库, 如bitbucket和国内的gitosc(开源中国)等.
关键文件
git在初始化项目的时候, 会在项目的根目录(可用git rev-parse --show-toplevel
查看)创建一个名为.git
的隐藏文件夹, 里面包含了本地所有commit的历史记录. 如果无意间将这个目录置于WEB的路径下让用户可以访问,
那么也就泄露了几乎所有的源代码和其他其他敏感信息.
泄露内容
- 所有该项目的源代码
- 私有仓库的地址
- 私密的配置信息
- 所有commiter的邮箱帐号信息
- (可能)内部的帐号和密码
- ...
利用方法
常规的利用方法就是下载整个目录, 然后用git
命令回滚整个项目:
wget -r --no-parent --mirror http://www.example.com/.git cd www.example.com && git reset --hard
当然也有一些自动化利用的脚本:
- dvcs-ripper: 基于perl的工具,除了git还支持很多版本管理系统
- GitHack
修复建议
一般基于MVC的现代WEB框架都不会直接挂载文件, 但如果是基于PHP,ASP等语言的项目, 还是会存在安全隐患,
虽然可以通过配置WEB服务器(apache/nginx等)来拒绝对.git路径的访问, 但也会出现被意外绕过的风险.
最好的办法就是在项目新建一个www
目录来存放源代码文件.
hg/Mercurial
Mercurial的意思是水银, 所以缩写成hg(汞), 也是一个版本管理软件. 用法和git有点类似, 但也保留了svn命令简明的特点,
而且原生地支持Windows/MacOS/Linux三大平台, 不像git需要MinGW才得以运行, 所以当今也有不少人偏向于用hg做版本控制.
关于他们有一些讨论, 如为什么要用hg,
为什么选hg而不是git等等, 我认为也是值得了解的.
关键文件
与git类似, hg在初始化项目时, 会在项目的根目录下创建一个名为.hg
的隐藏文件夹,
里面包含了代码和分支的修改记录和开发人员的相关信息.
泄露内容
- 项目源代码
- 项目仓库地址
- (可能)仓库的用户名
- 其他
利用方法
手动利用, 下载+回滚:
wget -r --no-parent --mirror http://www.example.com/.hg cd www.example.com && hg revert
也可以用上面提到的dvcs-ripper工具来利用
修复建议
同git
svn/Subversion
svn, 即Subversion, 在github之前曾经也是炙手可热的版本管理工具, 虽然已经日渐式微, 但在很多国企,
研究院等地方依然是作为版本管理的主要工具. 对于一些历史悠久的项目, 比如LLVM, 出于历史原因,
也是主要使用svn管理源代码.
关键文件
svn同样在项目根目录下会创建一个名为.svn
的隐藏文件夹, 包含了所有分支commit信息和代码记录.
泄露内容
- 所有该项目的源代码
- svn仓库的地址
- svn仓库所属用户的用户名
- ...
利用方法
同样是先下载目录, 然后回滚:
wget -r --no-parent --mirror http://www.example.com/.svn