<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/tips/352

            0x00 SVN介紹


            Subversion,簡稱SVN,是一個開放源代碼的版本控制系統,相對于的RCS、CVS,采用了分支管理系統,它的設計目標就是取代CVS。互聯網上越來越多的控制服務從CVS轉移到Subversion。

            Subversion的官方網站是:http://subversion.tigris.org/

            中文的網站:Subversion中文站SVNBook 正體中文版Subversion中文社區中文SVN技術資料

            這些網站都提供了非常詳細、多樣的說明文檔,有時間大家可以逐一細查。

            Subversion使用服務端—客戶端的結構,當然服務端與客戶端可以都運行在同一臺服務器上。在服務端是存放著所有受控制數據的Subversion倉庫,另一端是Subversion的客戶端程序,管理著受控數據的一部分在本地的映射(稱為“工作副本”)。在這兩端之間,是通過各種倉庫存取層(Repository Access,簡稱RA)的多條通道進行訪問的。這些通道中,可以通過不同的網絡協議,例如HTTP、SSH等,或本地文件的方式來對倉庫進行操作。

            0x01 安裝配置


            安裝SVN

            #yum install subversion
            

            測試是否安裝成功

            #svnserve --version
            

            如果顯示了版本信息則表示安裝成功

            創建倉庫

            #svnadmin create /home/svn/repo
            

            給svn設置密碼

            修改配置文件/home/svn/repo/conf/svnserve.conf 去掉

            #[general]
            

            前面的#號

            匿名訪問的權限,可以是read,write,none,默認為read

            anon-access = none
            

            認證用戶的權限,可以是read,write,none,默認為write

            auth-access = write
            

            密碼數據庫的路徑

            #password-db = passwd
            

            去掉前面的#

            修改配置文件passwd

            #vim /home/svn/repo/conf/passwd
            

            =前面是用戶名,后面是密碼:

            [users]
            name = password
            

            啟動SVN服務器

            對于單個代碼倉庫

            #svnserve -d -r /home/svn --listen-host 192.168.1.100
            

            svn默認端口是3690,在防火墻上開放這個端口。

            /sbin/iptables -A INPUT -i eth0 -p tcp --dport 3690 -j ACCEPT
            /sbin/service iptables save
            

            把/var/www/html/目錄導入到svn的repo目錄下

            svn import /var/www/html/  file:///home/svn/repo  -m "test"
            


            0x02 注意的問題


            1、檢出(導出結果帶.svn文件夾的目錄樹)

            svn  co  http://路徑 [本地目錄全路徑]  --username 用戶名 --password 密碼
            svn  co  svn://路徑 [本地目錄全路徑]  --username 用戶名 --password 密碼
            svn  checkout  http://路徑 [本地目錄全路徑] --username 用戶名
            svn  checkout  svn://路徑 [本地目錄全路徑]  --username 用戶名
            

            如果不帶--password 參數傳輸密碼的話,會提示輸入密碼,建議不要用明文的--password 選項。 其中 username 與 password前是兩個短線,不是一個。 不指定本地目錄全路徑,則檢出到當前目錄下。

            2、導出(導出一個干凈的不帶.svn文件夾的目錄樹)

            svn  export  [-r 版本號]  http://路徑 [本地目錄全路徑] --username 用戶名
            svn  export  [-r 版本號]  svn://路徑 [本地目錄全路徑] --username 用戶名
            svn  export  本地檢出的(即帶有.svn文件夾的)目錄全路徑  要導出的本地目錄全路徑
            

            第一種從版本庫導出干凈工作目錄樹的形式是指定URL。 如果指定了修訂版本號,會導出相應的版本。 如果沒有指定修訂版本,則會導出最新的,導出到指定位置。 如果省略 本地目錄全路徑,URL的最后一部分會作為本地目錄的名字。 第二種形式是指定 本地檢出的目錄全路徑 到 要導出的本地目錄全路徑,所有的本地修改將會保留。 但是不在版本控制下(即沒提交的新文件,因為.svn文件夾里沒有與之相關的信息記錄)的文件不會拷貝。

            現實的開發環境中,強烈建議使用導出功能svn export而不是svn co

            由此可能導致非常嚴重的問題,很多管理員直接吧svn co出來的代碼直接放到web目錄下。

            這就使.svn隱藏文件夾被暴露于外網環境,黑客可以借助其中包含的用于版本信息追蹤的“entries”文件,逐步摸清站點結構。

            svn及entries文件夾暴露于外網環境

            更嚴重的問題在于,SVN產生的.svn目錄下還包含了以.svn-base結尾的源代碼文件副本(低版本SVN具體路徑為text-base目錄,高版本SVN為pristine目錄),如果服務器沒有對此類后綴做解析,黑客則可以直接獲得文件源代碼。

            源代碼文件副本暴露于外網環境

            如果解析了該后綴,可能會有文件解析的漏洞,可能會有擴展解析漏洞,找地方上傳xxx.php.gif也許就可以直接得到webshell了。

            如果已經線上的生產環境已經有了.svn目錄不想刪掉可以在服務器上設置禁制訪問此目錄:

            另外svn更新至1.7+ .svn/entries目錄就不包含文件目錄列表了。

            Apache:

            <Directory ~ "\.svn">
            Order allow,deny
            Deny from all
            </Directory>
            

            Nginx:

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

            附上個遍歷.svn/entries展現網站目錄結構的兩個腳本:

            svn遍歷腳本.zip

            wooyun上也是已經有非常多的svn泄露網站信息的事件,有的甚至由此導致整個服務器淪陷:

            WooYun: 【盛大180天滲透紀實】第四章.SVN獵手 (某站SVN信息泄露+設計問題導致服務器淪陷)

            WooYun: 愛拍svn泄露,有被脫褲危險,想起了csdn....

            WooYun: 優酷某分站SVN信息及某sql文件泄漏

            WooYun: 淘寶網某應用svn信息導致代碼泄露

            WooYun: 鮮果網怕是所有應用要淪陷了?




            參考:

            Subversion快速入門教程

            使用Subversion進行版本控制

            用Apache和Subversion搭建安全的版本控制環境

            centos svn安裝及配置與使用

            linux下svn常用指令

            WooYun: .svn目錄未設權限限制的漏洞利用總結

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线