DVWA各级文件包含漏洞

File Inclusion文件包含漏洞

  1. 漏洞分析
  1. 文件包含函数
  • require() 找不到被包含的文件时会产生致命错误,并停止脚本运行
  • include() 找不到被包含的文件时只会产生警告,脚本将继续运行
  • include_once()与include()类似 ,唯一区别时如果该文件中代码已经被包含,则不会再次包含
  • require_one()与require()类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含

Level:low

<?php 

// The page we wish to display 
$file = $_GET[ 'page' ]; 

漏洞分析

low级别没有进行任何过滤;

  • 第一步:构造url
    127.0.0.1/dvwa/vulnerabilities/fi/?page=/etc/shadow
    报错,显示没有这个文件,说明不是服务器系统不是Linux,但同时暴露了服务器文件的绝对路径

D:\Phpstudy\PHPTutorial\WWW\dvwa

  • 第二步:通过绝对路径读取服务器的php.ini

其中'allow_url_fopen = on allow_url_include = on ' 文件包含都是打开的
可以通过..\保证到达服务器的C盘根目录

配置文件中的Magic_quote_gpc选项为off。在php版本小于5.3.4的服务器中,当Magic_quote_gpc选项为off时,我们可以在文件名中使用%00进行截断,也就是说文件名中%00后的内容不会被识别,即下面两个url是完全等效的。
使用%00截断可以绕过某些过滤规则,例如要求page参数的后缀必须为php,这时链接A会读取失败,而链接B可以绕过规则成功读取

Level: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://”、 ” ../”、”..\”替换为空字符,即删除

  • Sre_replace(函数)及其不安全,可以使用双写绕过替换规则
    例如:page=hthttp://127.0.0.1/phpinfo.txt时,str_replace函数会将http://删除变成http://127.0.0.1/phpinfo成功执行
    同时,因为替换的只是“../”、“..\”,所以对采用绝对路径的方式包含文件是不会受到任何限制的。

Level: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协议绕过防护策略。

构造url

什么时file协议

字面意思:本地文件传输协议
 
什么是File:
file协议主要用于访问本地计算机中的文件,好比通过Windows的资源管理器中打开文件或者通过右键单击‘打开’一样
file协议的基本格式如下:

file:///文件路径

file协议与http协议的区别

file协议与http协议的区别

Level: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;
}
>

漏洞分析

Impossible级别的代码使用了白名单机制进行防护,简单粗暴,page参数必须为“include.php”、“file1.php”、“file2.php”、“file3.php”之一,彻底杜绝了文件包含漏洞。

posted @ 2020-12-08 13:58  A2rcher_zjh  阅读(165)  评论(0编辑  收藏  举报