文件包含原理
文件包含漏洞产生的原因是在通过PHP函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。几乎所有的脚本语言都会提供文件包含的功能,但文件包含漏洞在PHP WebApplication中居多,而在JSP、ASP、ASP.NET程序中却非常少,这是有些语言设计的弊端。在PHP中经常出现文件包含漏洞,但并不意味着其他语言不存在。
文件包含函数
- include():找不到被包含文件时会产生警告(E_WARNING);
- include_once():与include ()类似,代码已经被包含则不会再次包含require():找不到被包含的文件时会产生致命错误(E_COMPILE_ERROR)
- require_once(): 与require ()类似,代码已经被包含则不会再次包含
利用条件
(1 ) include等函数通过动态执行变量的方式引入需要包含的文件
(2)用户能控制该动态变量
文件包含分类
- 文件包含漏洞可以分为LFI (Local File Inclusion,本地文件包含)和RFI(Remote File Inclusion,远程文件包含)两种。而区分二者最简单的办法就是通过查看php.ini中是否开启allow_url_include。如果开启就有可能包含远程文件。
- 远程文件包含需要php.ini中allow_url_include=on,allow_url_fopen = On。在php.ini中,allow_url_fopen默认一直是On,而allow_url_include从php5.2之后就默认为Off。
远程文件包含漏洞复现
1.查看配置是否开启。
本地文件包含漏洞
如果文件有代码,会将包含文件以php文件的类型解析