程式碼安全之上傳檔案
上傳資料包簡單分析
從下面的資料包中我們可以看出,驗證檔案型別的引數有: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
相關文章
- 【Azure 儲存服務】.NET7.0 示例程式碼之上傳大檔案到Azure Storage Blob
- 程式碼安全之檔案包含
- 《SpringMVC從入門到放肆》十五、SpringMVC之上傳檔案SpringMVC
- 檔案上傳/下載後臺程式碼
- Web安全之檔案上傳Web
- Web安全-檔案上傳漏洞Web
- 檔案傳輸協議的五種安全檔案傳輸替代方案協議
- 什麼是安全檔案傳輸?
- 米安程式碼審計 05 檔案上傳漏洞
- 小程式之檔案上傳
- 如何安全共享和傳送大檔案?
- Web 安全漏洞之檔案上傳Web
- 鐳速傳輸:安全檔案傳輸的意義
- 什麼是檔案傳輸,介紹檔案傳輸的發展程式
- Vue實現多檔案上傳功能(前端 + 後端程式碼)Vue前端後端
- 大檔案資料如何做到安全傳輸?
- 探索網路安全:淺析檔案上傳漏洞
- 檔案上傳之解析漏洞編輯器安全
- hadoop之上傳資料到hdfs模式Hadoop模式
- 線上直播系統原始碼,前後端大檔案上傳程式碼分析原始碼後端
- 安卓應用安全指南4.6.1處理檔案示例程式碼安卓
- MATLAB生成.coe檔案和.mif檔案程式碼示例Matlab
- Linux伺服器上傳檔案傳送檔案Linux伺服器
- 單個檔案上傳和批量檔案上傳
- SpringMVC實現多檔案上傳原始碼SpringMVC原始碼
- [python網路程式設計]檔案上傳Python程式設計
- 檔案上傳
- HttpClient多檔案上傳程式碼及普通引數中文亂碼問題解決HTTPclient
- java安全編碼指南之:檔案IO操作Java
- 米安程式碼審計 06 PHPYUN V3.0 任意檔案上傳漏洞PHP
- 在 Linux 上安全傳輸檔案的 14 SCP 命令示例Linux
- 在java中使用SFTP協議安全的傳輸檔案JavaFTP協議
- 檔案上傳之WAF繞過及相安全防護
- gitHub_2 上傳專案程式碼Github
- Atom 微信小程式檔案程式碼高亮微信小程式
- sitemap 檔案填充示例程式碼
- bat檔案進度條程式碼BAT
- 根據api檔案生成程式碼API