
什么是檔案上傳漏洞
檔案上傳漏洞是指用戶上傳了一個可執行的腳本檔案,并通過此腳本檔案獲得了執行服務器端命令的能力,常見場景是web服務器允許用戶上傳圖片或者普通文本檔案保存,而用戶繞過上傳機制上傳惡意代碼并執行從而控制服務器,
可以看出來這種攻擊的危害很大,攻擊者一旦拿到服務器權限,那必然“天下大亂”,想要預防這種攻擊必然要知道這種攻擊的原理,攻擊的方式,這樣我們才能做出更好的應對,本文就從攻擊原理,攻擊方式,預防方法等方面來介紹下檔案上傳漏洞,知己知彼,方能百戰不殆,
檔案漏洞攻擊成功的條件
一個“可疑”檔案成功上傳到后臺后并不代表攻擊就成功了,還必須滿足一定的條件才能才能對后臺造成攻擊:
-
首先上傳的檔案能夠被Web容器解釋執行(比如php被Apache容器執行),所以檔案上傳后所在的目錄要是Web容器所覆寫到的路徑;
-
其次,用戶能夠從Web上訪問這個檔案,如果檔案上傳了,但用戶無法通過Web訪問,或者無法得到Web容器解釋這個腳本,那么也不能稱之為漏洞,
以上條件缺一不可,
一個檔案上傳漏洞的列子
一般情況下,我們會通過檔案名的后綴來判斷上傳的檔案是否符合要求,但是在某些時候,攻擊者可以手動修改了上傳程序中的POST包,在檔案名后添加一個%00位元組額,則可以截斷某些函式對檔案名的判斷,因為在許多語言的函式中,比如在C、PHP等語言的常用字串處理函式中,0x00被認為是終止符,受此影響的環境有Web應用和一些服務器,比如應用原本只允許上傳JPG圖片,那么可以構造檔案名為xxx.php[\0].JPG,其中[\0]為十六進制的0x00字符,.JPG繞過了應用的上傳檔案型別判斷;但對于服務器來說,此檔案因為0x00字符截斷的關系,最終保存檔案時變成了xxx.php,
預防檔案上傳漏洞的一些方法
-
客戶端校驗檔案名
在客戶端使用JS腳本判斷上傳的檔案名是否在白名單之內,如果不符合直接拒絕上傳,但是這種校驗很容易讓攻擊者繞過,比如說攻擊者可以禁用JS,也可以先上傳一個分發的檔案名,讓后將請求截住,手動將檔案名改成非法的檔案名,所以光前端進行校驗是遠遠不夠的,還需要后臺一同進行校驗,
-
服務端檔案名校驗
上面提到攻擊者可以繞過前端校驗,所以還需要后臺一起校驗檔案名是否在白名單內,但是光校驗檔案名的攻擊者還是能有辦法繞過,比如說0x00截斷(上面提到的,hacker.php%00.jpg),因此還需要其他手段進行進一步校驗,
-
檔案頭校驗
查看上傳過來的檔案的檔案頭是否和擴展名匹配,這種方式一定程度上能降低檔案上傳成功的概率,但是個人覺得最穩妥的預防方法還是以下幾種,
-
將上傳上來的檔案和Web服務器隔離,專門存放到一臺檔案服務器上,通過檔案ID來訪問,如果非要將檔案存放在Web服務器一起,可以將存放檔案的檔案夾的可執行權限去掉,
-
將上傳的檔案進行隨機重新命名,
參考
- Web滲透之檔案上傳漏洞總結
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/117852.html
標籤:其他
上一篇:給你講清楚什么是XSS攻擊
