<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    原文地址: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目錄未設權限限制的漏洞利用總結

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频