程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这种文件调用的过程一般被成为文件包含。其中PHP的文件包含是通过include()、require()、include_once()和require_once()四个函数实现的。
函 数 | 包含失败 | 特点 |
---|---|---|
include() | 返回一条警告 | 报错也会继续运行 |
require() | 强行中断 | 代码在报错处不再运行 |
include_once() | 返回一条警告 | 除了原有include()功能,还会做once检测,如果文件曾经已经被包含过,不在包含 |
require_once() | 强行中断 | 除了原有require()功能,还会做once检测,防止文件反复包含 |
当利用这四个函数来包含文件时,不管文件是什么类型(图片、txt等等),都会直接作为php文件进行解析。在本题的PHP代码中即可看到include函数
因为文件路径可控,当输入系统的密码文件所在路径时,内容会输出出来
在url后构造
?file=/flag
加入一个不存在的目录名,然后利用../返回上级目录继续操作即可。