文件包含-DVWA练习

文件包含-DVWA练习

一.前言

首先,我们需要大概知道文件包含是什么,可能会产生哪些漏洞,如何利用这些漏洞
看相关文章文件包含讲解
环境:win10+phpstudy

二.DVWA文件包含

准备工作:将php.ini文件中的allow_url_include以及allow_url_fopen都设置为On,否则无法进行接下来的练习
文件包含-DVWA练习_第1张图片

1.low等级

我们将等级设置为low等级,url输入http://localhost/DVWA/vulnerabilities/view_source.php?id=fi&security=low
我们就可以看到low等级的源代码
文件包含-DVWA练习_第2张图片
可以看到,毫无安全过滤
$file=$_GET['page]
DVWA上面给了三个文件,分别是file1,2,3
文件包含-DVWA练习_第3张图片
当我们点击它们的时候,可以看到url为http://localhost/DVWA/vulnerabilities/fi/?page=file1.php
文件包含-DVWA练习_第4张图片
前面说过,low等级是毫无安全过滤的,这意味着,我们可以在page=
后面放上各种文件位置,去进行读取

(如果是读取不存在的文件或者错误路径的文件,就会发生下面的情况)
在这里插入图片描述

我们读取一个正确路径的文件吧(我读取的是phpinfo)
http://localhost/DVWA/vulnerabilities/fi/?page=D:\phpstudy_pro\WWW\php.txt

文件包含-DVWA练习_第5张图片
那么,这有什么意义:这意味着,如果对方没有对文件包含进行安全过滤,那么攻击者就可以乘机而入,了解到一些不是自身权限内的信息
(DVWA网站只希望我们读取file1,2,3,而不让使用者读取别的文件,但是由于文件包含未进行安全过滤,我们可以读取c盘以及各个盘中的文件)

2.medium等级

我们将等级设置为medium等级,url输入http://localhost/DVWA/vulnerabilities/view_source.php?id=fi&security=medium
我们就可以看到medium等级的源代码
文件包含-DVWA练习_第6张图片
很显然,medium等级进行了非常简单的过滤
$file = str_replace( array( "http://", "https://" ), "", $file );

$file = str_replace( array( "../", "..\\" ), "", $file );
这段代码的意思是将"http://", “https://” “…/”, “…\” 全部替换为空字符
但这种替换仍然不安全,因为str_replace只能替换一次

输入http://localhost/DVWA/vulnerabilities/fi/?page=http://localhost/php.txt
文件包含-DVWA练习_第7张图片
显示错误
url输入http://localhost/DVWA/vulnerabilities/fi/?page=hthttp://tp://localhost//php.txt
进行绕过就可以了
文件包含-DVWA练习_第8张图片

3.high等级

我们将等级设置为high等级,url输入http://localhost/DVWA/vulnerabilities/view_source.php?id=fi&security=high
我们就可以看到high等级的源代码
文件包含-DVWA练习_第9张图片
if( !fnmatch( "file*", $file ) && $file != "include.php" )
这个的意思是确保page=后的路径必须以file开头或者是include.php
我们可以利用file协议绕过
url输入http://localhost/DVWA/vulnerabilities/fi/page=file://D:\phpstudy_pro\WWW\php.txt
文件包含-DVWA练习_第10张图片
仍然成功了

4.impossible等级

我们将等级设置为impossible等级,url输入http://localhost/DVWA/vulnerabilities/view_source.php?id=fi&security=impossible
我们就可以看到impossible等级的源代码
文件包含-DVWA练习_第11张图片
if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" )
设置了白名单,无法绕过

到此为止,我们就练习完了

你可能感兴趣的:(web安全,安全,php)