zoukankan      html  css  js  c++  java
  • 文件包含漏洞详解

    一、什么是文件包含漏洞

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

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

      在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才可以。

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

      

      

  • 相关阅读:
    ASP.Net GBK 解码
    windows默认共享的打开和关闭?
    NET导出Excel遇到的80070005错误的解决方法
    JavaScript(一)
    博客开通
    java知识学习05-数据类型、变量、标识符、类型转换
    java知识学习04-注释、关键字、常量
    java知识学习03-第一个程序
    【转】Git 冲突:Your local changes would be overwritten by merge. Commit, stash or revert them to proceed.
    idea如何在Git上将分支代码合并到主分支
  • 原文地址:https://www.cnblogs.com/zllovellyo/p/12733481.html
Copyright © 2011-2022 走看看