下面我們來分析一下DVWA中文件包含漏洞的源碼。
成都創(chuàng)新互聯(lián)是專業(yè)的淶源網(wǎng)站建設(shè)公司,淶源接單;提供成都網(wǎng)站制作、做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行淶源網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!首先文件包含的主頁面是D:\AppServ\www\dvwa\vulnerabilities\fi\index.php文件,文件中的主要代碼部分:
在這段代碼中,首先使用switch語句根據(jù)用戶選擇的安全級別,分別將low.php、medium.php、high.php賦值給變量$vulnerabilityFile,接下來使用require_once函數(shù)來包含用戶所選擇的頁面,最后用include函數(shù)來包含變量$file。
變量$file正是來自于low.php、medium.php、high.php。
在low.php中,以GET方式獲取用戶通過page參數(shù)傳來的數(shù)據(jù),并賦值給變量$file,可以看到這里對page參數(shù)沒有進行任何的過濾處理。
在medium.php中,通過str_replace()函數(shù)將用戶傳來的數(shù)據(jù)進行了替換,主要是將http://和https://都替換成了空,這里主要是為了防止遠程文件包含。
我們之前所使用的文件包含都是包含目標服務(wù)器上的本地文件,因而稱為本地文件包含LFI,其實也可以包含遠程服務(wù)器上的文件,比如http://127.0.0.1/dvwa/vulnerabilities/fi/?page=php://192.168.80.132/info.php,這稱為遠程文件包含RFI。很明顯RFI的威力更強,但要能實施RFI的前提是要保證PHP中的兩項參數(shù)allow_url_fopen和 allow_url_include處于開啟狀態(tài),這兩項參數(shù)默認狀態(tài)下都是關(guān)閉的,因而RFI多半是執(zhí)行不了。據(jù)說可以通過“zlib://”和“ogg://”等方式繞過,但是我目前還沒有查找到相關(guān)資料,也沒有驗證,這個問題就暫且擱置吧。
總之,medium對LFI沒有任何的影響,因而之前所使用的文件包含操作都可以執(zhí)行。
最后看下high.php,這里用if語句來判斷用戶輸入的數(shù)據(jù)是否是inlude.php,如果不是則直接報錯退出,其實也就是指定了只允許包含include.php文件。這是最為安全的一種防御措施,當然實踐中可能會有多個文件需要用戶來選擇,那么也只需要多進行幾次判斷即可。經(jīng)過這樣的設(shè)計,也就不存在文件包含漏洞了。
文件包含漏洞挖掘的思路跟之前一樣,仍是搜索include()、include_once()、require()和require_once()這些函數(shù),并且觀察這些函數(shù)所包含的內(nèi)容是否可以由用戶控制,并是否采取了防御措施。
比如在下面這段代碼中,include_once()函數(shù)中包含了變量$lang,而這個變量可以由用戶輸入且沒有經(jīng)過任何的處理,因而這里就產(chǎn)生了文件包含漏洞。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。