文件上傳漏洞

文件上傳漏洞通常是指「上傳web腳本可以被服務器解析」的問題,也就是常說的webshell的問題,要完成這個攻擊須要知足如下幾個條件php

  • 首先,上傳的文件可以被web容器解釋執行。因此文件上傳後所在的目錄要是web容器所覆蓋到的路徑。
  • 其次,用戶可以從web上訪問這個文件,若是文件上傳了,但用戶沒法經過web訪問,或者沒法使得web容器解釋這個腳本,那麼也不能稱之爲漏洞。
  • 最後,用戶上傳的文件若被安全檢查、格式化、圖片壓縮等功能改變了內容,則可能致使攻擊不成功。

繞過文件上傳檢查功能:web

  • 在針對上傳文件的檢查中,不少應用都是經過判斷文件名後綴的方法來驗證文件的安全性的。若是攻擊者手動修改了上傳過程的POST包,在文件名後添加一個%00字節,則能夠截斷某些函數對文件名的判斷。由於在許多語言的函數中,例如C、PHP等語言的經常使用字符串處理函數中,0x00被認爲市終止符。好比應用本來只容許上傳JPG圖片,那麼能夠構造文件名爲xxx.php[\0].JPG,其中[\0]爲十六進制的0x00字符,.JPG繞過了應用的文件上傳類型判斷,但對於服務器來講,此文件由於0x00字符的截斷最終會變成xxx.php。
  • 除了常見的檢查文件名後綴的方法外,有的應用還會經過判斷上傳文件的文件頭來驗證文件的類型。在正常狀況下,經過判斷前10個字節,基本就能判斷出一個文件的真實類型。瀏覽器的MIME Sniff功能實際上也是經過讀取文件的前256個字節,來判斷文件的類型。爲了繞過此功能常見的攻擊技巧是僞造一個合法的文件頭,而將真實的PHP等腳本代碼附在合法的文件頭以後。但此時,仍須要經過PHP來解釋此圖片文件。

     

Apache文件解析問題:在Apache1.x、2.x中,對文件名的解析就存在如下特性。shell

Apache對於文件名的解析是從後往前解析的,直到碰見一個Apache認識的文件類型爲止。好比瀏覽器

Phpshell.php.rar.rar.rar.rar

由於Apache不認識.rar這個文件類型,因此會一直遍歷後綴到.php,而後認爲這是一個PHP類型的文件。安全

 

IIS文件解析問題:IIS6在處理文件解析時,也出過一些漏洞。前面提到的0x00字符截斷文件名,在IIS和Windows環境下出現過相似的漏洞,不過截斷字符變成了分號「;」。服務器

當文件名爲abc.asp;xx.jpg時,IIS 6會將此文件解析爲abc.asp,文件名被截斷了,從而致使腳本被執行。好比:函數

http://www.target.com/path/xyz.asp;abc.jpg

除此漏洞外,ISS 6還出過一個漏洞,由於處理文件夾拓展名出錯,致使將/*.asp/目錄下全部文件都做爲ASP文件進行解析。好比:網站

http://www.target.com/path/xyz.asp;abc.jpg

 

設計安全的文件上傳功能:spa

1.文件上傳的目錄設置爲不可執行設計

只要web容器沒法解析該目錄下的文件,即攻擊者上傳了腳本文件,服務器自己也不會受到影響。在實際應用中,不少大型網站的上傳應用,文件上傳後會放到獨立的存儲上,作靜態文件處理。

2.判斷文件類型

在判斷文件類型時,能夠結合使用MIME Type、後綴檢查等方式。在文件類型檢查中,強烈推薦白名單的方式。此外,對於圖片的處理,可使用壓縮函數或者resize函數,在處理圖片的同時破壞圖片可能包含的HTML代碼。

3.使用隨機數改寫文件名和文件路徑

文件上傳若是要執行代碼,則須要用戶可以訪問到這個文件。若是使用隨機數改寫了文件名和路徑,將極大地增長攻擊的成本。

4.單獨設置文件服務器的域名

因爲瀏覽器同源問題策略的關係,一系列客戶端攻擊將失效。

相關文章
相關標籤/搜索