时间:2020-9-4来源:本站原创作者:佚名
原理

在通过PHP的相应函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。

文件包含漏洞的形成,需要满足两个条件:

1、用户能够控制这个动态变量

2、include()等函数通过动态变量的方式引入需要包含的文件

涉及包含文件的危险函数

include():包含并运行指定的文件,包含文件发生错误时,程序警告,但会继续执行。

require():包含并运行指定的文件,包含文件发生错误时,程序直接终止执行。

include_once():和include类似,不同处在于include_once会检查这个文件是否已经被导入,如果已导入,下文便不会再导入,直面once理解就是只导入一次。

require_once():和require类似,不同处在于require_once只导入一次。

文件包含漏洞又分为本地文件包含和远程文件包含本地文件包含(LFI)

能够读取或执行包含本地文件的漏洞,称为本地文件包含漏洞

下面将用一道CTF题作为例子讲解

题目来源:南京邮电大学网络攻防训练平台

writeup

打开题目地址看到题目

这道题非常简单。根据提示是文件包含,而且是本地文件包含,所以直接在URL后添加?file=php://filter/read=convert.base64-encode/resource=index.php,读取到base64加密的index.php文件

base64解码,查看到flag

远程文件包含(RFI)

如果php.ini的配置选项allow_url_fopen,allow_url_include都为ON的话,文件包含函数是可以加载远程文件的,这种漏洞就被称为远程文件包含。利用这个漏洞,可以直接执行任意命令。

allow_url_fopen是否允许打开URL文件

allow_url_include是否允许引用URL文件

文件包含的各种写法

include$_GET[]

include$_GET[].”.inc”

include“./“.$_GET[]

include“./include”.$_GET[]

include“./include”.$_GET[].”.inc”

PHP伪协议

在文件包含漏洞中,可以使用PHP伪协议来构造语句进行漏洞测试

file协议

当存在某个用户可控制、并得以访问执行的输入点时,可以尝试输入file://去获取本地磁盘文件

使用方法:


转载请注明原文网址:http://www.coolofsoul.com/hjpz/hjpz/20139.html

------分隔线----------------------------