vlambda博客
学习文章列表

安装sqlite3数据库查看.svn的wc.db文件并解决源码泄露问题

项目中遇到的原代码泄露问题简述:

    某项目验收进行渗透测试时,发现存在SVN源码泄露的风险;原因是可以通过.svn目录下的wc.db文件将SVN内所有文件下载下来。

具体漏洞和现象如下:

漏洞名称 SVN源码泄露
漏洞危害 高危
漏洞地址 https://abcyimioncba.com/xk/bank/jyyh/.svn/wc.db
漏洞参数 -
漏洞说明 网站开发、运维人员在部署生产环境时,将SVN平台部署在当前网站上,并未设置访问权限控制,造成源码泄漏。
修复建议 不要将svn放置在外网
漏洞详情 项目服务地址(https://abcyimioncba.com/xk/bank/jyyh/#/home)

该网站存在SVN漏洞,可以通过。https://abcyimioncba.com/xk/bank/jyyh/.svn/wc.db下载wc.db文件,在该数据库文件中,获取当前SVN平台中存放文件的路径以及访问权限。

通过wc.db将SVN内所有文件下载下来。


安装sqlite3数据库查看.svn的wc.db文件并解决源码泄露问题


通过wc.db将SVN内所有文件下载下来

安装sqlite3数据库查看.svn的wc.db文件并解决源码泄露问题



SQLite简介

    SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。

    SQLite 数据库作用: 离线缓存数据

    优势:SQLite 是一个轻量级(嵌入式)的数据库,跨平台,体积小,功能强大.


.svn的wc.db文件简介


在 Windows 上安装 SQLite

1.下载SQLite的windows安装包


创建安装目录:D:\Program Files\sqlite,并在此文件夹下解压上面两个压缩文件,把解压得到的 sqlite3_analyzer.exe、sqlite3.exe和 sqldiff.exe 文件放到D:\Program Files\sqlite目录中。

配置环境变量:在PATH参数后面加上;D:\Program Files\sqlite

验证:在控制台输入sqlite3,如下即为成功

安装sqlite3数据库查看.svn的wc.db文件并解决源码泄露问题



在 Linux 上安装 SQLite

目前,几乎所有版本的 Linux 操作系统都附带 SQLite。所以,只要使用sqlite3命令来检查您的机器上是否已经安装了 SQLite。

安装sqlite3数据库查看.svn的wc.db文件并解决源码泄露问题


如果没有看到上面的结果,那么就意味着没有在 Linux 机器上安装 SQLite。因此,按照下面的步骤安装 SQLite:

下载安装包:sqlite-autoconf-*.tar.gz。

步骤如下:

$ tar xvzf sqlite-autoconf-3071502.tar.gz

$ cd sqlite-autoconf-3071502

$ ./configure --prefix=/usr/local

$ make

$ make install

完成后可以按照上述讲解的进行验证。


使用sqlite查看.svn目录下的wc.db文件

安装sqlite3数据库查看.svn的wc.db文件并解决源码泄露问题

安装sqlite3数据库查看.svn的wc.db文件并解决源码泄露问题

安装sqlite3数据库查看.svn的wc.db文件并解决源码泄露问题


漏洞分析

漏洞出现的原因

    该漏洞出现的根本原因是服务器上包含有导致源代码泄露的文件,并且也没有对用户的访问权限加以控制。

Jenkins构建Docker镜像环节

JenkinsSVNcheckout代码的时候,项目目录下会生成隐藏的.svn文件夹(里面包含导致源代码泄露的所有文件),Jenkins工作空间中的代码结构如下:

安装sqlite3数据库查看.svn的wc.db文件并解决源码泄露问题


用户访问环节

    nginx没有配置目录访问权限、没有禁止访问.svn目录

漏洞解决办法

  从以上漏洞产生的原因可以得出相应的解决办法:

  1.使服务器上不存在.svn目录

  2.限制用户访问.svn目录

Jenkins构建Docker镜像环节

在打包编译之前删除.svn目录;静态资源或代码中就不会存在此文件,也就不存在访问问题。

实施办法:在对应各项目的jenkins-job中加上删除.svn目录的脚本语句(rm –rf .svn目录),然后再执行后续的编译构建流程即可。

 

截图如下:

安装sqlite3数据库查看.svn的wc.db文件并解决源码泄露问题


修改后验证是否含有.svn目录:


用户访问环节

nginx配置拦截,不允许访问.svn开头的文件;直接限制用户访问敏感文件。

         配置截图如下: