文章目錄
- 一、簡介
- 二、危害
- 三、文件檢測方式分類
- 四、判斷文件檢測方式
- 五、文件上傳繞過技術
- 六、漏洞防御措施
一、簡介
文件上傳漏洞是指Web應用程序在處理用戶上傳文件時,未對文件類型、內容、路徑等進行嚴格校驗和限制,導致攻擊者可上傳惡意文件(如WebShell、木馬、病毒等)到服務器,進而控制服務器或執行非法操作。其核心原理在于服務器對上傳文件的處理邏輯存在缺陷,例如未限制可執行文件的存儲路徑、未驗證文件真實類型等。根據統計,約30%的Web應用存在此類漏洞。
二、危害
遠程代碼執行:上傳WebShell(如PHP、ASP腳本)可直接執行系統命令,控制服務器。
數據泄露:攻擊者可訪問敏感文件(如數據庫配置、用戶信息)。
服務器癱瘓:通過上傳大文件或惡意程序發起DDoS攻擊。
權限提升:結合路徑遍歷漏洞覆蓋系統關鍵文件,或篡改網站內容。
供應鏈攻擊:上傳惡意圖片或跨域策略文件(如crossdomain.xml),控制客戶端行為。
三、文件檢測方式分類
文件上傳檢測主要分為以下五類:
客戶端檢測:通過JavaScript校驗文件擴展名和大小,易被禁用或繞過。
服務端MIME檢測:驗證HTTP請求的Content-Type字段(如image/jpeg),但可偽造。
擴展名檢測:黑名單或白名單校驗文件后綴,易被大小寫、雙擴展名(如.php.jpg)繞過。
文件內容檢測:檢查文件頭(Magic Number)或二次渲染圖片破壞惡意代碼。
目錄路徑檢測:限制上傳路徑合法性,但可能被路徑遍歷(如…/)突破。
四、判斷文件檢測方式
客戶端檢測:
上傳非法文件時,未發送請求即彈出錯誤提示(如“僅允許.jpg文件”)。
服務端檢測:
MIME檢測:修改Content-Type為合法類型(如image/png)可繞過。
擴展名檢測:嘗試上傳非常見后綴(如.phtml、.php5)測試黑名單覆蓋范圍。
內容檢測:添加合法文件頭(如GIF89a)或嵌入惡意代碼于圖片元數據(Exif)。
五、文件上傳繞過技術
擴展名繞過:
-
雙擴展名:.php.jpg(Apache解析漏洞)。
-
空字節截斷:shell.php%00.jpg(PHP版本<5.3.4)。
-
大小寫混淆:.pHp、.AsP。
內容欺騙: -
圖片馬:通過copy /b 1.jpg+shell.php 2.jpg合并文件。
-
Exif元數據注入:使用工具(如ExifTool)插入惡意代碼。
解析漏洞利用: -
Apache解析規則:從右向左解析擴展名(如1.php.xxx)。
-
IIS目錄路徑解析:/upload/shell.asp/1.jpg觸發ASP解析。
條件競爭:快速上傳并訪問臨時文件,繞過刪除邏輯。
六、漏洞防御措施
嚴格校驗機制:
-
白名單驗證:僅允許特定擴展名(如.jpg、.png)和MIME類型。
-
文件內容檢測:使用finfo庫驗證文件頭,二次渲染圖片破壞隱藏代碼。
存儲安全: -
隨機重命名:使用UUID或哈希值生成文件名,避免直接訪問。
-
非Web目錄存儲:上傳文件存放于不可通過URL直接訪問的路徑。
-
權限控制:目錄設置為不可執行(如chmod -x uploads/)。
服務器加固: -
禁用危險函數:如PHP的system()、exec()。
-
配置安全:Apache禁用.htaccess,Nginx限制解析特定擴展名。
其他措施: -
日志監控:記錄上傳行為,實時檢測異常(如高頻上傳)。
-
CDN分發:通過CDN提供靜態文件,隔離執行風險。
總結
文件上傳漏洞的防御需從輸入驗證、存儲隔離、服務器配置多層面綜合防護。開發中應優先采用白名單機制,避免依賴客戶端檢測,并結合定期滲透測試修復潛在風險。攻擊手法與防御技術持續演進,需緊跟安全社區動態更新防護策略。