檔案上傳
原理
上傳檔案對各大網站基本屬于必備功能,如上傳頭像,上傳簡歷,上傳檔案,但是一旦未對檔案進行校驗,或檢驗、過濾的不嚴格,惡意用戶即可繞過網站的檢測上傳惡意檔案,一旦上傳的是木馬檔案并被服務器決議,惡意用戶即可拿到網站的webshell,
分類
根據upload-labs的總結,上傳漏洞可分為如下幾種:
客戶端:
Js檢查
使用圖片馬
修改webshell后綴名并用bp截斷修改回后綴名并完成上傳
服務器端:
檢查后綴
黑名單
上傳特殊可決議后綴
上傳.htaccess
后綴大小寫繞過
后綴名雙寫繞過
點繞過
::$DATA繞過
空格繞過
雙寫繞過
配合決議漏洞繞過
Apache換行決議漏洞,Apache陌生后綴名決議漏洞,Nginx任意決議漏洞,ISS6.*版本決議漏洞,ISS7.*版本決議漏洞,
Nginx空位元組任意代碼執行漏洞
Nginx檔案名邏輯漏洞
白名單
MIME繞過
%00截斷
0x00截斷
檢查內容
檔案頭檢查
圖片馬
二次渲染
突破getimagesize()
突破exif_imagetype()
代碼邏輯
條件競爭
防護:
1、對上傳的檔案,回傳資料包時隱藏上傳檔案的路徑
2、服務器端的安全過濾,對上傳檔案的型別、以及后綴名進行嚴格的把控
3、上傳型別進行安全限制,JS前端以及后端一起做雙層的安全限制,對檔案的擴展名安全檢測,MIME檔案型別安全檢測,上傳的檔案大小限制
4、對上傳的目錄進行檔案夾安全限制,去掉目錄的腳本執行權限,只有普通jpg圖片等運行,以及讀寫權限
檔案包含
原理:
服務器執行PHP檔案時,可以通過檔案包含函式加載另一個檔案中的PHP代碼,并且當PHP來執行,這會為開發者節省大量的時間,這意味著您可以創建供所有網頁參考的標準頁眉或選單檔案,當頁眉需要更新時,您只更新一個包含檔案就可以了,或者當您向網站添加一張新頁面時,僅僅需要修改一下選單檔案(而不是更新所有網頁中的鏈接),
檔案包含函式加載的引數沒有經過過濾或者嚴格的定義,可以被用戶控制,包含其他惡意檔案,導致了執行了非預期的代碼,
<?php
$filename = $_GET['filename'];
include($filename);
?>
分類:
本地包含漏洞(LFI)
無限制本地包含漏洞
Session檔案包含漏洞
利用條件:session的存盤位置可以獲取,可通過phpinfo資訊或猜測默認存放位置嘗試,
漏洞利用:session中的內容可以被控制,傳入惡意代碼,通過本地包含漏洞即可決議惡意代碼getshell,
有限制本地包含漏洞
%00截斷
路徑長度截斷
點號截斷
遠程包含漏洞(RFI)
PHP的組態檔allow_url_fopen和allow_url_include設定為ON,include/require等包含函式可以加載遠程檔案,如果遠程檔案沒經過嚴格的過濾,導致了執行惡意檔案的代碼,這就是遠程檔案包含漏洞,
allow_url_fopen = On(是否允許打開遠程檔案)
allow_url_include = On(是否允許include/require遠程檔案)
無限制遠程檔案包含漏洞
有限制遠程檔案包含漏洞
問號繞過
#繞過
空格繞過
PHP偽協議
PHP 帶有很多內置 URL 風格的封裝協議,可用于類似 fopen()、 copy()、 file_exists() 和 filesize() 的檔案系統函式, 除了這些封裝協議,還能通過 stream_wrapper_register() 來注冊自定義的封裝協議,
可以使用 "php://filter"偽協議" 來進行包含,當它與包含函式結合時,php://filter流會被當作php檔案執行,若對其進行編碼,阻止其不執行,即可導致任意檔案讀取,
?file=php://filter/read=convert.base64-encode/resource=a.php
防護
1.嚴格判斷包含中的引數是否外部可控,
2.路徑限制,限制被包含的檔案只能在某一個檔案夾內,特別是一定要禁止目錄跳轉字符,如:“../”,
3.基于白名單的包含檔案驗證,驗證被包含的檔案是否在白名單中,
4.盡量不要使用動態包含,可以在需要包含的頁面固定寫好,如:“include("head.php")”,
5.可以通過呼叫str_replace()函式實作相關敏感字符的過濾,一定程度上防御了遠程檔案包含,
檔案下載
原理:
網站對下載的檔案沒有做限制,直接通過絕對路徑對其檔案進行下載,那么,惡意用戶就可以利用這種方式下載服務器的敏感檔案,對服務器進行進一步的威脅和攻擊,
危害:
通過任意檔案下載,可以下載服務器的任意檔案,web業務的代碼,服務器和系統的具體配置資訊,也可以下載資料庫的配置資訊,以及對內網的資訊探測等等,
防范:
限制../符號的使用,檔案下載時判斷輸入的路徑,最好的方法是檔案應該在資料庫中進行一一對應,避免通過輸入絕對路徑來獲取檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/290794.html
標籤:其他
