1. 程式人生 > >檔案上傳下載漏洞

檔案上傳下載漏洞

一:檔案上傳漏洞:

由於程式設計師在對使用者檔案上傳部分的控制不足或者處理缺陷,而導致的使用者可以越過其本身許可權向伺服器上上傳可執行的動態指令碼檔案。打個比方來說,如果你使用 windows 伺服器並且以 asp 作為伺服器端的動態網站環境,那麼在你的網站的上傳功能處,就一定不能讓使用者上傳 asp 型別的檔案,否則他上傳一個 webshell,你伺服器上的檔案就可以被他任意更改了。

 

二:任意檔案上傳漏洞原理

前臺:首先要對上傳檔案的上傳大小做限制

前臺:校驗檔案上傳的字尾,也就是檔案上傳的格式,要校驗檔案上傳的格式不要讓別人上傳.cer字尾的木馬,要對檔案上傳的格式做嚴格的校驗比如asp.與asp是不同的檔案格式不能馬虎。

 

其次:檔案組成filePath+filename+fileposix

步奏:1 擷取首先獲得字尾,從後往前第一個.後面的是檔案的真是字尾

步奏:2 若截取了字尾以後任然存在”.”,那麼檔名不合法,可能是xxx.asp.jsp多後最的形式.

解決方案:

1.      嚴格檢查檔案上傳字尾名

2.     定義上傳檔案型別白名單,即只允許上傳的檔案型別

建議你使用白名單的方法,改進上面的函式,例如你要上傳圖片,那麼就檢測副檔名是否是 bmpjpgjpeggifpng 之一,如果不在這個白名單內,都算作非法的副檔名,這樣會安全很多。

3.     檔案上傳目錄禁止指令碼解析

檔案路徑:

1.      首先目錄的僭越:

攔截原檔案路徑,在檔案路徑中加如../這樣的話就實現了檔案路徑的僭越,把檔案上傳到非指定目錄下。如果使用者手輸檔案地址是:D:\abc\../index.asp,那麼該檔案實際地址是:D:\index.asp,如果伺服器端解析檔名時,沒有同時考慮到“/”“\”,解析出來的檔名就是“../index.asp”,如果直接按這個檔名儲存,就儲存在了不是我們所期望的目錄。

處理方式:str.replace(“../”,””)把檔案路徑僭越路徑都替換成空,使其無法僭越。

./ 當前路徑(可以省略)

../上一級目錄下

/ 根目錄下

攻擊例項展示:


專案中前臺已經通過javascript對檔案格式做了校驗,這時攻擊者通過修改後綴名繞過前臺js的檢測。


\


2.通過攔截工具繞過MIME檔案型別的判斷

 

伺服器端預防方法:

伺服器端要嚴格校驗檔案的大小與檔案格式,檔案路徑。伺服器端的檢查最好使用白名單過濾的方法,這樣能防止大小寫等方式的繞過,同時還需對%00截斷符進行檢測,對HTTP包頭的content-type也和上傳檔案的大小也需要進行檢查。

檔案下載

任意檔案下載:

         注意”..”或”../”字元(確保操作是在指定目錄下,防止轉跳到別的目錄);

         檔案型別(確保下載的檔案型別正確)

         路徑截斷(常見於jsp,asp頁面)