SVN信息泄露漏洞
目录1 SVN 简介
- SVN(subversion)是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就用用于多个人共同开发同一个项目,实现的共享资源,实现最终集中式的管理。在使用 SVN 管理本地代码过程中,使用
svn checkout
功能来更新代码时,项目目录下会自动生成隐藏的.svn
文件夹,其中包含重要的源代码信息: - 造成SVN源代码漏洞的主要原因是管理员操作不规范,在发布代码时未使用
导出
功能,而是直接复制代码文件夹到WEB服务器上,导致.svn
被暴露于外网环境,黑客对此可进一步利用:- 利用其中包含的用于版本信息追踪的
.svn/entries
文件,获取到服务器源码、svn服务器账号密码等信息; - 利用
.svn/wc.db
数据库文件获取到一些数据库信息; - 利用SVN产生的
.svn
目录下还包含了以.svn-base
结尾的源代码文件副本(低版本SVN具体路径为text-base目录,高版本SVN为pristine目录),如果服务器没有对此类后缀做解析,则可以直接获得文件源代码。
- 利用其中包含的用于版本信息追踪的
2 SVN目录
-
entries
和format
文件,数据只有个数字12。 -
wc.db-journal
空文件 -
tmp
空目录 -
pristine
里是一些00~ff的名称的文件夹,每个文件夹里有若干哈希过的.svn-base
备份文件。 -
wc.db
文件用SQLiteStudio
软件打开wc.db
文件,在NODES
表中,遍历这个表里的每一行,就可以下载到整个项目里的代码了,而且还能得到对应的真实文件名。 -
不同SVN版本的差异:
-
svn1.7以及以后的版本则只在项目根目录生成一个
.svn
文件夹,里面的pristine文件夹里面包含了整个项目的所有文件备份 -
在 svn1.6 及以前版本会在项目的每个文件夹下都生成一个
.svn
文件夹,里面包含了所有文件的备份,文件名为.svn/text-base/文件名.svn-base
;
-
3 SVN信息泄露漏洞危害
- 获取到网站源代码:通过源代码分析其它安全漏洞,从而对网站服务器及用户数据造成持续威胁
- 获取到网站目录结构
4 漏洞利用
-
下载EXP:0xHJK/dumpall: 一款信息泄漏利用工具,适用于.git/.svn/.DS_Store泄漏和目录列出 (github.com)
- 类似漏洞有:
.git/.svn/.DS_Store
- 类似漏洞有:
-
下载网站源码:
# dumpall -u http://www.webhack123.com/.svn # ls www.webhack123.com_None
4 漏洞修复
- 不要使用
svn checkout
和svn up
更新服务器上的代码,使用svn export
(导出)功能代替; - 服务器软件(Nginx、apache、tomcat、IIS等)设置目录权限,禁止访问
.svn
目录; - 删除
/.svn
文件夹