原理
文件上傳非常常見(jiàn),上傳圖片就是一種,比如百度識(shí)圖、頭像上傳。
流程一般如下:
- 前端提交文件
- 瀏覽器生成 POST MultiPart 報(bào)文發(fā)送到服務(wù)器
- 服務(wù)器中間件接受到報(bào)文,解析后給后端
- 后端將內(nèi)容保存,文件名為前端提交的文件名或以一定規(guī)則生成的文件名
可見(jiàn)文件上傳需要和后端交互,很明顯就是我們可以操作的一個(gè)點(diǎn):當(dāng)文件上傳點(diǎn)未對(duì)上傳的文件進(jìn)行嚴(yán)格的驗(yàn)證和過(guò)濾,上傳的目標(biāo)目錄也沒(méi)有限制執(zhí)行權(quán)限,導(dǎo)致上傳的動(dòng)態(tài)文件可以正常執(zhí)行并訪問(wèn),即造成了文件上傳漏洞。
上傳檢測(cè)流程
- 前端提交:JS 檢測(cè),flash AS 檢測(cè)
- 數(shù)據(jù)傳輸:WAF 攔截,IPS 攔截
- 后端處理:擴(kuò)展名檢測(cè),MIME TYPE 檢測(cè),文件格式檢測(cè),內(nèi)容檢測(cè)
- 寫入文件系統(tǒng):文件重名,殺毒軟件查殺
- 訪問(wèn)文件:無(wú)執(zhí)行權(quán)限,未知位置