文件包含漏洞

*文件包含*

程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般被称为文件包含。程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。

几乎所有脚本语言都会提供文件包含的功能,但文件包含漏洞在PHP Web Application中居多,而在JSP、ASP、ASP.NET程序中却非常少,甚至没有,这是有些语言设计的弊端。在PHP中经常出现包含漏洞,但这并不意味这其他语言不存在。

 

*背景介绍*

随着网站业务需求,web脚本可能允许客户端用户输入控制动态包含在服务端的文件,会导致恶意代码的执行及敏感信息泄露,主要包括本地文件上传和远程文件包含的两种形式

 

*漏洞成因*

文 件包含漏洞的产生原因是在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校验,或者校验被绕过,从而操作了预想之外的文件,就 可能导致意外的文件泄露甚至恶意的代码注入。当被包含的文件在服务器本地时,就形成的本地文件包含漏洞,被包涵的文件在第三方服务是,就形成了远程文件包 含漏洞。

 

*常见漏洞代码*

if (isset($_GET[page])) {
include $_GET[page];
} else {
include "home.PHP";
}

 

*触漏洞条件*

web应用采用include()等文件包含函数通过动态变量的方式引入需要包含的文件

用户能够控制该动态变量

 

*常用文件包含函数*

 

 

*漏洞危害*

执行任意代码
包含恶意文件控制网站

甚至控制服务器

 

*漏洞分类*

 

 

*可读如下敏感文件*

 

 

*php文件*

 

 

*包含日志*(需要知道日志的路径)

日志会记录客户端请求及服务器响应的信息,访问http://www.xx.com/<?php phpinfo(); ?>时,<?php phpinfo(); ?>也会被记录在日志里,也可以插入到User-Agent

搭建环境,如图所示,包含phpinfo();

*包含环境变量文件*

 

远程包含

远程的文件名不能为php可解析的扩展名,allow_url_fopenallow_url_includeOn是必须的

 

*php防御*

posted @ 2016-08-15 22:26  请叫我美女sky  阅读(1150)  评论(0编辑  收藏  举报