常见Web源码泄露总结
1. 源码泄露分类
- 版本控制系统造成的文件泄露
- .DS_Store
- 配置文件泄露
- 网站备份文件泄露
2. .hg源码泄漏
2.1. 漏洞信息
Mercurial 是一个版本控制系统,一种轻量级分布式版本控制系统,采用 Python 语言实现,开发者可以用它来管理源代码。hg在初始化代码库的时候,会在当前目录下面产生一个.hg的隐藏文件夹
删除.hg
2.2. 漏洞利用
工具:
dvcs-ripper
下载地址:
https://github.com/kost/dvcs-ripper
工具使用方法
rip-hg.pl -v -u http://www.example.com/.hg/
2.3. 漏洞修复
删除web目录中所有.hg隐藏文件夹
3. .git源码泄漏
3.1. 漏洞信息
在运行git init
初始化代码库的时候,会在当前目录下面产生一个.git的隐藏文件,用来记录代码的变更记录等等。在发布代码的时候,把.git这个目录没有删除,直接发布了。使用这个文件,可以用来恢复源代码。
3.2. 漏洞利用
工具:
GitHack
下载地址:
https://github.com/lijiejie/GitHack
利用方法:
GitHack.py http://www.example.com/.git/
也可以使用rip-git工具进行漏洞利用
rip-git.pl -v -u http://www.example.com/.git/
4. SVN导致文件泄露
4.1. 漏洞信息
使用svn checkout后,项目目录下会生成隐藏的.svn文件夹(Linux上用ls命令看不到,要用ls -al命令)。
svn1.6及以前版本会在项目的每个文件夹下都生成一个.svn文件夹,里面包含了所有文件的备份,文件名为 .svn/text-base/文件名.svn-base
svn1.7及以后版本则只在项目根目录生成一个.svn文件夹,里面的pristine文件夹里包含了整个项目的所有文件备份
4.2. 漏洞利用
工具:
dvcs-ripper
下载地址:
rip-svn
工具使用方法
`rip-svn.pl -v -u http://www.localhost.test/.svn/
4.3. 漏洞修复
删除web目录中所有.svn隐藏文件夹,开发人员在使用SVN时,严格使用导出功能,禁止直接复制代码。
5. CVS泄漏
5.1. 漏洞信息
CVS是一个C/S系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。主要是针对 CVS/Root以及CVS/Entries目录,直接就可以看到泄露的信息。
http://url/CVS/Root 返回根信息
http://url/CVS/Entries 返回所有文件的结构
5.2. 漏洞利用
工具:
dvcs-ripper
下载地址:
rip-svn
工具使用方法
rip-cvs.pl -v -u http://www.example.com/CVS/
5.3. 漏洞修复
删除CSV文件夹
6. Bazaar/bz泄漏
6.1. 漏洞信息
bzr也是个版本控制工具, 虽然不是很热门, 但它也是多平台支持, 并且有不错的图形界面。
6.2. 漏洞利用
工具:
dvcs-ripper
下载地址:
rip-svn
工具使用方法
rip-bzr.pl -v -u http://www.example.com/.bzr/
6.3. 漏洞修复
删除web目录中所有.bzr隐藏文件夹
7. .DS_Store文件泄漏
7.1. 漏洞信息
.DS_Store是Mac下Finder用来保存如何展示文件/文件夹的数据文件,每个文件夹下对应一个。由于开发/设计人员在发布代码时未删除文件夹中隐藏的.DS_store,可能造成文件目录结构泄漏、源代码文件等敏感信息的泄露。
7.2. 漏洞利用
工具:
dsstoreexp
下载地址:
dsstoreexp
工具使用方法
python ds_store_exp.py http://www.example.com/.DS_Store
7.3. 漏洞修复
删除各文件夹下的.DS_Store
8. WEB-INF/web.xml泄露
8.1. 漏洞信息
WEB-INF是Java的WEB应用的安全目录。如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。
WEB-INF主要包含一下文件或目录:
/WEB-INF/web.xml
:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。/WEB-INF/classes/
:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中/WEB-INF/lib/
:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件/WEB-INF/src/
:源码目录,按照包名结构放置各个java文件。/WEB-INF/database.properties
:数据库配置文件
通常一些web应用我们会使用多个web服务器搭配使用,解决其中的一个web服务器的性能缺陷以及做均衡负载的优点和完成一些分层结构的安全策略等。在使用这种架构的时候,由于对静态资源的目录或文件的映射配置不当,可能会引发一些的安全问题,导致web.xml等文件能够被读取。
漏洞成因:
一般情况,jsp引擎默认都是禁止访问WEB-INF目录的,Nginx 配合Tomcat做均衡负载或集群等情况时,Nginx不会去考虑配置其他类型引擎(Nginx不是jsp引擎)导致的安全问题而引入到自身的安全规范中来
8.2. 漏洞检测
检测是否能访问web.xml文件,如果能则可能存在源码泄露
8.3. 漏洞利用
通过找到web.xml文件,推断class文件的路径,最后下载class文件,在通过反编译class文件,得到网站源码。
8.4. 漏洞修复
修改Nginx配置文件禁止访问WEB-INF目录就好了: location ~ ^/WEB-INF/* { deny all; } 或者return 404; 或者其他
9. 网站备份压缩文件泄露
9.1. 漏洞信息
在网站的使用过程中,往往需要对网站中的文件进行修改、升级。此时就需要对网站整站或者其中某一页面进行备份。当备份文件或者修改过程中的缓存文件因为各种原因而被留在网站web目录下,而该目录又没有设置访问权限时,便有可能导致备份文件或者编辑器的缓存文件被下载,导致敏感信息泄露,给服务器的安全埋下隐患。
该漏洞的成因主要有以下两种:
- 服务器管理员错误地将网站或者网页的备份文件放置到服务器web目录下。
- 编辑器在使用过程中自动保存的备份文件或者临时文件因为各种原因没有被删除而保存在web目录下。
9.2. 漏洞检测
该漏洞往往会导致服务器整站源代码或者部分页面的源代码被下载,利用。源代码中所包含的各类敏感信息,如服务器数据库连接信息,服务器配置信息等会因此而泄露,造成巨大的损失。被泄露的源代码还可能会被用于代码审计,进一步利用而对整个系统的安全埋下隐患。
.rar .zip .7z
.tar.gz .bak .swp .txt .html
9.3. 漏洞修复
不要将备份文件放到web目录或者限制对备份文件所在文件夹的访问