【文件包含】文件包含漏洞知识总结
Hello,各位小伙伴周五好~
这里是你们的劳模小编~
之前一期,我们已经一起总结了文件上传和文件解析漏洞。
今天我们就一起来看看文件包含漏洞吧~
一、什么是文件包含漏洞?
1、文件包含概述
和SQL注入等攻击方式一样,文件包含漏洞也是一种“注入型漏洞”,其本质就是输入一段用户能够控制的脚本或者代码,并让服务器端执行。
什么叫包含呢?以PHP为例,我们常常把可重复使用的函数写入到单个文件中,在使用该函数时,直接调用此文件,而无需再次编写函数,这一过程就叫做包含。
有时候由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件,从而导致文件包含漏洞。
以PHP为例,常用的文件包含函数有以下四种:
include(),require(),include_once(),require_once()
区别如下:
- require(),找不到被包含的文件时会产生致命错误,并停止脚本运行。
- include(),找不到被包含的文件时只会产生警告,脚本将继续运行。
- include_once()与include()类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。
- require_once()与require()类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。
2、漏洞成因分析
我们先直接来看一个简单的例子,网页代码如下:
再创建一个phpinfo.php页面,代码如下:
利用文件包含,我们通过include函数来执行phpinfo.php页面,成功解析:
将phpinfo.php文件后缀改为txt后进行访问,依然可以解析:
修改为jpg格式,也可以解析:
可以看出,include()函数并不在意被包含的文件是什么类型,只要有php代码,都会被解析出来。
在上一期文件上传漏洞的总结中,我们上传了一个jpg格式的一句话木马,如果网站有文件包含漏洞,jpg文件就可以被当作php文件进行解析,现在知道是为什么了吧~
我们将phpinfo.jpg的内容改成一段文字:
再次进行访问,