File Inclusion
前言
我觉得还是先介绍下,因为涉及到php函数,自己不会 世界最好的语言 ,所以引用他人的优秀的博客来装饰下我这简陋的博客
文件包含漏洞:即File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到自己的目的。
文件包含分为两类:
本地文件包含 当被包含的文件在服务器本地时,就形成本地文件包含;
远程文件包含 当被包含的文件在第三方服务器时,叫做远程文件包含
该漏洞涉及到php常见包含文件函数包括:
include()
当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行
include_once()
功能和include()相同,区别在于当重复调用同一文件时,程序只调用一次
require()
require()与include()的区别在于require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行 。使用require()函数包含文件时,只要程序一执行,立即调用文件,而include()只有程序执行到函数时才调用 .require()在php程序执行前执行,会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。
require_once()
它的功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次
我来说下我对上面的理解吧,php后端,要想执行文件包含这骚操作,allow_url_include必须开启,然后利用上面提到的4个函数,这些函数对文件不会检测(检测也不该由这些函数来做),所以我们能将我们想要用的文件名交给它解析就很好了,来获取我们需要的信息(感觉和溢出有点像啊,也是一些东西没做检测,然后攻击者通过构造payload来让目标执行指定的文件从而实现攻击)。
然后远程执行就是allow_url_fopen也