一、文件包含漏洞简介
相同代码重复出现在不同文件中,造成代码冗余,所以出现了文件包含函数,其可以调用需要使用的代码,被包含的文件会被当做PHP代码执行,忽略后缀本身,使代码更为高效。
攻击者利用包含的特性,且应用本身对文件(包含)控制不严格,最终造成攻击者进行任意文件包含。
注意,包含的文件会被当做脚本文件来解析。
简单地说,文件包含并不属于漏洞,但是,由于对包含进来的文件不可控,导致了文件包含漏洞的产生,即如果包含文件能被人为控制,就属于漏洞。
文件包含分为本地文件包含(LFI)和远程文件包含(RFI)。PHP默认不开启远程文件包含,开启远程文件包含需要allow_url_include = On。
本地文件包含占绝大多数,远程文件包含需要开启PHP配置,但是可以绕过(SMB服务)。
二、文件包含函数解析
1、include()
使用include()函数引用外部文件时,只有当代码执行到include()函数代码段时,调用的外部文件才会被引用并读取,当引用的文件发生错误时,系统只会给出警告错误,而整个PHP文件会继续执行。
#1.txt文件,将被调用
<?php