浅谈“SVN信息泄露”

一:漏洞名称:

SVN信息泄露、版本管理工具文件信息泄漏

描述:

SVN(subversion)是程序员常用的源代码版本管理软件。一旦网站出现SVN漏洞,其危害远比SQL注入等其它常见网站漏洞更为致命,因为黑客获取到网站源代码后,一方面是掠夺了网站的技术知识资产,另一方面,黑客还可通过源代码分析其它安全漏洞,从而对网站服务器及用户数据造成持续威胁。更严重的问题在于,SVN产生的.svn目录下还包含了以.svn-base结尾的源代码文件副本(低版本SVN具体路径为text-base目录,高版本SVN为pristine目录),如果服务器没有对此类后缀做解析,黑客则可以直接获得文件源代码。

具体来说:

 1.在使用SVN管理本地代码过程中,会自动生成一个隐藏文件夹,其中包含重要的源代码信息。但一些网站管理员在发布代码时,不愿意使用‘导出’功能,而是直接复制代码文件夹到WEB服务器上,这就使隐藏文件夹被暴露于外网环境,这使得渗透工程师可以借助其中包含版本信息追踪的网站文件,逐步摸清站点结构。

 2.在服务器上布署代码时。如果是使用 svn checkout 功能来更新代码,而没有配置好目录访问权限,则会存在此漏洞。黑客利用此漏洞,可以下载整套网站的源代码。

3. .svn目录(隐藏目录)

    使用svn checkout后,项目目录下会生成隐藏的.svn文件夹(Linux上用ls命令看不到,要用ls -al命令)。 

    svn1.6及以前版本会在项目的每个文件夹下都生成一个.svn文件夹,里面包含了所有文件的备份,文件名为 .svn/text-base/文件名.svn-base。

    svn1.7及以后版本则只在项目根目录生成一个.svn文件夹,里面的pristine文件夹里包含了整个项目的所有文件备份。
 

分析:.svn目录内容(来自:北七星≧▽≦batsing)

浅谈“SVN信息泄露”_第1张图片

我们看到的是一个名为 wc.db 的文件,用文本编辑器打开看到第一行有写  SQLite format 3  ,可以知道,这是一个SQLite数据库的文件,后面包含的信息,文本编辑器就先不看了。我们下载一个正经的SQLite查看软件来慢慢看--SQLite Studio 。

在软件下载完之前,再看看此文件夹里的其他内容:

entries和format文件里面,只有个数字12,没什么参考意义;wc.db-journal文件是空的,也没什么价值;tmp目录里面也是空的;

pristine里面内容就多了,一堆00~ff的文件夹,每个文件夹里有若干个 .svn-base文件;用文本编辑器打开看一下,有些文件是代码,有些文件是乱码(大概是图片文件吧)。看来这个文件夹是整个项目文件的一份备份,只是一堆哈希过的文件名,似乎有点难下手啊。

毕竟是无规律的这一堆文件名,40位的哈希(36^40)这样的暴力穷举下载的话,即便是N多线程,时间成本上也是非常大的啊。而且得到是一堆无序文件,要整理成原来代码项目的样子,还得费好一阵功夫。

这样看来,是不是说.svn漏洞利用的价值很少?然而非也,少年,还记得刚才说的 wc.db 文件吗。现在SQLite Studio软件应该下载好了,我们就打开看看这里有什么来头吧

wc.db文件,有你想要的一切

用SQLiteStudio软件打开 wc.db文件,我们看到 NODES 表,看到 local relpath栏 和 checksum栏,明白了吗(滑稽.jpg)。checksum栏里的$sha1$后面的那串数字就是pristine文件夹里的那堆文件的文件名,pristine里的00~ff文件夹,其实是文件名的前两位,而local relpath就是原始的文件名。

现在,我们根据这个 wc.db 的NODES表,遍历这个表里的每一行,就可以下载到整个项目里的代码了,而且还能得到对应的真实文件名,可谓岂不快哉?

(下面截图为我自己的项目,仅作参考)

浅谈“SVN信息泄露”_第2张图片

除了NODES表以外,还可以看到一个 REPOSITORY表,里面存储了svn的项目路径和 uuid,如果没有做访问IP限制的话,你可以直接使用此信息取得此项目的SVN权限(下载、提交等)…

检测条件:

被测网站采用SVN(subversion)源代码版本管理软件。

检测方法:

1.访问http://[ip]/CVS/Entriesp 以及http://[ip]/.svn/entriesp看是否成功,也可以自行构造,根据显示的主目录去逐级访问并遍历相关的目录和文件。

2.利用web漏洞扫描工具进行检测。

漏洞修复:

1.删除SVN各目录下的.svn目录;删除CVS的CVS目录。或者对URL中进行过滤,过滤相关svn等相关敏感字符:

location ~ ^(.*)\/\.svn\/
{
return 404;
}

2.不要使用svn checkout和svn up更新服务器上的代码,使用svn export(导出)功能代替。

3.服务器软件(Nginx、apache、tomcat、IIS等)设置目录权限,禁止访问.svn和.git目录,下面示范为禁止访问点号开头的目录

Nginx的vhosts中配置

location ~ (/\.){
    deny all;
}

Apache的vhosts中配置


    Deny from all

不只svn,git或者其他版本管理软件也存在类似的问题。

 

你可能感兴趣的:(Web安全之信息泄露类)