第8章 文件上傳漏洞
8.1 文件上傳漏洞概述
- 文件上傳漏洞是指用戶上傳了一個可執行的腳本文件,並通過此腳本文件獲得了執行服務器端命令的能力。
- 這種攻擊方式是最爲直接和有效的,有時候幾乎沒有什麼技術門檻。
- “文件上傳”本身是一個正常業務需求,本身沒有問題,但有問題的是文件上傳後,服務器怎麼處理、解釋文件。
- 如果服務器的處理邏輯做的不夠安全,則會導致嚴重的後果。
- 文件上傳後導致的常見安全問題:
上傳文件 | 後果 |
---|---|
Web腳本語言 | 服務器的Web容器解釋並執行了用戶上傳的腳本,導致代碼執行 |
Flash的策略文件crossdomain.xml | 黑客用以控制Flash在該域下的行爲(其他通過類似方式控制策略文件的情況類似) |
病毒、木馬文件 | 黑客用以誘騙用戶或者管理員下載執行 |
釣魚圖片或包含了腳本的圖片 | 在某些版本的瀏覽器中會被作爲腳本執行,被用於釣魚和欺詐 |
5. 多數情況下,文件上傳漏洞一般都是指“上傳web腳本能夠被服務器解析”的問題,就是通常所說的webshell的問題。完成這個攻擊要滿足以下幾個條件:
- 上傳的文件能夠被Web容器解釋執行
- 文件上傳後所在的目錄要是Web容器所覆蓋到的路徑
- 用戶能夠從Web上訪問這個文件
- 用戶上傳的文件若被安全檢查、格式化、圖片壓縮等功能改變了內容,則也可能導致攻擊不成功。
8.1.1 從FCKEditor文件上傳漏洞談起
8.1.2 繞過文件上傳檢查功能
8.2 功能還是漏洞
8.2.1 Apache文件解析問題
8.2.2 IIS文件解析問題
8.2.3 PHP CGI路徑解析問題
8.2.4 利用上傳文件釣魚
8.3 設計安全的文件上傳功能
- 文件上傳的目錄設置爲不可執行
- 判斷文件類型
- 使用隨機數改寫文件名和文件路徑
- 單獨設置文件服務器的域名
8.4 小結
- 如果應用缺乏安全檢查,或者安全檢查的實現存在問題,就極有可能導致嚴重的後果。
- 文件上傳往往與代碼執行聯繫在一起,因此對於所有業務中要用到的上傳功能,都應該由安全工程師進行嚴格的檢查。