文件上傳的攻擊方式
一、JS檢測繞過
1、使用瀏覽器插件,刪除檢測文件后綴的js代碼,然后上傳文件即可繞過
2、先把需要上傳的文件后綴改成允許上傳的格式,通過js校驗,抓包把后綴名改為可執行文件的后綴上傳實現繞過
二、文件后綴繞過
Apache的解析順序是從右到左解析文件后綴的,如果最右側的擴展名不可識別,繼續往左判斷,直到遇到可以解析的擴展名為止。
比如:xxx.xls.xxx.xxx.xxx 因為后綴xxx不可以解析,所以向左解析后綴,最后解析出來是一個Excel表格
看道哥那本書上寫的是在1.x,2.x版本下有這個解析問題,現在使用的都是6,7甚至更高版本
三、文件類型繞過
如果服務器代碼是通過Content-Type的值來判斷文件的類型,那么就存在被繞過的可能。
Content-Type的值是客戶端傳遞的,是可以任意修改的。
四、文件截斷繞過
%00代表結束符,有可能會把后邊的字符刪掉。
http://www.xxx.xom/jieshu=111
把111改為 1.php%00a.jpg,文件被保存到服務器時,%00會把“a.jpg”截斷,保存到服務器的是1.php
五、競爭條件攻擊
一些網站是先允許上傳任意文件,然后檢查上傳文件是否包含特殊腳本,如果有則刪除文件。這就存在上傳和檢驗的時間差問題。
可以事先寫好 一句話,還沒校驗完成程序讀取來內容就直接給我返回。
六、文件內容繞過
前256個字節是合規的,在后邊加上可攻擊腳本
修復方案
1、文件上傳的目錄設置為不可執行,去掉x
2、判斷文件類型,建議使用白名單的形式,對於圖片的處理可以使用壓縮函數或者resize函數,處理圖片的同時破壞圖片中可能包含的html代碼
3、使用隨機數改寫文件名和文件路徑
4、單獨設置文件服務器域名(如果有條件),由於瀏覽器的同源策略一系列客戶端攻擊將失效。