关于文件包含漏洞,我觉得和ssrf漏洞有点儿像,ssrf漏洞是通过curl()函数获取信息但是没有进行过滤,从而访问到内网造成危害,文件包含漏洞则是通过include()函数获取文件,攻击者输入敏感文件导致敏感文件也被输出从而产生危害。
原理
开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程一般被称为包含。
为了使代码更加灵活,通常会将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。
PHP中提供了四种文件包含函数:
include()//只有程序执行到include()函数时,才包含文件,发生错误代码也继续向下执行
include_once()//与include()相同,但是重复调用同一个文件时,程序只调用一次
require()//与include()区别在于包含文件如果发生错误,程序则终止执行
require_once()//与include_once和include的区别相同
文件包含类型
本地文件包含
当本地存在敏感文件时,包含本地的文件,就是本地文件包含(就是字面意思)
例如下面有一个含有文件包含的PHP文件
<?php
$file=_GET['file'];
if(isset($file)){
include