SVN信息泄露分析

什么是SVN?


 

SVN(subversion)是源代码版本管理软件。

 


 

 

问题如何产生?

 


 

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

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

 


 

 

揭秘隐藏目录

 


 

.svn目录

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

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

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

 


 

 


 

svn目录内容

 

下面以svn1.7及之后版本为例

 SVN信息泄露分析 


 

  


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

     entries和format文件里面,只有个数字12,没什么参考意义;

     wc.db-journal文件是空的,也没什么价值;

     tmp目录里面也是空的; 

     pristine里面内容就多了,一堆00~ff的文件夹,每个文件夹里有若干个 .svn-base文件;用文本编辑器打开看一下,有些文件是代码,有些文件是乱码。

 

    因此目前看来只有wc.db文件可以利用了。

     

    用SQLiteStudio软件打开 wc.db文件,我们看到 NODES 表,看到 local relpath栏 和 checksum栏。checksum栏里的$sha1$后面的那串数字就是pristine文件夹里的那堆文件的文件名,pristine里的00~ff文件夹,其实是文件名的前两位,而local relpath就是原始的文件名。 现在,我们根据这个 wc.db 的NODES表,遍历这个表里的每一行,就可以下载到整个项目里的代码了。 除了NODES表以外,还可以看到一个 REPOSITORY表,里面存储了svn的项目路径和 uuid,如果没有做访问IP限制的话,你可以直接使用此信息取得此项目的SVN权限(下载、提交等)…

 

 


 

 

靶场实例

 

上面说了很多知识点,下面通过一个靶场加深一下上面知识的印象。

 

SVN信息泄露分析      

 

 

查看entries的确是12。SVN信息泄露分析       

查看format的确也是12。SVN信息泄露分析      

 

尝试下载wc.db文件,可以下载。

       SVN信息泄露分析      

 

 

完成下载后,使用SQLiteStudio查看数据

查看数据,发现了包含key的信息       SVN信息泄露分析       

于是尝试了半天here.php,找不到文件,还以为自己解题思路有问题。

SVN信息泄露分析      

 

于是去查看了别人的解题思路,很蛋疼,没想到文件名居然是key is here.php

       SVN信息泄露分析

相关文章:

  • 2021-07-03
  • 2021-06-08
  • 2021-11-13
  • 2021-07-16
  • 2021-12-07
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-20
  • 2022-12-23
  • 2021-07-23
  • 2021-07-15
  • 2021-07-30
  • 2021-05-28
  • 2022-12-23
相关资源
相似解决方案