一步一步學習DVWA滲透測試-(File Inclusion文件包含)-第八次課

File Inclusion,意思是文件包含(漏洞),是指當服務器開啓llow_url_include選項時,就可以通過php的某些特性函數(include(),require()和include_once(),require_once())利用url去動態包含文件,此時如果沒有對文件來源進行嚴格審查,就會導致任意文件讀取或者任意命令執行。

文件包含漏洞分爲本地文件包含漏洞與遠程文件包含漏洞,遠程文件包含漏洞是因爲開啓了php配置中的allow_url_fopen選項(選項開啓之後,服務器允許包含一個遠程的文件)。

如果打開File Inclusion,出現下面的信息,這需要修改配置文件

找到php.ini中的allow_url_include,如果原來爲off,設置爲On。

 

重新啓動服務,再次打開,顯示如下,則爲正常狀態。

 

1、Low 低級別

查看源代碼

 

可以看到沒有對頁面提交的文件做任何過濾檢查,url爲http://192.168.92.129/DVWA/vulnerabilities/fi/?page=file1.php

 

服務器期望用戶的操作是點擊下面的三個鏈接,服務器會包含相應的文件,並將結果返回。需要特別說明的是,服務器包含文件時,不管文件後綴是否是php,都會嘗試當做php文件執行,如果文件內容確爲php,則會正常執行並返回結果,如果不是,則會原封不動地打印文件內容,所以文件包含漏洞常常會導致任意文件讀取與任意命令執行。

漏洞利用

本地文件包含

構造http://192.168.92.129/DVWA/vulnerabilities/fi/?page=/etc/hack

 

沒有顯示任何信息,說明服務器操作系統不是Linux。

首先構造一個php1.php文件,內容如下,顯示php網站的相關信息,把該文件放在phpstudy的www路徑下。(在實際滲透測試中,可以通過先進行文件上傳滲透,上傳腳本文件成功後,再進行文件包含滲透)

<?php echo phpinfo();?>

構造URL,文件參數設置爲相對路徑

構造http://192.168.92.129/DVWA/vulnerabilities/fi/?page=..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\phpstudy_pro\WWW\DVWA\php1.php

顯示出相關信息

 

當然如果知道絕對路徑,也可以。

http://192.168.92.129/DVWA/vulnerabilities/fi/?page=c:\phpstudy_pro\WWW\DVWA\php1.php

 

2、Medium中級別

查看源代碼如下

<?php 

// The page we wish to display 
$file $_GET'page' ]; 

// Input validation 
$file str_replace( array( "http://""https://" ), ""$file ); 
$file str_replace( array( "../""..\"" ), ""$file ); 

?> 

可以看到要經過兩次替換,第一次把搜索到的http://和https://替換爲空字符串,第二次是把../和..\ "替換爲空字符(..\"可能是作者搞錯,應該爲..\,否則Low等級的payload照常執行,是否替換爲..)

使用str_replace函數是及其不安全的,因爲可以使用雙寫繞過替換規則。

漏洞利用

使用絕對路徑

http://192.168.92.129/DVWA/vulnerabilities/fi/?page=c:\phpstudy_pro\WWW\DVWA\php1.php

沒有替換,所以照常可以得到php信息。

使用相對路徑,可以使用url編碼(通過在線URL編碼)對page的參數值進行編碼

http://192.168.92.129/DVWA/vulnerabilities/fi/?page=..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5Cphpstudy_pro%5CWWW%5CDVWA%5Cphp1.php

可以照常獲取信息,因爲上面參數中也不會發生替換。

 

3、High 高級別

查看源代碼

vulnerabilities/fi/source/high.php

<?php 

// The page we wish to display 
$file $_GET'page' ]; 

// Input validation 
if( !fnmatch"file*"$file ) && $file != "include.php" ) { 
    
// This isn't the page we want! 
    
echo "ERROR: File not found!"
    exit; 


?>

分析:

可以看到,High級別的代碼使用了fnmatch函數檢查page參數,page參數的開頭必須是file,服務器纔會去接收相應的文件參數。

漏洞利用

High級別的代碼規定只能包含file開頭的文件,看似安全,不幸的是我們依然可以利用file協議繞過防護策略。file協議其實我們並不陌生,當我們用瀏覽器打開一個本地文件時,用的就是file協議,如下圖

例如,我們查看G盤下的11.log,使用瀏覽器或資源管理器可以打開下面文件。file:///G:/11.log

所以我們可以這樣構造payload

http://192.168.92.129/DVWA/vulnerabilities/fi/?page=file:///c:/phpstudy_pro/WWW/DVWA/php1.php

仍然可以看到看到了php相關信息。

 

4、Impossible 不可能級別

查看源代碼

<?php 

// The page we wish to display 
$file $_GET'page' ]; 

// Only allow include.php or file{1..3}.php 
if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) { 
    
// This isn't the page we want! 
    
echo "ERROR: File not found!"
    exit; 


?>

分析:

可以看到,Impossible級別的代碼使用了白名單機制進行防護,簡單粗暴,page參數必須“include.php”、“file1.php”、“file2.php”、“file3.php”之一,徹底杜絕了文件包含漏洞。

 

-------------------------------------------------------------------------------

關注安全   關注作者

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章