文件上傳的漏網之魚

文件上傳是Web系統中常見的功能,也是獲取伺服器許可權的常見入口(就像航班上混入了KBFZ),通常情況下處理文件上傳漏洞的辦法是這麼來搞:

文件類型識別(包括後綴、文件頭);

文件類型白名單;

文件大小限制;

上傳目錄可執行許可權限制;

上傳文件重命名;

但在可以上傳zip文件同時後台自動解壓的情況下,上面的套路卻套不住那些「跑馬的漢子」。

Zip命令可以通過--symlinks參數創建軟鏈接的壓縮包:

--symlinks

For UNIX and VMS (V8.3 and later), store symbolic links as such in the zip archive, instead of compressing and storing the file referred to by the link. This can avoid multiple copies of files being included in the archive as zip recurses the directory trees and accesses files directly and by links.

有了這個特性,利用起來也非常簡單。

先創建軟連接到目標伺服器已知的文件,比如系統文件:

ln -s /etc/passwd link

而後創建這個軟鏈接的壓縮包

zip --symlinks test.zip link

最後上傳這個壓縮包,自動解壓後通過訪問解壓後的路徑就可以看到目標伺服器的文件內容了:

以上就是2014年11月Josip Franjkovi?報告給Facebook的漏洞(本地文件讀取漏洞),見:josipfranjkovic.blogspot.com

這個故事告訴我們:當在使用一些已經非常普遍的工具、組件或系統時,它們本身尚未發現的安全問題並不意味著直接拿來用也沒有問題。就像用水澆滅著火的油鍋:

推薦閱讀:

TAG:Web安全測試 | 文件上傳 | ZIP文件格式 |