1.什麼是檔案包含?
為了更好的使用**的重用性,引入了檔案包含函式,可以通過檔案包含函式將檔案包含進來, 直接使用包含檔案的**。
2.什麼是檔案包含漏洞?
在包含檔案時候,為了靈活包含檔案,將被包含檔案設定為變數,通過動態變數來引入需要包含的檔案時,使用者可以對變數的值可控而伺服器端未對變數值進行合理地校驗或者校驗被繞過,這樣就導致了檔案包含漏洞。通常檔案包含漏洞出現在php語言中。
<?php
$file
=$_get
['file'];
//從get方法裡獲取引數file的值,將它賦值給定義的變數file
include
($file):
//呼叫include函式去檢視變數file對應的檔案的內容
3.函式
這裡的函式說的是php中的函式。
1.檔案包含函式:
include() 、include_once()、require()、require_once():包含並執行指定檔案。
include和require的區別:
兩者在包含檔案的結構上完全一樣,唯一的區別是對於錯誤的處理。
當在遇到包含檔案不存在,或是出錯的時候,include會繼續向下執行,而require會立即停止執行,並報錯。
once的作用:
在指令碼執行期間同乙個檔案有可能被包含超過一次的情況下,使用once就的話就只會包含一次,以避免函式重定義、變數重新賦值等問題。
2.檔案讀取函式:
highlight_file、show_source:讀取檔案並進行語法高亮顯示。
readfile:讀入乙個檔案並寫入到輸出緩衝。
file_get_contents:將檔案的內容讀入到乙個字串中,可以讀取遠端檔案。
fopen() :開啟檔案或者 url。
file() :把整個檔案讀入乙個陣列中。
4.檔案包含漏洞分類
1.本地檔案包含
2.遠端檔案包含(允許將url (如http: //或ftp: //)作為檔案處理)
在php.ini配置檔案中有兩個設定與檔案包含漏洞有關,需要了解一下:
注意:從php5.2開始allow_url_include就預設為off了,而allow_url_fopen直是on的。
1.偽協議
在php中經常使用偽協議進行檔案包含。
1.file://:讀取本地檔案,後面可以跟絕對路徑和相對路徑。
2.php://filter:是一種元封裝器, 設計用於資料流開啟時的篩選過濾應用。
2.php://input:可以訪問請求的原始資料的唯讀流,將post請求的資料當作php**執行。
3.zip://:想要訪問壓縮包裡的檔案,檔名前必須用「#」而不是「/」。
4.compress.bzip2://、compress.zlib://:都是讀取壓縮包的,它們有兩種語法,一種是相對路徑、一種是絕對路徑。
5.data:// 同樣類似與php://input,可以讓使用者來控制輸入流。
6.phar://:解壓縮包的乙個函式,不管字尾是什麼,都會當做壓縮包來解壓。
2.繞過方式
1.00截斷:
windows在讀檔名時,當遇到ascii碼0時會判斷為讀取結束,會自動停止對後面內容的讀取。
在url中的形式是%00,在十六進製制中是0x00。
2.長度截斷:
也是利用作業系統對檔名讀取的特性進行繞過。
windows最大讀取長度:256;
linux最大讀取長度:4096。
3.包含日誌檔案:
我們使用瀏覽器對url請求時都會儲存在日誌裡,如果我們在請求位址裡寫上一句話木馬,那麼當我們請求的時候就會把這個一句話木馬寫入日誌檔案。
如果我們知道日誌檔案的路徑,那我們就可以包含這個日誌檔案,從而獲得webshell。
4.包含session:
用法和包含日誌差不多,往session裡寫入一句話木馬,然後知道session路徑以後就可以做檔案包含。
1.php 中使用 open_basedir 配置限制訪問在指定的區域
2.過濾.(點)/(反斜槓)\(反斜槓)
3.禁止伺服器遠端檔案包含
4.盡量不要使用動態包含,可以在需要包含的頁面固定寫好
漏洞之檔案包含漏洞
在專案中為了更好地使用 的重用性,引入了檔案包含函式,可以通過檔案包含函式將檔案包含進來,直接使用包含檔案的 完成類似python中的import功能。在包含檔案時候,為了靈活包含檔案,將被包含檔案設定為變數,通過動態變數來引入需要包含的檔案時,使用者可以對變數的值可控而伺服器端未對變數值進行合理地...
資料通訊理論知識1
通訊就是將資訊從源地傳送到目的地。資訊是通過通訊系統傳遞的內容。模擬訊號 是在一段連續的時間間隔內,其代表資訊的特徵量可以在任意瞬間呈現為任意數值的訊號。數碼訊號 是資訊用若干個明確定義的離散值表示的時間離散訊號。傳送訊號的通路叫做通道 傳輸模擬訊號的通道叫做模擬通道 傳輸數碼訊號的通道叫做數字通道...
pikachu之檔案包含漏洞
在web後台開發中,程式設計師往往為了提高效率以及讓 看起來更加簡潔,會使用 包含 函式功能。比如把一系列功能函式都寫進fuction.php中,之後當某個檔案需要呼叫的時候就直接在檔案頭中寫上一句就可以呼叫函式 檔案包含漏洞 有時候因為 需求,會讓前端使用者選擇需要包含的檔案 或者在前端的功能中使...