一、原理解析
文件包含漏洞的产生是由于在引入文件时,对传入的文件名没有做限制或者限制被绕过,从而造成攻击者进行任意文件包含;
注意:包含的文件都会被当作脚本文件进行解析!!(即使是jpg文件,例如图片马也会被当作脚本文件执行,故里面的一句话木马就会被执行)
文件包含本身是一个功能点,任意文件包含才是一种漏洞
文件包含类别:本地文件包含和远程文件包含(即包含的文件所在的位置,后者文件是在远程服务器上)
其中远程文件包含在php配置文件中开启两个参数:
1)allow_url_fopen=On(默认为On):规定是否从远程服务器或者网站检索数据
2)allow_url_include=On(php5.2之后默认为Off):规定是否允许include/require远程文件
二、函数解析
include:当引用的文件出错时,系统弹警告但不影响后续的代码执行
include_once:只会包含一次
require:引用的文件出错,后续代码全部不执行
require_once:只会包含一次
三、文件包含 防御
1、过滤危险字符,例如http:// https://等等,或者说相对路径的字符例如../../这样的字符
2、关闭危险配置,例如allow_url_include=Off,尽量不变
2、尽量使用白名单过滤被包含的文件
四、dvwa靶场
首先上传一个muma.php文件改为hello.jpg文件通过file upload上传
上传,得到文件路径../../hackable/uploads/hello.jpg
1、security=low
2、security=medium
查看源码被过滤,绝对路径绕过
3、security=high
查看源码,必须是file开头,第一时间想到file协议