环境在这里下载,使用phpstudy搭建
我们来看到这个index.php,如下图所示,其中定义了fmodule变量与module变量,其中require_once语句表示将某个文件引入当前文件,在这个代码中,通过require_once引入了module.php,并且最后引入了module变量,这就是文件包含的入口,如果我们能控制module的值,就很可能存在文件包含漏洞

进入module.php分析源码

如图所示代码,如果我们传f m o d u l e不 为 7 然后对我们的module进行初始化赋值,这是我们没办法控制如果的,所以我们不能让这个程序进入这个条件,因此我们需要控制变量f m o d u l e 为 7 ,这样程序就不会对 fmodule为7,从而达到控制$module变量的值的目的。
payload
/about/index.php?fmodule=7&module=c:/windows/system32/drivers/etc/hosts

文件包含还有一个问题,如果还存在文件上传漏洞,那么甚至可以利用文件包含执行图片马,include会自动执行图片中的PHP语句

如图,这是一个图片马


文件包含的防御手段
尽量少的使用动态包含;
严格过滤被包含文件的路径;
将参数allow_url_include 设置为Off;
使用参数open_basedir 限定文件访问范围: