上傳是Web中最多見的功能,若是上傳功能存在設計、編碼缺陷,就容易造成上傳漏洞,從而成爲致命的安全問題,攻擊者能夠經過上傳腳本木馬,實現查看/篡改/刪除源碼和任意塗鴉網頁,能夠鏈接和操做對應的數據庫,還能夠經過操做系統漏洞、配置缺陷、信息泄露進行提權,獲取操做系統提權,所以上傳功能是Web安全測試中重點關注的高風險模塊。php
上傳漏洞造成的緣由,主要由如下幾種狀況:數據庫
漏洞緣由:上傳功能未考慮安全問題,能夠任意上傳*.asp、*.aspx、*.php、*.jsp等可執行的腳本文件,不須要任意的繞過就能夠直接獲取Web權限。數組
緣由分析:上傳功能必定要考慮上傳的安全性,須要理解上傳漏洞的危害和風險。安全
漏洞緣由:上傳文件判斷文件擴展名時,採用了黑名單機制,只是禁止*.asp、*.aspx、*.php、*.jsp這種已知的可執行文件擴展名,但沒有限制*.cer、*.asa、*.PHP、*.JSP這類擴展名,從而致使過濾不嚴格,造成上傳漏洞。服務器
緣由分析:上傳文件判斷擴展名時,應該採用名單機制,例如業務須要上傳用戶頭像照片,那麼咱們能夠寫一個數組,只容許.jpg、.gif、.png、.bmp這些文件,當攻擊者上傳不在白名單中的文件擴展名時,應禁止上傳並提示擴展名不正確。jsp
漏洞緣由:上傳文件判斷文件類型時,經過客戶端語言JavsScrip判斷文件大小、類型和擴展名,上傳白名單僅在JS中實現,而客戶端過濾很容易經過工具繞過限制,達到攻擊的目的。編輯器
緣由分析:能夠經過JS來判斷文件大小、類型和擴展名,這樣能夠提升效率和應用性,但還須要在服務器端進行判斷,服務器端判斷是指經過php、jsp腳本代碼來判斷。工具
漏洞緣由:上傳設計時使用了白名單機制,但容許用戶控制上傳文件的文件名和保存文件時上級文件夾的名稱。測試
緣由分析:儘可能避免用戶能夠操控上傳到服務器的文件名稱、上級文件夾名稱,若是用戶能夠控制上級文件夾名稱,那麼須要對文件夾名稱進行過濾,禁止上傳攜帶特殊符號的文件目錄,防止攻擊者生成畸形的文件名而致使解析漏洞。例如:在IIS 6.0中,會將/hack.asp/test.jpg當成asp解析,所以必需要對test.jpg上級全部目錄進行過濾(若是用戶能夠新建文件夾等場景,表示用戶能夠控制hack.asp這個值),避免解析漏洞。編碼
漏洞緣由:Web容器支撐PUT、MOVE、COPY等不安全的HTTP方法,但權限配置存在問題,致使攻擊者能夠經過PUT、COPY、MOVE上傳腳本文件。
緣由分析:儘可能避免使用不安全的HTTP方法,若是是業務須要(例如REST接口),儘可能使用原生態的類和方法,避免二次開發、擴展過程當中出現上傳漏洞,嚴格上講這類不安全的HTTP方法,屬於配置漏洞,所以不在本次討論範圍內。
漏洞緣由:不少產品使用了FCK、eWebeditor編輯器,方便富文件上傳和管理,而這些編輯器版本較多,不少低版本自己就存在上傳漏洞,所以也是上傳漏洞的重災區。
做者:jz