目录
一、文件包含
1、文件包含原理
文件包含:开发人员将相同的函数写入单独的文件中,需要用某个函数时直接调用此文件,无需再次编写,这种文件调用的过程称为文件包含。
漏洞成因:开发人员为了使代码更灵活,会将被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以恶意调用一个恶意文件,造成文件包含漏洞。
2、文件包含函数
- Require():找不到被包含文件,报错,并且停止运行脚本。
- Include():找不到被包含文件,报错,但会继续运行脚本。
- Require_once():与require类似,区别在于,当重复调用同一文件时,程序只调用一次。
- Include_once():与include类似,区别在于,当重复调用同一文件时,程序只调用一次。
3、文件包含的特征
?page=
?file=
?home=
4、文件包含分类
- 本地文件包含
- 远程文件包含(即加载远程文件,在
php.ini
中开启allow_url_include
、allow_url_fopen
选项。开启后可以直接执行任意代码。)
5、目录遍历与文件包含的区别
目录遍历是可以读取web目录以外的其他目录,根源在于对路径访问权限设置不严格,针对于本系统;
文件包含是利用函数来包含web目录以外的文件,分为本地包含和远程包含;
6、利用
- 读取敏感文件
- 远程包含shell
- 图片上传并包含图片shenll
- 使用伪协议
- 包含日志文件GetShell
- 截断包含
7、修复方案
- 禁止远程文件包含
allow_url_include=off
- 配置
open_basedir=指定目录
,限制访问区域。- 过滤
../
等特殊符号- 修改Apache日志文件的存放地址
- 开启魔术引号
magic_quotes_qpc=on
- 尽量不要使用动态变量调用文件,直接写要包含的文件。
8、常见敏感信息路径
Windows系统
- C:\boot.ini //查看系统版本
- C:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件
- C:\windows\repair\sam //存储Windows系统初次安装的密码
- C:\ProgramFiles\mysql\my.ini //MySQL配置 C:\ProgramFiles\mysql\data\mysql\user.MYD //MySQL root密码
- C:\windows\php.ini //php配置信息
Linux系统
- /etc/passwd //账户信息
- /etc/shadow //账户密码文件
- /usr/local/app/apache2/conf/httpd.conf //apache2默认配置文件
- /usr/local/app/apache2/conf/extra/httpd-vhost.conf //虚拟网站配置
- /usr/local/app/php5/lib/php.ini //php相关配置
- /etc/httpd/conf/httpd.conf //apache配置文件