文件上傳漏洞就是利用對(duì)用戶(hù)上傳的文件類(lèi)型判斷不完善,導(dǎo)致攻擊者上傳非法類(lèi)型的文件,從而對(duì)網(wǎng)站進(jìn)行攻擊。
比如可上傳一個(gè)網(wǎng)頁(yè)木馬,如果存放文件的目錄剛好有執(zhí)行腳本的權(quán)限,那么攻擊者就可以得到一個(gè)webshell
攻擊者要想成功實(shí)施文件上傳攻擊,必須要滿(mǎn)足以下三個(gè)條件:
可以上傳任意腳本文件,且上傳的文件能夠被Web服務(wù)器解析執(zhí)行,具體來(lái)說(shuō)就是存放上傳文件的目錄要有執(zhí)行腳本的權(quán)限
用戶(hù)能夠通過(guò)Web訪問(wèn)這個(gè)文件。如果文件上傳后,不能通過(guò)Web訪問(wèn),那么也不能成功實(shí)施攻擊
要知道文件上傳到服務(wù)器后的存放路徑和文件名稱(chēng),因?yàn)樵S多Web應(yīng)用都會(huì)修改上傳文件的文件名稱(chēng),那么這時(shí)就需要結(jié)合其他漏洞去獲取到這些信息。如果不知道上傳文件的存放路徑和文件名稱(chēng),即使你上傳了也無(wú)法訪問(wèn)
主流的文件上傳檢測(cè)方式有以下五種:
1, 客戶(hù)端java script檢測(cè)
客戶(hù)端檢測(cè)通常在上傳頁(yè)面里含有專(zhuān)門(mén)檢測(cè)文件上傳的java script代碼,在文件被上傳之前進(jìn)行檢測(cè),最常見(jiàn)的就是檢測(cè)上傳文件的文件類(lèi)型和大小是否合法
2, 服務(wù)端MIME類(lèi)型檢測(cè)
這類(lèi)檢測(cè)方法通過(guò)檢查http包的Content-Type字段中的值來(lái)判斷上傳文件是否合法
3.服務(wù)端文件擴(kuò)展名檢測(cè)
這類(lèi)檢測(cè)方法通過(guò)在服務(wù)端檢測(cè)上傳文件的擴(kuò)展名來(lái)判斷文件是否合法
4.服務(wù)端目錄路徑檢測(cè)
這類(lèi)檢測(cè)一般通過(guò)檢測(cè)路徑是否合法來(lái)判斷
5.服務(wù)端文件內(nèi)容檢測(cè)
那么如何設(shè)計(jì)出一個(gè)安全的文件上傳功能呢?
1, 設(shè)置保存上傳文件的目錄為不可執(zhí)行
只要Web服務(wù)器無(wú)法解析該目錄下的文件,即使攻擊者上傳了腳本文件,服務(wù)器本身也不會(huì)受到影響,此點(diǎn)至關(guān)重要。
2, 判斷文件類(lèi)型
在判斷文件類(lèi)型時(shí),可以結(jié)合使用MIME Type、后綴檢查等方式。在文件類(lèi)型檢查中,強(qiáng)烈建議采用白名單的方式。此外,對(duì)于圖片的處理可以使用壓縮函數(shù)或者resize函數(shù),在處理圖片的同時(shí)破壞圖片中可能包含的惡意代碼。
3.使用隨機(jī)數(shù)改寫(xiě)文件名和文件路徑
文件上傳如果要執(zhí)行代碼,則需要用戶(hù)能夠訪問(wèn)到這個(gè)文件。在某些環(huán)境中,用戶(hù)能上傳,但不能訪問(wèn)。如果采用隨機(jī)數(shù)改寫(xiě)了文件名和路徑,將極大地增加攻擊成本。與此同時(shí),像webshell.asp;1.jpg這種文件,將因?yàn)槲募桓膶?xiě)而無(wú)法成功實(shí)施攻擊。
---------------------
作者:rugu_xxx
來(lái)源:CSDN
原文:https://blog.csdn.net/sinat_36629696/article/details/80748665
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!