文件包含
开发人员将相同的函数写入单独的文件中,需要使用某个函数时直接调用此文件,无需再次编写,这种文件调用的过程称文件包含。
文件包含漏洞
开发人员为了使代码更灵活,会将被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以恶意调用一个恶意文件,造成文件包含漏洞。
几乎所有脚本语言都会提供文件包含的功能,但文件包含漏洞在PHP Web Application中居多。
文件包含分类
1.本地文件包含
包含服务器本身存在的恶意文件
a.txt
include.php
<?php
$b=$_GET['id'];
include($b);
?>
注:
两个文件在同一目录下(若不在同一目录这被包含的文件路径必须写绝对路径或相对路径)
被包含的页面的后缀无论是什么都会当做PHP解析
2.远程文件包含
包含其他网站上的恶意文件
远程包含的文件路径必须是绝对路径
远程文件包含利用条件:
在php.ini中allow_url_fopen=on、allow_url_include=on
localhost/b.php?id=http://ip/文件路径
PHP文件包含函数
include()
使用此函数,只有代码执行到此函数时才将文件包含进来,发生错误时只警告并继续执行。
inclue_once()
功能和前者一样,区别在于当重复调用同一文件时,程序只调用一次。
require()
使用此函数,只要程序执行,立即调用此函数包含文件,发生错误时,会输出错误信息并立即终止程序。
require_once()
功能和前者一样,区别在于当重复调用同一文件时,程序只调用一次。