(1) .概述
程序开发人员通常会把可重复使用的函数写在单个文件中
在使用某个函数的时候,直接调用此文件,无需再次编写,
这种调用文件的过程称为文件包含
程序开发人员都希望代码更加灵活,所有通常会把
被包含的文件设置为变量,进行动态调用,正由于这阵灵活性
导致客户端可以调用任意文件,造成文件包含漏洞
(2) .php中文件包含
函数 区别
include() 文件包含失败时会产生警告
,脚本继续执行
include_once() 与inlude()功能一样
该文件中已经被包含过
则不会再次包含
文件只会包含一次
require() 文件包含失败时产生错误
结束脚本执行
require_once() 与require()功能一样,
该文件中已经被包含过
则不会再次包含
文件包含一次
.用法
include '/路径/function_name' ;
include ('/路径/function_name');
require '/路径/function_name'
.漏洞产生原因
1.web应用实现了动态包含
2.动态包含的文件路径参数,客户端可控
'例如'
$path=$_GET['path'];
include $path
.相关配置
文件包含有本地包含和远程文件包含之分
远程文件包含利用HTTP,FTP,PHP伪协议 远程加载文件
配置php.ini
文件包含开关
allow_url_fopen=On/Off
远程文件包含开关
allow_url_include=Off/On
'php伪协议'
php:
.漏洞原理
php提供的文件包含功能
@ 无视文件扩展名读取文件
包含文件时,会读物文件的源码,包括图片文件
?path=1.jpg
@无条件解析php代码
文件包含在读取文件源码时,
如果遇到符合php语法
得代码,会无条件执行
如将 info.php 改名为 info.rar
为图片木马提供了一种引用方法
'空字节安全绕过' (已经淘汰)
php版本小于 5.3.4
并且需要关闭
magic_quotes_gpc=Off