跳转至

File Inclusion

File Inclusion


文件包含

PHP为了提高代码复用性,提供了文件包含函数 include() , require(), require_once()和include_once(),被包含的文件内容会被当做代码来执行;即把重复使用的一段代码,单独写到一个文件里,再用文件包含函数来包含这个文件; 文件包含漏洞:为了灵活的包含文件,一些程序员会把文件名通过参数的形式传递给文件包含函数。当传递文件名的参数被用户修改时,用户就可以包含任意文件,而文件中的代码就会被服务器执行,这就造成了文件包含漏洞

文件包含函数

PHP提供了四个文件包含函数: 1)include() :当被包含的文件不存在时,会报错(Error),后面的代码不被执行; 2) include_once() :只包含一次,包含过的文件不会被重复包含; 3) require() :当被包含的文件不存在时,会告警(Wrainng),后面的代码可以继续执行; 4)require_once():只包含一次,包含过的文件不会被重复包含。 文件包含函数不关心文件的后缀名,它只是简单的执行被包含的文件,如果文件的内容是代码,就会执行代码;如果不是代码,就当做文本输出到页面;

<?php

// The page we wish to display
$file = $_GET[ 'page' ];

?>

本地文件包含

包含服务器本地的文件。

本地文件包含的payload通常以根目录(/)或文件名开头。也就是绝对路径和相对路径。

利用条件:配置文件开启fopen(allow_url_fopen=On) 用户可控参数,后台未过滤包含的文件。

远程文件包含

包含远端的文件。

远程文件包含的payload通常以 http:// 或 ftp:// 开头。

利用条件:配置文件开启 fopen 和 include(allow_url_include=On) 用户参数可控,且后台没有过滤包含的文件。