《Web安全测试学习手册》- SVN文件泄露

0x00 SVN文件泄露

1)什么是SVN文件泄露

Subversion,简称SVN,是一个开放源代码的版本控制系统,相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上越来越多的控制服务从CVS转移到Subversion。

Subversion使用服务端—客户端的结构,当然服务端与客户端可以都运行在同一台服务器上。在服务端是存放着所有受控制数据的Subversion仓库,另一端是Subversion的客户端程序,管理着受控数据的一部分在本地的映射(称为“工作副本”)。在这两端之间,是通过各种仓库存取层(Repository Access,简称RA)的多条通道进行访问的。这些通道中,可以通过不同的网络协议,例如HTTP、SSH等,或本地文件的方式来对仓库进行操作。

2)SVN文件泄露的特点

  • Web目录中存在.svn目录
  • Web中间件未限制客户端访问带.目录,例如:.conf/、.svn/、.data/

0x01 SVN文件泄露 - 风险等级

0x02 SVN文件泄露 - 原理

由于网站管理员在上线的时候使用了SVN服务,checkout完毕并没有删除.svn这个隐藏目录,并且中间件没有禁止客户端访问这一目录。

0x03 SVN文件泄露 - 常见场景

  • 存在.svn目录的Web应用

0x04 测试方案

方案一

使用浏览器或CURL探测:http://target/.svn/entries,查看entries这个文件是否存在。

命令:curl -I http://target/.svn/entries

例如:

➜  ~ curl -I http://10.211.55.12/.svn/entries
HTTP/1.1 200 OK
Date: Fri, 27 Apr 2018 08:12:54 GMT
Last-Modified: Fri, 27 Apr 2018 07:43:25 GMT
Accept-Ranges: bytes
Content-Length: 3

方案二

使用检测工具

SVN文件泄露

方案三

0x05 修复方案

方案一

删除.svn目录

方案二

Nginx服务器

nginx.conf中添加如下代码:

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

重启nginx

Apache服务器

httpd.conf中添加如下代码:

<Directory "WEB绝对路径/.svn/">
   Order deny,allow
   Deny from all
</Directory>