常见web源码泄露漏洞
目录
Git源码泄露
(1)Git源码泄露原因:在运行git init初始化代码库的时候,会在当前目录下面产生一个.git的隐藏文件,用来记录代码的变更记录等等。在发布代码的时候,把.git这个目录没有删除,直接发布了。使用这个文件,可以用来恢复源代码。
(2)git的目录结构:
工作区:也就是我们建立的git目录
版本库(Repository):工作区目录下git默认的隐藏目录
* 版本库--暂存区:add后文件的存放位置- 版本库–分支:commit后文件的存放位置
(3)一般来说,一个git仓库还存在这两个文件:
- README.md(项目介绍)
- .gitignore (配置在git进行文件跟踪的时候忽略掉哪些文件 , 从这个文件一般也可以得到一部分网站的目录结构 , 或者一些日志/配置文件等敏感文件**)**
(4)确定是否泄露
使用dirsearch工具扫描后台,如果存在则会扫描出.git目录,也可以直接通过网页访问.git目录,如果能访问就说明存在
(5)漏洞利用:
1.使用GitHack工具
是一个.git泄露利用的脚本,通过泄露的.git文件夹下的文件,还原重建工程源代码。
GitHub下载地址:https://github.com/lijiejie/GitHack
2.使用dvcs-ripper
rip-git.pl -v -u http://www.example.com/.git/`</pre>
(6)**命令**:
<pre class="wp-block-code">`python GitHack.py http://www.xxx.com/.git/`</pre>
(7)**漏洞修复**:
- 对.git目录的访问权限进行控制
- 在每次pull到web目录下之后删除.git文件夹
hg源码泄露
(1)介绍:hg init的时候会生成.hg
(2)利用工具:dvcs-ripper
(3)下载地址:https://github.com/kost/dvcs-ripper
(4)命令:rip-hg.pl -v -u http://www.example.com/.hg/
SVN源码泄露
(1)介绍:SVN是一个开放源代码的版本控制系统,相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息。网站管理员在发布代码时,没有使用‘导出’功能,而是直接复制代码文件夹到WEB服务器上,这就使.svn隐藏文件夹被暴露于外网环境,可以利用.svn/entries文件,获取到服务器源码。
(2)利用工具:dvcs-ripper
(3)命令:rip-svn.pl -v -u http://www.example.com/.svn/
(4)修复建议:删除web目录中所有.svn隐藏文件夹,开发人员在使用SVN时,严格使用导出功能,禁止直接复制代码。
CVS泄露
(1)介绍:CVS是一个C/S系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。主要是针对 CVS/Root以及CVS/Entries目录,直接就可以看到泄露的信息。http://url/CVS/Root 返回根信息http://url/CVS/Entries 返回所有文件的结构
(2)利用工具:dvcs-ripper
(3)用法:rip-cvs.pl -v -u http://www.example.com/CVS/
Bazaar/bzr泄露
(1)介绍:bzr也是个版本控制工具, 虽然不是很热门, 但它也是多平台支持, 并且有不错的图形界面。
(2)用法:rip-bzr.pl -v -u http://www.example.com/.bzr/
WEB-INF/web.xml泄露
(1)介绍:WEB-INF是Java的WEB应用的安全目录,如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。
(2)一些web容器的特性:
Tomcat的WEB-INF目录,每个j2ee的web应用部署文件默认包含这个目录。
Nginx在映射静态文件时,把WEB-INF目录映射进去,而又没有做Nginx的相关安全配置(或Nginx自身一些缺陷影响)。从而导致通过Nginx访问到Tomcat的WEB-INF目录(请注意这里,是通过Nginx,而不是Tomcat访问到的,因为上面已经说到,Tomcat是禁止访问这个目录的)。
(3)漏洞成因:在使用这种架构的时候,由于对静态资源的目录或文件的映射配置不当,可能会引发一些的安全问题,导致web.xml等文件能够被读取。
(4)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:数据库配置文件。
(5)利用方式:在域名后面加上WEB-INF/web.xml,然后通过web.xml文件推断出class文件的路径,最后得到class文件之后可以进行反编译,然后就可以得到java文件源码。
备份文件泄露
(1)形成原因:
- 服务器管理员错误地将网站或者网页的备份文件放置到服务器web目录下。
- 编辑器在使用过程中自动保存的备份文件或者临时文件因为各种原因没有被删除而保存在web目录下。
(2)备份文件下载:index.php.bak
(3)常见的网站源码备份文件后缀:
- tar
- tar.gz
- zip
- rar
(4)常见的网站源码备份文件名:
- web
- website
- backup
- back
- www
- wwwroot
- temp
DS_Store文件泄露
(1)介绍: .DS_Store是Mac下Finder用来保存如何展示 文件/文件夹 的数据文件,每个文件夹下对应一个。如果将.DS_Store上传部署到服务器,可能造成文件目录结构泄漏,特别是备份文件、源代码文件。
(2)形成原因:在发布代码时未删除文件夹中隐藏的.DS_store,被发现后,获取了敏感的文件名等信息。
(2)利用工具下载地址:https://github.com/lijiejie/ds_store_exp
(3)命令:python ds_store_exp.py http://hd.zj.qq.com/themes/galaxyw/.DS_Store
SWP文件泄露
(1)介绍:swp即swap文件,在编辑文件时产生的临时文件,它是隐藏文件,如果程序正常退出,临时文件自动删除,如果意外退出就会保留,文件名为 .filename.swp。
(2)利用:直接访问.swp文件,下载回来后就可以得到源码文件。
Github源码泄露
(1)介绍:GitHub是一个面向开源及私有软件项目的托管平台,很多人喜欢把自己的代码上传到平台托管。攻击者通过关键词进行搜索,可以找到关于目标站点的敏感信息,甚至可以下载网站源码。
参考链接:
如果文章有何不妥之处,请您指出。