DVWA练习之File Inclusion

DVWA练习之File Inclusion

本博客将记录在web安全问题中一种常见的漏洞——“文件包含”漏洞的实践演练。首先阐述文件漏洞的概念,原理,最后展示基于DVWA的各种等级的文件包含漏洞。


文件包含

概念:指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数,利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。

函数功能
include()会将指定的文件读入并且执行里面的程序
require()会将目标文件的内容读入,并且把自己本身代换成这些读入的内容
include_once()和 include 语句完全相同,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次
require_once()和 require 语句完全相同,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次

DVWA文件包含

DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。

部署好DVWA后,登陆DVWA首先选择练习的难度等级。DVWA中共分为四种安全级别:Low,Medium,High,Impossible。然后选择练习的模块,这里我们选择File Inclusion(文件包含)模块。


Low等级

这里写图片描述
选好等级后,进入File Inclusion(文件包含)模块。
这里写图片描述
首先进行正常操作。分别点击file1.php,file2.php和file.php这三个按键。
这里写图片描述
这里写图片描述
这里写图片描述
发现3个页面除了文件的内容不同外,最大的不同就是url中page的参数不同。page的参数分别是file1.php,file2.php,file3.php。因此这就是我们可以利用的地方。
我们尝试修改一下page的参数为test.php。
这里写图片描述
结果显示报错,提示没有找到此文件,但是暴露了web的绝对路径!
(1)本地文件读取
构造URL:http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=../../php.ini发现成功读取php.ini文件的内容。
这里写图片描述
或者利用绝对路径构造URL:http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=D:/phpStudy/WWW/DVWA-1.9/php.ini也可以成功读取php.ini文件。
这里写图片描述
我们在构造URL:http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=D:/phpStudy/WWW/DVWA-1.9/phpinfo.php同样执行成功,表明文件包含不仅可以读取文件还可以执行文件。
这里写图片描述
(2)远程文件包含
在127.0.0.1中加入文件phpinfo.txt内容如下。
这里写图片描述
构造URL:http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=http://127.0.0.1/phpinfo.txt远程读取文件成功!
这里写图片描述
之所以使用txt文件,是因为txt格式文件执行的服务器是受害者服务器而php格式执行的服务器是攻击者的服务器!因此txt格式的文件才是正解!


Medium等级

(1)本地文件
我们仍然使用Low等级的方法尝试,发现结果如下。
这里写图片描述
读取本地文件失败,且报错信息为include(php.ini)。也就是说代码对我们输入的page的参数进行了过滤!
我们依次尝试寻找真正过滤的字符串。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
发现输入.\phpini和.php.ini以及\php.ini报错都正常,而..\php.ini报错为php.ini其中..\被过滤掉了。
因此可以发现过滤字符串为../ !
我们查看服务器代码验证一下。


<?php 

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

// Input validation 
$file = str_replace( array( "http://", "https://" ), "", $file ); 
$file = str_replace( array( "../", "..\"" ), "", $file ); 

?> 

发现Medium级别的代码增加了str_replace函数,对page参数进行了一定的处理,将”http:// ”、”https://”、 ” ../”、”..\”替换为空字符。
因此我们使用绝对路径的方法读取本地文件,构造URL:http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=D:/phpStudy/WWW/DVWA-1.9/php.ini读取成功!
这里写图片描述

(2)远程文件
依然是上述的不断尝试的过程,确认服务器过滤的内容。这里已知过滤内容为”http:// ”、”https://”、 ” ../”、”..\”。
因此我们可以使用:httphttp://://来跳过过滤!服务器会过滤掉中间的http://而保留余下的内容,而剩下的刚好又凑成了一个新的http://!
因此我们构造URL:http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=httphttp://://127.0.0.1/phpinfo.txt读取远程文件成功!
这里写图片描述


High等级

(1)本地文件
我们尝试Low和Medium等级的方法都失败,而且返回错误信息也有所不同。
这里写图片描述
那我们还是根据正确的方法进行尝试。我们分别尝试1file.php和fiel111.php作为page的参数分别为
这里写图片描述
这里写图片描述
发现file开头的file111其报错结果与之前的相同,因此猜测high等级设置了白名单规定page参数必须以file开头。
我们查看服务器源代码验证。


<?php 

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

// Input validation 
if( !fnmatch( "file*", $file ) && $file != "include.php" ) { 
    // This isn't the page we want! 
    echo "ERROR: File not found!"; 
    exit; 
} 

?> 

发现High级别的代码使用了fnmatch函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件。
不过看似安全,但是系统有一个为该漏洞量身定做的协议,file协议。file://协议可以用来访问本地计算机中的文件。
因此我们构造URL:http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=file://D:/phpStudy/WWW/DVWA-1.9/php.ini发现读取文件成功!
这里写图片描述

(2)远程文件
Low和Medium等级的方法均失效,而file协议又只能打开本地文件。因此需要配合文件上传漏洞来实现远程文件的执行。


Impossible等级

我们直接查看服务器源代码:


<?php 

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

// Only allow include.php or file{1..3}.php 
if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) { 
    // This isn't the page we want! 
    echo "ERROR: File not found!"; 
    exit; 
} 

?> 

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值