File Inclusion,意为文件包含漏洞,当服务器开启allow_url_include选项时,可以通过php的某些特性函数(include(),require()和include_once(),require_once)利用url去动态包含文件。此时如果没有对文件来源进行过滤和审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项,开启后,服务器允许包含一个远程的文件。
初级
没有任何过滤手段,直接显示page,那么我们随便请求一个文件。
由于文件不存在,这里显示文件错误,如果请求了我们上传的木马文件,那么文件就会被执行。
我们输入真实存在的一个文件。如图
可以看到,php文件被解析了。如果文件内容是一句话木马的话,网站就被控制了。
中级
源码如图
只是过滤了http://,"../"等,是没有意义的。对于我们在初级所用的绝对路径的方法,没有产生效果,不过我们仍然可以探讨一下,str_replace的绕过方法,使用双写绕过替换规则,比如过滤了"../"我们可以写....//这样中间的../去掉后依然是../。
我们猜测这样过滤是想排除远程文件包含漏洞。
高级
源码如下:
page后面参数只能是file或者include.php,这个fnmatch函数,语法为如图
由于匹配的是file*,所以必须要file开头,使用file://协议,也可以正常包含,如图所示
成功包含,函数成功执行。
终极
源码如图
限制了只允许这三个文件包含。那么就没办法运用文件包含漏洞了。
领取专属 10元无门槛券
私享最新 技术干货