文件包含漏洞详解

一、什么是文件包含漏洞

  在了解这个漏洞之前我们先要理解什么是文件包含,文件包含的初衷是为了减少程序代码的冗余。

  试想一下,我在每一个代码文件中都要用到同一段代码,如果我把这段都要用到的代码转换成一个文件,让每一个用到它的代码都将其包含在里边,不就可以减少很多代码量,减少很多工作量了吗?

  在php中,包含一个文件有四种函数:

    include()、include_once()、require()、require_once()

  include()和include_once()的区别在于,include_once()只会引用同样的文件一次,为了避免函数和变量的重新定义,require和require_once()同理。

  include()函数包含的文件如果不存在,程序会发出警告,但是会继续运行。

  require()函数包含的文件如果不存在,程序会抛出异常,停止运行。

  在用这四个函数来包含文件的时候,不论文件类型为什么,其中的内容都会被当作php代码来解析  

  根据包含文件位置的不同,文件包含漏洞可以分为两类。远程文件包含(RFI)和本地文件包含(LFI)。

二、本地文件包含(LFI)  

   

   在https://www.zllovell.com/phpstudy/ 服务器目录下有一个zl.txt文件,内容如上图,当前目录还有一个test.php文件内容如下

  

  这时候我们访问https://www.zllovell.com/phpstudy/test.php?file=zl.txt,结果如下

  

  这就是本地文件包含漏洞,可以读取服务器本地的文件。

三、远程文件包含(RFI)

  RFI的利用条件较为苛刻,需要php.ini配置文件中allow_url_fopen与allow_url_include都为on才可以。

  但是远程文件包含意味着包含的文件内容是我们完全可控的,不是来自服务器端的文件,所以一旦服务器存在远程文件包含漏洞会造成的危害极大。

  

  

原文地址:https://www.cnblogs.com/zllovellyo/p/12733481.html