本文首發(fā)地址 :
先知技術(shù)社區(qū)獨家發(fā)表本文猴凹,如需要轉(zhuǎn)載,請先聯(lián)系先知技術(shù)社區(qū)授權(quán)土至;未經(jīng)授權(quán)請勿轉(zhuǎn)載垂蜗。
先知技術(shù)社區(qū)投稿郵箱:Aliyun_xianzhi@service.alibaba.com
簡介 :
之前做過一道CTF的題目( 還是 facebook 的一個漏洞 ? ) , 具體是什么比賽忘記了
那個題目大概是讓用戶上傳一個 tar 壓縮包 , 然后會將其中的 txt 文件的內(nèi)容顯示出來
正解是先本地創(chuàng)建一個符號鏈接指向某一個敏感文件的絕對路徑 (/etc/passwd)
然后使用 tar 打包后上傳給具有漏洞的程序 , 然后 , 經(jīng)過程序處理以后就會 follow 符號鏈接將文件內(nèi)容顯示出來
這個漏洞大概也如此
在審計和測試 Codiad 這個開源程序的時候 , Codiad 開發(fā)者自己維護了一個用于展示 Codiad Demo 的網(wǎng)站
demo.codiad.com
測試的時候使用了該網(wǎng)站進行測試
漏洞分析 :
漏洞主要出現(xiàn)在 Codiad 打開文件的函數(shù)中 , 由于對打開的文件類型缺乏判斷 , 因此可以被惡意攻擊者利用
components/filemanager/class.filemanager.php
這里在打開文件的時候并沒有檢查文件是否是一個符號鏈接文件 , 直接就將其內(nèi)容獲取并顯示
這樣就給了攻擊者利用符號鏈接文件讀取任意文件的機會
攻擊者可以構(gòu)造一個符號鏈接文件指向敏感文件 , 然后就可以利用這個文件讀取到目標服務(wù)器上的任意文件
由于筆者知識儲備有限 , 并不是很了解符號鏈接文件的結(jié)構(gòu) , 暫時還不能手動創(chuàng)建一個符號鏈接文件
但是 Codiad 提供了從 github 導(dǎo)入 git 倉庫的功能
因此筆者找到一個這個漏洞的利用方式
就是先創(chuàng)建一個倉庫 , 在倉庫中創(chuàng)建一個符號鏈接文件 , 指向某一個敏感文件 (例如 /etc/passwd)
然后將其推送到 github
github 對符號鏈接文件的保護還是比較好 , 并沒有出現(xiàn)類似的漏洞
最后再使用 Codiad 的從 github 導(dǎo)入倉庫的功能將這個倉庫導(dǎo)入
最后就直接在 Codiad 中打開這個文件即可得到這個文件的內(nèi)容
利用成功截圖如下 :
最后又測試了一下是否可以將一整個目錄作為符號鏈接來掛載到 Codiad 的目錄中
發(fā)現(xiàn)確實是可以的
這里直接將 /etc 目錄掛載到了 Codiad 的項目下
本地測試的時候更是直接將系統(tǒng)根目錄直接掛載
修補方案 :
在打開文件之前 , 使用 is_link 函數(shù)對被打開的文件進行判斷
參考資料 :