文件上傳漏洞概念:
文件上傳漏洞是指攻擊者上傳了一個可執行的文件到服務器並能夠成功執行
漏洞成因:
由於程序員在對用戶文件上傳部分的控制不足或者處理缺陷,而導致用戶可以越過其本身權限向服務器上傳可執行的動態腳本文件。
實驗(低等級):
linux中可以使用mimetype查看文件類型,不僅僅是判斷后綴名,還要判斷文件頭的十個字節
- 在dvwa中首先上傳一個圖片看功能是否正常
- 上傳php一句話木馬
- 訪問木馬頁面,成功執行
附:
低級別服務器代碼
實驗(中等級):
- 上傳php木馬
- 用burpsuite截斷並修改數據包內容,將文件類型改成圖片格式
- 成功上傳木馬
附:
中級別服務器端源代碼
實驗(高等級):
- 上傳php文件
- 使用burpsuite截斷后修改文件類型和后綴名
- 成功上傳php文件
附高安全級別服務器源代碼:
對於一些過濾嚴格的服務器,過濾文件類型和擴展名還有文件頭的起始信息解決辦法
可以用burpsuite對在上傳的圖片文件中加入php代碼,也能成功繞過過濾執行代碼
防御方法:
文件上傳漏洞的防御,主要圍繞一開始提到的幾點,一是文件上傳路徑,二是文件訪問權限,三是文件執行權限。並且由於業務關系,根據所上傳文件的類型也需要進行不同的防御。比如很多文件上傳點都在用戶頭像上,並且由於用戶登錄的時候需要顯示頭像,即在HTML源碼中會爆出路徑,因此對於圖片文件的防御方法,主要是采用白名單以及圖片渲染,這樣即使結合解析漏洞或者是文件包含漏洞也沒法getshell。另外的一種方法是將用戶上傳的文件都放到指定的目錄中,同時在服務器配置中設定該目錄下的所有文件不可執行,但是該方法存在的風險即是在路徑可知的情況下配合文件包含漏洞即可突破。因此,個人覺得,針對文件上傳的最好防御方法即是讓上傳路徑不可知,將用戶上傳文件的路徑保存到數據庫中,並且在需要的時候再去讀取加載。