Web安全 - 文件上傳漏洞
File Upload
一、原理
一些web應用程序中允許上傳圖片,文本或者其他資源到指定的位置。
文件上傳漏洞就是利用網頁代碼中的文件上傳路徑變量過濾不嚴將可執行的文件上傳到一個到服務器中,再通過URL去訪問以執行惡意代碼。

二、檢測與繞過
客戶端檢測(Javascript檢測)
在網頁上寫一段Javascript腳本,校驗上傳文件的后綴名,有白名單形式也有黑名單形式。
繞過方法:
1.直接禁用Javascript實現繞過。
2.先改成允許上傳的文件類型,然后用Burpsuite改成腳本文件類型,即可繞過。
服務端檢測(MINE類型檢測)
MIME (Multipurpose Internet Mail Extensions) 是描述消息內容類型的因特網標準。
繞過:用Burpsuite抓到請求包,更改Content-Type為允許的類型。
常見MIMETYPE
audio/mpeg -> .mp3 application/msword -> .doc application/octet-stream -> .exe application/pdf -> .pdf application/x-javascript -> .js application/x-rar -> .rar application/zip -> .zip image/gif -> .gif image/jpeg -> .jpg / .jpeg image/png -> .png text/plain -> .txt text/html -> .html video/mp4 -> .mp4
服務端檢測(目錄路徑檢測)
對目錄路徑的檢測不夠嚴謹而導致可以用00截斷進行攻擊
繞過:/123.php%00.gif/123.gif -> /123.php
服務端檢測(文件擴展名檢測)
1.文件名大小寫繞過,如:*.aSP *.AsP
2.名單列表繞過,如:*.asa *.cer
3.特殊文件名繞過 //windows文件名最后不能有.或空格,可設為 *.php. 或 *.php+
4.0x00截斷繞過 //如:*.php(0x00).jpg 或 *.php%00.jpg
5.文件包含漏洞
6.服務器解析漏洞
7..htaccess文件攻擊
SetHandler application/x-httpd-php
.htaccess文件(或者"分布式配置文件"),全稱是Hypertext Access(超文本入口)。提供了針對目錄改變配置的方法, 即,在一個特定的文檔目錄中放置一個包含一個或多個指令的文件, 以作用于此目錄及其所有子目錄。網頁301重定向、自定義404錯誤頁面、改變文件擴展名、允許/阻止特定的用戶或者目錄的訪問、禁止目錄列表、配置默認文檔等功能。
服務端檢測(文件內容檢測)
文件幻數檢測(文件開頭)
幻數 magic number,它可以用來標記文件或者協議的格式,很多文件都有幻數標志來表明該文件的格式。
.jpg FF D8 FF E0 00 10 4A 46 49 46 .gif 47 49 46 38 39 61 .png 89 50 4E 47
文件加載檢測
1.對渲染/加載測試的攻擊方式是代碼注入繞過
使用winhex在不破壞文件本身的渲染情況下找一個空白區進行填充代碼,一般會是圖片的注釋區
2.對二次渲染的攻擊方式是攻擊文件加載器自身
如果要對文件加載器進行攻擊,常見的就是溢出攻擊;上傳自己的惡意文件后,服務器上的文件加載器會主動進行加載測試,加載測試時被溢出攻擊執行 shellcode,比如 access/mdb 溢出
三、防御
- 文件擴展名服務端白名單校驗。
- 文件內容服務端校驗。
- 上傳文件重命名。
- 隱藏上傳文件路徑。
- 限制相關目錄的執行權限,防范webshell攻擊。