file inclusion,意思是檔案包含(漏洞),是指當伺服器開啟allow_url_include選項時,就可以通過php的某些特性函式(include(),require()和include_once(),require_once())利用url去動態包含檔案,此時如果沒有對檔案**進行嚴格審查,就會導致任意檔案讀取或者任意命令執行。
檔案包含漏洞分為本地檔案包含漏洞與遠端檔案包含漏洞,遠端檔案包含漏洞是因為開啟了php配置中的allow_url_fopen選項(選項開啟之後,伺服器允許包含乙個遠端的檔案)。
檔案包含時,不管包含的檔案是什麼型別,都會優先嘗試當作php檔案執行,如果檔案內容有php**,則會執行php**並返回**執行的結果,如果檔案內容沒有php**,則把檔案內容列印出來
low漏洞利用
1.本地檔案包含
構造url:
報錯,顯示沒有這個檔案,說明不是伺服器系統不是linux,但同時暴露了伺服器檔案的絕對路徑為e:\phpstudy2019_64\phpstudy_pro\www
構造url(絕對路徑):
成功讀取了伺服器的php.ini檔案
構造url(相對路徑);
加這麼多..\是為了保證到達伺服器的c盤根目錄,可以看到讀取是成功的。(我這裡相對路徑不在同一碟符,只能用絕對路徑)
同時我們看到,配置檔案中的magic_quote_gpc選項為off。在php版本小於5.3.4的伺服器中,當magic_quote_gpc選項為off時,我們可以在檔名中使用%00進行截斷,也就是說檔名中%00後的內容不會被識別,即下面兩個url是完全等效的。
a)b)%0012.php
使用%00截斷可以繞過某些過濾規則,例如要求page引數的字尾必須為php,這時鏈結a會讀取失敗,而鏈結b可以繞過規則成功讀取。
2.遠端檔案包含
當伺服器的php配置中,選項allow_url_fopen與allow_url_include為開啟狀態時,伺服器會允許包含遠端伺服器上的檔案,如果對檔案**沒有檢查的話,就容易導致任意遠端**執行。
在遠端伺服器192.168.0.104上傳乙個testphpinfo.txt檔案,內容如下
構造url:
為了增加隱蔽性,可以對進行編碼
medium
可以看到,medium級別的**增加了str_replace函式,對page引數進行了一定的處理,將」http:// 」、」https://」、 」 ../」、」..\」替換為空字元,即刪除。
漏洞利用
使用str_replace函式是極其不安全的,因為可以使用雙寫繞過替換規則。
例如page=hthttp://tp:時,str_replace函式會將http://刪除,於是page=成功執行遠端命令。
同時,因為替換的只是「../」、「..\」,所以對採用絕對路徑的方式包含檔案是不會受到任何限制的。
1.本地檔案包含
讀取配置檔案成功
絕對路徑不受任何影響,讀取成功
2.遠端檔案包含
遠端執行命令成功
經過編碼後的url不能繞過替換規則,因為解碼是在瀏覽器端完成的,傳送過去的page引數依然是因此讀取失敗。
high
可以看到,high級別的**使用了fnmatch函式檢查page引數,要求page引數的開頭必須是file,伺服器才會去包含相應的檔案。
漏洞利用
high級別的**規定只能包含file開頭的檔案,看似安全,不幸的是我們依然可以利用file協議繞過防護策略。file協議其實我們並不陌生,當我們用瀏覽器開啟乙個本地檔案時,用的就是file協議,如下圖。
至於執行任意命令,需要配合檔案上傳漏洞利用。首先需要上傳乙個內容為php的檔案,然後再利用file協議去包含上傳檔案(需要知道上傳檔案的絕對路徑),從而實現任意命令執行。
impossible
可以看到,impossible級別的**使用了白名單機制進行防護,簡單粗暴,page引數必須為「include.php」、「file1.php」、「file2.php」、「file3.php」之一,徹底杜絕了檔案包含漏洞。
本文僅是個人學習記錄,部分摘自freebuf.com等。
DVWA之 File Inclusion 檔案包含
file inclusion,意思是檔案包含 漏洞 是指當伺服器開啟allow url include選項時,就可以通過php的某些特性函式 include require 和include once require once 利用url去動態包含檔案,此時如果沒有對檔案 進行嚴格審查,就會導致任意...
File Inclusion學習過程
allow url include off allow url fopen off 相對路徑包含 1.php 絕對路徑包含 任意檔案讀取 allow url include on allow url fopen on 可以訪問 不可以訪問 allow url include off allow ur...
檔案 標頭檔案 原始檔(C )
標頭檔案和原始檔中的函式宣告與定義 函式原型 file fsopen const char filename,const char mode,int shflag file wfsopen const wchar t filename,const wchar t mode,int shflag 注 ...