1.文件包含简介
服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件(而不是更新所有网页中的链接)。
2.文件包含函数与常见的包含方式
当使用这四个函数包含一个新文件时,该文件将作为 PHP 代码执行,
php 内核并不在意该被包含的文件是什么类型。
所以如果被包含的是 txt 文件、图片文件、远程 url、也都将作为 PHP 代码执行。
如果文件内容不符合PHP语法,就会将该文件内容读取出来。
文件包含函数
include() | 当使用该函数包含文件时,只有代码执行到 include() 函数时才将文件包含进来, 发生错误时只给出一个警告,继续向下执行。 |
include_once() | 功能和 include() 相同,区别在于当重复调用同一文件时,程序只调用一次 |
require() | 只要程序一执行就会立即调用文件,发生错误的时候会输出错误信息,并且终止脚本的运行 |
require_once() | 与 require() 相同,区别在于当重复调用同一文件时,程序只调用一次 |
几种常用的包含的方式
- 同目录包含 file=.htaccess
- 目录遍历 ?file=../../../../../../../../../var/lib/locate.db
- 日志注入 ?file=../../../../../../../../../var/log/apache/error.log
- 利用 /proc/self/environ
3.文件包含漏洞产生的原因与危害
开发人员希望代码更加灵活,有时会将包含的文件
设置为变量,用来动态调用,由于这种灵活性,可能导致攻击者调
用恶意文件,造成文件包含漏洞
4.漏洞类型与绕过技巧
读取敏感信息
Session文件包含
PHP伪协议绕过
绕过WAF
日志文件包含