文件包含

简述&&原理

文件包含就是一个文件里面包含另外一个文件。

程序员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般被称为文件包含。
程序员希望代码更灵活,所以把包含的文件设置为变量,用来调用,
然鹅,当用户可以控制这个变量时,就造成文件包含漏洞。


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

常见包含函数

include()、require()
区别:

  1. include是当代码执行到它的时候才加载文件,发生错误的时候只是给一个警告,然后继续往下执行
  2. require是只要程序一执行就会立即调用文件,发生错误的时候会输出错误信息,并且终止脚本的运行

require一般是用于文件头包含类文件、数据库等等文件,include一般是用于包含html模版文件
include_once()、require_once()与(include\require)的功能相同,只是区别于当重复调用的时候,它只会调用一次。

远程文件包含和本地文件包含的配置区别

allow_url_fopen=On并且 allow_url_include=On

  • 本地文件包含php.ini配置文件中 allow_url_include on
  • 远程文件包含与本地文件包含的区别(allow_url_include on和allow_url_fopen on)
  • 远程文件(包括本地文件包含)包含比本地文件包含的危害大

  • php为了安全性考虑,有一项 open_basedir 的设置,设置php应用可以访问的目录。

漏洞代码分析

利用思路

不做详细解释,在需要时查询相关资料进行利用,此处仅提供利用思路

文件包含函数会把包含的任意文件都当作php文件来执行。

所以可以利用的思路:

1、包含目录任意文件

2、包含日志文件

3、包含系统环境

4、包含session文件

5、包含其他由php创建的tmp文件

6、包含图片

......

封装协议的利用

http|https|ftp|php://input|php://filter|data|zip|phar

你可能感兴趣的:(教程)