ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

文件包含基础

文件包含基础 什么是文件包含程序开发人员通常会把一些可重复使用的函数写入某个文件中这样在使用这些函数时就可以直接调用此文件而无须重复编写函数代码这种调用文件的过程就被称为文件包含。为了实现代码复用减少重复的工作量文件包含在程序开发中被大量使用。如果网站开发人员对允许包含的文件没有严格的控制就很有可能造成漏洞。文件包含是 PHP 的一种文件加载机制。常见include(); 如果被包含的文件不存在会产生错误并停止运行脚本。require(); 如果被包含的文件不存在只会产生警告脚本将继续运行。include_once(); 与include类似区别是如果文件中的代码已经被包含。则不会再次包含require_once(); 与require类似区别是如果文件中的代码已经被包含则不会被再次包含例如include(header.php);意思就是把header.php加载到当前 PHP 程序中。include()到底做了什么例如include(test.php);假设test.php?php echo Hello;那么include() ↓ 找到 test.php ↓ 读取文件 ↓ PHP解析其中的PHP代码 ↓ 执行所以include()和普通读取文件不一样。例如file_get_contents(test.php);主要是读取文件内容而include(test.php);是加载文件交给PHP处理什么是文件包含漏洞正常情况下include(header.php);程序员自己决定加载 header.php但是如果写成$file $_GET[file];include($file);就出现了一个关键问题用户输入 ↓ $_GET[file] ↓ $file ↓ include($file)也就是说用户可以影响include()要加载哪个文件。这就是文件包含漏洞的核心。文件上传和文件包含到底有什么区别文件上传解决的是:“文件怎么进入服务器”用户 ↓ 上传文件 ↓ 服务器 ↓ 保存文件关键$_FILES move_uploaded_file()文件包含解决的是“程序加载哪个文件”用户输入 ↓ 文件路径 ↓ include() ↓ 加载文件关键include() require()文件上传、文件包含为什么可以联系起来因为文件上传可以让服务器上出现一个新的文件。而文件包含可以让 PHP 程序加载一个文件。因此两者可以形成文件上传 ↓ 服务器产生文件 ↓ 文件包含 ↓ PHP加载这个文件文件包含配合文件上传虽然这是一个普通的文本文件但是文件内容确实符号php语法规范那么这些代码通过文件包含就可以正常被执行。将txt的后缀名改成jpg也可以正确显示phpinfo信息。所以只有文件内容符号php语法规范那么任何扩展名都可以通过文件包含被php解析。在渗透测试中通常会利用文件包含这个特点来配合文件上传因为通常网站只会允许上传图片如果网站还同时存在文件包含漏洞就可以借助文件包含执行图片中的代码。
返回列表