文章目录
- 前言
- 一、常见的源码泄露漏洞
- git源码泄露
- SVN源码泄露
- DS_Store文件泄漏
- 网站备份压缩文件泄露
- WEB-INF/web.xml泄露
- CVS泄露
- .hg源码泄露
- Bazaar/bzr泄露
- .swp文件泄露
前言
在Web应用方面对于安全来说,可能大家对SQL注入、XSS跨站脚本攻击、文件上传等一些漏洞已经耳熟于心了,这些漏洞可以对系统造成严重的安全风险,今天的所讲述的漏洞不亚于我们所提及到的 Owasp top 10,那就是系统源码泄露,而且Web源码泄露在实际项目中并不少见,一些大的厂商有可能也存在这类安全问题。
一、常见的源码泄露漏洞
下图中把常见的源码泄露问题进行列举整理
git源码泄露
漏洞成因
Git是一个开源的分布式版本控制系统,在执行git init初始化目录的时候,会在当前目录下自动创建一个 .git
目录,用来记录代码的变更记录等。发布代码的时候,如果没有把 .git
这个目录删除,就直接发布到了服务器上,攻击者就可以通过它来恢复源代码。
- HEAD 这个git项目当前处在哪个分支里
- config 文件包含项目特有的配置选项,git config 命令会改动它
- description 项目的描述信息
- hooks/ 系统默认钩子脚本目录
- info/ 目录包含一个全局性排除(global exclude)文件,用以放置不希望被记录在
.gitignore
文件中的忽略模式(ignored patterns) - objects/ 目录存储所有数据内容(commits,trees,blobs,tags)
- refs/ 标识你项目里的每个分支指向了哪个提交(commit)
- index 文件保存暂存区信息
漏洞利用
利用工具 Githack
下载地址:https://github.com/lijiejie/GitHack
使用方式 python GitHack.py http://www.example.com/.git/
修复建议
删除 .git
目录或者修改中间件配置进行对 .git
隐藏文件夹的访问。
SVN源码泄露
漏洞成因
SVN是源代码本地管理软件。使用SVN管理本地代码过程中,会生成一个名为 .svn
的隐藏文件夹,其中包含重要的源码信息,而造成 .svn
文件泄露的主要原因还是网站管理员在发布代码时,没有使用导出功能,而直接进行复制粘贴。这就使 .svn
隐藏文件夹被暴露于外网环境,可以利用 .svn/entries
文件,获取到服务器源码。
漏洞利用
利用工具 svnExploit
下载地址:https://github.com/admintony/svnExploit
使用方式
安装依赖库
sudo pip install -r requirements.txt
查看帮助
python SvnExploit.py -h
检测SVN源代码泄露
python SvnExploit.py -u http://192.168.27.128/.svn
下载源代码
python SvnExploit.py -u http://192.168.27.128/.svn --dump
修复建议
1、不要使用 svn checkout
和 svn up
更新服务器上的代码,使用svn export
(导出)功能代替。
2、服务器软件(Nginx
、Apache
、Tomcat
、IIS
等)设置目录权限,禁止访问 .svn
、.git
目录
DS_Store文件泄漏
漏洞成因
.DS_Store
是Mac OS保存文件夹的自定义属性的隐藏文件,如文件的图标位置或背景色,相当于Windows 的 desktop.ini
。由于开发人员发布代码时未删除文件夹中隐藏的 .DS_Store,可能造成文件目录结构泄漏,源代码文件等敏感信息的泄露。
漏洞利用
利用工具:ds_store_exp
下载地址:https://github.com/lijiejie/ds_store_exp
使用方式
python3 ds_store_exp.py http://27.0.0.1/.DS_Store
修复建议
不影响应用运行的情况下删除 .DS_Store
文件
网站备份压缩文件泄露
漏洞成因
在网站正常使用中,往往需要经过修改和升级,这时就需要对网站或对某处数据进行备份。而备份文件会因为各种原因保存在网站Web目录下,而当对此目录没有访问权限限制时,就很可能会导致备份或缓存文件被下载下来。
该漏洞往往会导致服务器整站源代码或者部分页面的源代码被下载,利用。源代码中所包含的各类敏感信息,如服务器数据库连接信息,服务器配置信息等会因此而泄露,造成巨大损失。
常见备份文件后缀名
- .rar
- .zip
- .7z
- .tar
- .gz
- .bak
- .swp
- .txt
- .html
常见的网站源码备份文件名
- web
- website
- backup
- back
- www
- wwwroot
- temp
漏洞利用
像备份压缩文件泄露,可以直接用专门的目录扫描工具进行敏感文件扫描
利用工具:御剑、dirseach.py、gobuster 等
修复建议
1、做好目录访问限制
2、在不影响运行的情况下,及时删除备份文件
WEB-INF/web.xml泄露
漏洞成因
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-INF/web.xml泄露的起因就是我们在使用网络架构的时候,对静态资源的目录或文件的映射配置不当,可能会引发一些的安全问题,导致web.xml等文件能够被读取。
漏洞利用
扫描后台有没有WEB-INF/web.xml,然后直接访问 通过找到web.xml文件,分析可用敏感信息,推断class文件的路径,直接class文件,最后再通过反编译class文件,得到网站源码。
修复建议
合理配置,控制目录访问权限
CVS泄露
漏洞成因
cvs项目在初始化(cvs checkout project)的时候,会在project目录下创建一个名为CVS的目录,其中保存了各个文件的修改和commit记录,通过此目录可以获取代码的历史版本,其中两个关键文件为:CVS/Root和CVS/Entries,分别记录了项目的根信息和所有文件的结构
漏洞利用
主要是针对CVS/Root以及CVS/Entries目录,直接就可以看到泄露的信息。
利用工具:dvcs-ripper
下载地址:https://github.com/kost/dvcs-ripper
使用方式
rip-cvs.pl -v -u http://www.example.com/CVS/
修复方式
删除CVS的CVS目录
.hg源码泄露
漏洞成因
Mercurial是一种轻量级分布式版本控制系统,使用 hg init 新建仓库的时候,会生成一个备份文件 .hg
利用方式
利用工具:dvcs-rippergithub
下载地址:https://github.com/kost/dvcs-ripper
Example run (for hg):
rip-hg.pl -v -u http://www.example.com/.hg/
It will automatically do hg revert
or if you would like to ignore SSL certification verification (with -s):
rip-hg.pl -s -v -u http://www.example.com/.hg/
修复建议
删除Web目录中所有 .hg
隐藏文件夹
Bazaar/bzr泄露
漏洞成因
bzr也是个版本控制工具, 虽然不是很热门, 但它也是多平台支持, 并且有不错的图形界面。
利用方式
利用工具:dvcs-rippergithub
下载地址:https://github.com/kost/dvcs-ripper
Example run (for bzr):
rip-bzr.pl -v -u http://www.example.com/.bzr/
It will automatically do bzr revertor if you would like to ignore SSL certification verification (with -s):
rip-bzr.pl -s -v -u http://www.example.com/.bzr/
修复建议
删除web目录中所有.bzr
隐藏文件夹
.swp文件泄露
漏洞成因
swp即swap文件,在编辑文件时产生的临时文件,它是隐藏文件,如果程序正常退出,临时文件自动删除,如果意外退出就会保留,文件名为 .filename.swp
漏洞利用
可通过直接访问.swp
文件,下载回来后删掉末尾的.swp
,获得源码文件。
修复建议
删除web目录中所有.swp
隐藏文件夹
防范措施
源码泄露的危害是巨大的,因此在企业内要根据实际情况选择恰当的方式去发现以及杜绝此类风险。
1) nginx上配置拒绝对对相应目录的访问
2)上线时检测是否存在相应的目录,防止带有.git的目录上线
3)线上定期巡检web目录,检查是否有相关的目录