文件包含

文件包含

一,概述

程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这种文件调用的过程一般被成为文件包含。其中PHP的文件包含是通过include()、require()、include_once()和require_once()四个函数实现的。

函 数 包含失败 特点
include() 返回一条警告 报错也会继续运行
require() 强行中断 代码在报错处不再运行
include_once() 返回一条警告 除了原有include()功能,还会做once检测,如果文件曾经已经被包含过,不在包含
require_once() 强行中断 除了原有require()功能,还会做once检测,防止文件反复包含

任意文件读取

image.png

image.png

例题:buuctf: BUU LFI COURSE 1

当利用这四个函数来包含文件时,不管文件是什么类型(图片、txt等等),都会直接作为php文件进行解析。在本题的PHP代码中即可看到include函数
因为文件路径可控,当输入系统的密码文件所在路径时,内容会输出出来
在url后构造

?file=/flag

image.png

还可以加一些不存在的目录名,进行穿越、绕过

加入一个不存在的目录名,然后利用../返回上级目录继续操作即可。


image.png

通过php://查看源代码

php://

php:data://