?
文件包含漏洞是指应用程序在加载文件时,允许用户控制被加载文件的名称,从而导致恶意代码的执行或敏感信息的泄露。文件包含漏洞主要分为两种:
文件包含漏洞的危害性很大,攻击者可以利用该漏洞来执行以下操作:
以下是一些防范文件包含漏洞的措施:
../
等。为了防范文件包含漏洞,开发人员应在开发应用程序时严格控制用户输入,对用户输入的文件名称进行严格的过滤,确保只有合法的文件才能被包含。
程序员在开发过程中为了方便,在1.php页面中直接使用2.php的内容,形成文件包含,包含后可以直接使用被包含的代码,避免重复造轮子,就造成了漏洞
PHP语言所提供的文件包含功能太强大、太灵活,所以大部分的文件包含的漏洞都出现在PHP的程序中。
远程包含需要开启php配置的allow_url_include=on
php.ini
里有两个参数
allow_url fopen:允许url里的封装协议访问文件(默认ON)
allow url include:允许包含url里的封装协议包含文件(默认OFF)
<?php #如果这里$GET['filename']攻击者可控,且未经过过滤那么就会导致漏洞。
$filename =$_GET['filename'];
include($filename);
?>
函数 | 说明 |
---|---|
include | 包含并运行指定的文件,包含文件发生错误时,程序警告,但会继续执行。 |
include_once | 与include 不同处在于 include_once 会检查这个文件是否已经被导入,如已导入便不会再导入,直面 once 理解就是只导入一次。 |
require | 包含并运行指定的文件,包含文件发生错误时,程序直接终止执行。 |
require_once | 和 require 类似,不同处在于 require_once 只导入一次。 |
被以上函数包含的文件一律按.php后缀解析!
这样就可以直接使用图片马了
实战中,黑盒测试看到?file=参数,直接先尝试/etc/passwd
用于访问本地文件系统
用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响。
file://[文件的绝对路径和文件名]:?file=file://D:/xxxx/1.txt
127.0.0.1/include.php?file=file://E:\phpStudy\PHPTutorial\WWW\phpinfo.txt
file=[文件的相对路径和文件名]:?file=./1.txt
127.0.0.1/include.php?file=./phpinfo.txt
file=[http://网络路径和文件名]:?file=http://127.0.0.1/1.txt
127.0.0.1/include.php?file=http://127.0.0.1/phpinfo.txt
?