一.定义:
为了更好的使用代码的重用性,引入了文件包含函数,可以通过文件包含函数将文件包含进来,直接使用包含文件的代码
二.产生原因:
在文件包含时候,为了灵活包含文件,将包含文件设置为变量,通过动态变量来引入需要包含的文件时,用户可以对变量的值可控而服务器端未对变量值进行合理地校验或者校验被绕过,这样就导致了文件包含漏洞。
<?php
$file=$_GET['file'];
include($file)
三.文件包含函数
include() //代码错误只生成警告(E_WARNING),并且脚本会继续
include_once()//包含一次
require()//代码错误生成致命错误(E_COMPILE_ERROR)并停止脚本
require_once() //包含一次
四.文件包含漏洞分类
1.本地文件包含
2.远程文件包含
php配置:
allow_url_fopen : 可以读取远程文件包含
allow_url_include: 可以使用include require
五.php伪协议
http://127.0.0.1/index.php?file=php://filter/read=convert.base64-encode/resource=phpinfo.txt
http://127.0.0.1/index.php?file=zip://phpinfo.zip%23phpinfo.txt
六.其他利用方式:
1.00截断
2.长度截断(win:256 ,Linux:4096)
3.包含日志
4.包含session
七.文件包含防御:
1.php中使用open_basedir 配置文件限制访问在指定的区域
2.过滤点, 斜杠,反斜杠
3.禁止服务器远程文件包含
4.尽量不要使用动态包含,可以在需要包含的页面固定写好