簡介:文件上傳漏洞是指因爲程序員在對用戶文件上傳部分的控制不足或者處理缺陷,而致使的用戶能夠越過其自己權限向服務器上上傳可執行的動態腳本文件。這裏上傳的文件能夠是木馬,病毒,惡意腳本或者WebShell等。javascript
webshell簡介:php
WebShell就是以asp、php、jsp或者cgi等網頁文件形式存在的一種命令執行環境,也能夠將其稱之爲一種網頁後門。攻擊者在入侵了一個網站後,一般會將這些asp或php後門文件與網站服務器web目錄下正常的網頁文件混在一塊兒,而後使用瀏覽器來訪問這些後門,獲得一個命令執行環境,以達到控制網站服務器的目的(能夠上傳下載或者修改文件,操做數據庫,執行任意命令等)。java
WebShell後門隱蔽較性高,能夠輕鬆穿越防火牆,訪問WebShell時不會留下系統日誌,只會在網站的web日誌中留下一些數據提交記錄。攻擊者能夠將WebShell隱藏在正常文件中並修改文件時間加強隱蔽性,也能夠採用一些函數對WebShell進行編碼或者拼接以規避檢測。除此以外,經過一句話木馬的小馬來提交功能更強大的大馬能夠更容易經過應用自己的檢測。<?php eval($_POST[a]); ?>就是一個最多見最原始的小馬。程序員
文件上傳必備條件:web
一、存在上傳點(上傳頭像、圖片、文檔等地方)shell
二、用戶可獨立控制上傳內容數據庫
三、上傳文件可被順利解析(apache+php下,要求上傳的web木馬採用.php後綴名,存放上傳文件的目錄要有執行腳本的權限)apache
四、知道文件上傳到服務器後的存放路徑和文件名稱windows
五、目錄文件可被用戶訪問瀏覽器
上傳檢測:
1、javascript:在網站中部署Javascript腳本,在用戶訪問時,腳本隨同網頁一塊兒到達客戶端瀏覽器,當用戶上傳文件時,JS腳本對用戶表單提交的數據進行檢查,若是發現非法後綴,則終止上傳。
一、利用瀏覽器編輯功能,直接刪除onsubmit。
二、上傳一個一句話木馬文件修改後綴名爲正常後綴名.jpg,使用代理抓包,修改擴展名爲.php類惡意擴展名。
三、用戶瀏覽器直接禁止JS功能。
四、把後綴名加入預期的後綴名,使之在白名單裏面。
2、服務器端MIME:檢測客戶端上傳的文件類型,服務器接收到HTTP包後,會先判斷Content-Type是否合法,若是合法,則繼續,不合法,則中斷。
一、使用代理抓包,將Content-Type類型替換爲可被容許的類型,從而繞過服務器後臺檢查。
3、黑名單防禦:禁止上傳特定的文件格式,不是指定的內容能夠直接經過
一、利用php版本差別,嘗試php四、php五、cer等後綴
二、文件大小寫繞過,PHp、pHp、pHP、PHP
三、特殊文件名構造(windows下),代理抓包修改後綴名爲.php.、.php_(利用windows不識別上述後綴機制,會自動去掉.和_等特殊符號)
四、%00截斷(PHP5.3.7以前版本,shell.php .jpg,文件名中的空格被當成終止符,致使空格以後的內容被忽略,最終文件名變爲shell.php)
4、服務器端文件內容檢測
經過檢測上傳文件的文件頭來判斷當前文件的格式
圖像二次渲染
檢查上傳文件是否爲圖像文件內容
一、修改文件頭(在文件頭插入GIF89a或GIF87a),對前20字節進行替換,後面再插入一句話木馬。
二、文件二次渲染(圖片和一句話文本進行合成,讓數據既是圖像數據也包含一句話木馬)
防範文件上傳漏洞常見的幾種方法:
1.文件上傳的目錄設置爲不可執行
只要web容器沒法解析該目錄下面的文件,即便攻擊者上傳了腳本文件,服務器自己也不會受到影響,所以這一點相當重要。
2.判斷文件類型
在判斷文件類型時,能夠結合使用MIME Type、後綴檢查等方式。在文件類型檢查中,強烈推薦白名單方式,黑名單的方式已經無數次被證實是不可靠的。此外,對於圖片的處理,可使用壓縮函數或者resize函數,在處理圖片的同時破壞圖片中可能包含的HTML代碼。
3.使用隨機數改寫文件名和文件路徑
文件上傳若是要執行代碼,則須要用戶可以訪問到這個文件。在某些環境中,用戶能上傳,但不能訪問。若是應用了隨機數改寫了文件名和路徑,將極大地增長攻擊的成本。再來就是像shell.php.rar.rar和crossdomain.xml這種文件,都將由於重命名而沒法攻擊。
4.單獨設置文件服務器的域名
因爲瀏覽器同源策略的關係,一系列客戶端攻擊將失效,好比上傳crossdomain.xml、上傳包含Javascript的XSS利用等問題將獲得解決。