1. 文件包含(File Inclusion)漏洞简介
(1)文件包含
开发人员将相同的函数写入单独的文件中,需要使用某个函数时直接调用此文件,无需再次编写,这种文件调用的过程称文件包含;
(2)文件包含漏洞
开发人员为了使代码更灵活,会将被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以恶意调用一个恶意文件,造成文件包含漏洞;在PHP中经常出现文件包含漏洞;
(3)php中引发文件包含漏洞的通常是以下四个函数
include():找不到被包含文件,报错,但会继续运行脚本;
include_once():与include()类似,区别在于,当重复调用同一文件时,程序只调用一次;
require():找不到被包含文件,报错,并且停止运行脚本;
require_once():与require类似,区别在于,当重复调用同一文件时,程序只调用一次;
(4)文件包含的特征
?page=
?file=
?home=
(5)目录遍历与文件包含的区别
目录遍历是可以读取web目录以外的其他目录,根源在于对路径访问权限设置不严格,针对于本系统;
文件包含是利用函数来包含web目录以外的文件,分为本地包含和远程包含;
(6)文件包含的分类
本地文件包含:可以包含本地文件,在条件允许时甚至能执行代码
- 读敏感文件,读PHP文件;
- 上传一句话木马或图片木马,然后进行包含,从而GetShell;
- 包含/proc/self/envion文件GetShell
- 若有phpinfo则可以包含临时文件
远程文件包含:可以直接执行任意代码
- 要保证php.ini中allow_url_fopen和allow_url_include要为On
(7)文件包含漏洞的危害
- 执行任意代码
- 读取文件源码或敏感信息
- 包含恶意文件控制网站,甚至控制服务器
2. 文件包含(File Inclusion)
实验环境
(1)Windows服务器:Windows Server 2003,IP地址:192.168.37.136;
(2) Linux服务器:192.168.37.135
(3) 测试机:Windows7物理机(开启代理,代理服务器为burpsuite)
实验过程——Windows
安全级别:Low
(1)前期准备,开启本地包含
点击文件包含,显示如下界面;不能进行文件包含
修改配置文件,开启本地包含,并重新启动phpstudy;