程式碼安全之上傳檔案
上傳資料包簡單分析
從下面的資料包中我們可以看出,驗證檔案型別的引數有:Content-Type、Filename、Filedata。
客戶端JS驗證
原理介紹
通過JS驗證上傳檔案型別是最不安全的做法,因為這個方式是最容易被繞過的。我們先來看下JS實現檔案檢測的程式碼如下:
客戶端JS驗證通常做法是驗證上傳檔案的副檔名是否符合驗證條件。
繞過姿勢
1 通過firefox的F12修改js程式碼繞過驗證
2 使用burp抓包直接提交,繞過js驗證
服務端MIME型別檢測
MIME型別介紹
不同的檔案型別有不同的MIME頭,常見的MIME頭如下:
驗證MIME頭的測試程式碼
以上是一個簡單的伺服器上傳驗證程式碼,只要MIME頭符合image/gif就允許上傳。
繞過方式
使用Burp擷取上傳資料包,修改Content-Type的值,改為image/gif即可成功繞過上傳webshell。
服務端副檔名檢測
擴充套件驗證測試程式碼
預設上傳後的檔案儲存的名字是以獲取到名字。
繞過技巧
1 使用大小寫繞過(針對對大小寫不敏感的系統如windows),如:PhP
2 使用黑名單外的指令碼型別,如:php5
3 藉助檔案解析漏洞突破副檔名驗證,如:test.jpg.xxx(apache解析漏洞)
4 藉助系統特性突破副檔名驗證,如:test.php_(在windows下下劃線是空格,儲存檔案時下劃線被吃掉剩下test.php)
5 雙副檔名之間使用00截斷,繞過驗證上傳惡意程式碼如:test.php%00.jpg
6 藉助.htaccess檔案上傳惡意程式碼並解析。如:上傳一個.htaccess檔案,內容為AddTypeapplication/x-httpd-php .jpg,上傳的jpg檔案就可以當作php來解析
7 使用00截斷,繞過字尾驗證獲取webshell(php<5.3.4+關閉GPC)
8 超長檔名截斷上傳(windows 258byte | linux 4096byte)
服務端檔案內容檢測
檢測檔案頭
檔案頭簡介
不同的圖片檔案都有不同檔案頭,如:
PNG: 檔案頭標識 (8 bytes) 89 50 4E 47 0D 0A 1A 0A
JPEG: 檔案頭標識 (2 bytes): 0xff, 0xd8 (SOI) (JPEG 檔案標識)
GIF: 檔案頭標識 (6 bytes) 47 49 46 38 39(37) 61
繞過方式
繞過這個檢測只需要在惡意指令碼前加上允許上傳檔案的頭標識就可以了。
檔案內容檢測
檢測方式
使用正則對內容進行匹配,一旦匹配到惡意程式碼,就中斷上傳,提示使用者重新上傳。
繞過方式
通過fuzz,繞過正則上傳。
安全建議
1 使用白名單限制可以上傳的檔案擴充套件
2 驗證檔案內容,使用正則匹配惡意程式碼限制上傳
3 對上傳後的檔案統一隨機命名,不允許使用者控制副檔名
4 修復伺服器可能存在的解析漏洞
5 嚴格限制可以修改伺服器配置的檔案上傳如:.htaccess
相關文章
- linux之上傳檔案至windowsLinuxWindows
- 【Azure 儲存服務】.NET7.0 示例程式碼之上傳大檔案到Azure Storage Blob
- javaWeb上傳檔案程式碼JavaWeb
- 程式碼安全之檔案包含
- 《SpringMVC從入門到放肆》十五、SpringMVC之上傳檔案SpringMVC
- Web安全-檔案上傳漏洞Web
- Web安全之檔案上傳Web
- WEB安全:檔案上傳漏洞Web
- Chromium中跨程式檔案控制程式碼傳遞
- 檔案傳輸協議的五種安全檔案傳輸替代方案協議
- 什麼是安全檔案傳輸?
- 米安程式碼審計 05 檔案上傳漏洞
- Java檔案上傳功能程式碼——普遍適用Java
- Web 安全漏洞之檔案上傳Web
- 如何安全共享和傳送大檔案?
- php圖片上傳之檔案安全PHP
- 鐳速傳輸:安全檔案傳輸的意義
- 檔案上傳本地預覽js程式碼例項JS
- 誰有檔案上傳的好的程式碼呢?
- perl檔案上傳程式,支援多檔案! (轉)
- 小程式之檔案上傳
- 最程式碼的上傳的程式碼檔案儲存什麼地方呢?
- js檢測上傳檔案型別程式碼例項JS型別
- C# FTP上傳檔案至伺服器程式碼C#FTP伺服器
- 什麼是檔案傳輸,介紹檔案傳輸的發展程式
- Vue實現多檔案上傳功能(前端 + 後端程式碼)Vue前端後端
- php檔案上傳之多檔案上傳PHP
- 大檔案資料如何做到安全傳輸?
- 檔案上傳之解析漏洞編輯器安全
- 安全漏洞問題5:上傳任意檔案
- 安卓應用安全指南4.6.1處理檔案示例程式碼安卓
- 線上直播系統原始碼,前後端大檔案上傳程式碼分析原始碼後端
- hadoop之上傳資料到hdfs模式Hadoop模式
- js檢測上傳檔案大小和型別例項程式碼JS型別
- javascript檢測上傳檔案的格式和大小例項程式碼JavaScript
- PHP檔案上傳錯誤程式碼,狀態測試,除錯PHP除錯
- struts2上傳多個檔案,下載 配製!程式碼
- 單個檔案上傳和批量檔案上傳