信息泄露-常见敏感文件总结
本文最后更新于 2024年10月22日 下午
Git泄露
简介
Git 是一个开源的分布式版本控制系统,用于跟踪和管理文件的变化,主要用于软件开发。它允许多个开发者同时工作,并记录每个文件的修改历史,以便在需要时恢复到之前的版本。
泄露原因
git在初始化项目的时候, 会在项目的根目录创建一个名为.git
的隐藏文件夹, 里面包含了本地所有commit的历史记录. 如果无意间将这个目录置于WEB的路径下让用户可以访问, 那么也就泄露了几乎所有的源代码和其他其他敏感信息.
就拿我这个博客项目来说,我这个博客项目就是使用Git来推送发布文章的
这里的.git就是在初始化博客项目时产生的,.git
目录是 Git 仓库的核心,它包含了所有跟踪和管理项目所需的信息。这些信息包括提交历史、配置选项、对象存储、引用(如分支和标签)等,其中如果直接把.git放在网站的根目录下就能被所有人访问,那么也就泄露了几乎所有的源代码资源和其他其他敏感信息。
泄露内容
- 所有该项目的源代码
- 私有仓库的地址
- 私密的配置信息
- 所有commiter的邮箱账号信息
- (可能)内部的账号和密码
- .……
利用
实战案例
这个案例居然同样也是一个技术博客,和我的博客一样也是采用HEXO框架搭建的,但是看样子这位师傅是搞开发的,疏忽了.git文件的控制,直接就放在网站根目录了,使用GitHack也是直接可以下载还原几乎整个项目,不过还好,毕竟是技术博客,绝大多数文件本来在github仓库就是公开的,不存在什么敏感的信息,只是做个例子演示一下
修复
不要把.git文件暴露在网站根目录下
svn泄露
简介
svn, 即Subversion, 在github之前曾经也是炙手可热的版本管理工具, 虽然已经日渐式微, 但在很多国企, 研究院等地方依然是作为版本管理的主要工具. 对于一些历史悠久的项目, 比如LLVM, 出于历史原因, 也是主要使用svn管理源代码.
泄露原因
同git,只是成了.svn文件
泄露内容
- 所有该项目的源代码
- svn仓库的地址
- svn仓库所属用户的用户名
- …
利用
修复建议
同git
Hg泄露
简介
Mercurial是一种轻量级分布式版本控制系统,使用hg init的时候会生成.hg。
泄露原因
同git,只是成了.hg文件
利用
- dvcs-ripper 需要安装perl环境
修复建议
同git
bzr泄露
bzr也是个版本控制工具, 虽然不是很热门, 但它也是多平台支持, 并且有不错的图形界面, 所以也有一些人认为bzr比git要好用, 只是对于渗透测试人员来说, 其实都无所谓
泄露原因
同git,只是文件成了.bzr
泄露内容
- 源代码
- 仓库地址
- 开发者的信息
- …
利用
- dvcs-ripper 需要安装perl环境
修复建议
同git
CVS泄露
简介
CVS是一个年代比较久远的版本控制系统, 通过它可以追踪源代码的历史变化记录. 但是因为功能比较简单, 而且不支持分支, 所以很早前就被上面提到的svn替代了.
泄露原因
还是差不多,cvs项目在初始化(cvs checkout project
)的时候, 会在project
目录下创建一个名为CVS
的目录, 其中保存了各个文件的修改和commit记录. 通过此目录可以获取代码的历史版本. 其中两个关键文件为:CVS/Root
和CVS/Entries
, 分别记录了项目的根信息和所有文件的结构
泄露内容
- 因为是纯客户端的工具, 所以只会泄露源代码
利用
- dvcs-ripper 需要安装perl环境
修复
同理
.DS_Store泄露
简介
.DS_Store
文件是 macOS 系统在每个目录中自动生成的隐藏文件,用于存储该目录的自定义属性。.DS_Store
是 “Desktop Services Store” 的缩写,它包含了文件夹视图的设置和布局等信息可以说是比较严重的泄露.
泄露原因
同上
泄露内容
- 目录下的所有内容
利用
修复建议
使用macOS开发的同学, 可以把.DS_Store
加入忽略列表中(如.gitignore), 但本质上其只是泄露目录结构, 就算删掉.DS_Store
, 文件也依然存在于web服务器可以访问得到的地方, 所以治本的方法还是不要将敏感信息放在web路径中.
WEB-INF泄露
简介
在Java的Servlet文档中,说到WEB-INF目录“包含了所有web应用会用到但是不处于web路径中的资源”,也就是说,WEB-INF目录下的内容是不属于公开页面的。web应用可以通过getResource等API在servlet的上下文中访问到这些资源。
常见路径
① WEB-INF/web.xml : Web应用程序配置文件, 描述了servlet和其他的应用组件配置及命名规则.
② WEB-INF/database.properties : 数据库配置文件
③ WEB-INF/classes/ : 一般用来存放Java类文件(.class)
④ WEB-INF/lib/ : 用来存放打包好的库(.jar)
⑤ WEB-INF/src/ : 用来放源代码(.asp和.php等)
它里面记载了servlet以及其他组件配置文件的信息
利用
- 通过web.xml文件推测应用组件相关类的名字, 然后在src目录下查找代码, 如果没有源代码可以直接下载class文件反编译即可.
修复建议
发布前确认WEB-INF目录是禁止访问的, 或者在server设置好对于的过滤规则.