提示:本文主要针对于File Include 文件包含漏洞全等级的分析以及相应的破解。
前言
本次主要针对于DVWA当中的 文件包含漏洞进行学习。主要进行的是dvwa的low、medium、high级别进行破解,由于impossible模块难度过高所以都将不进行impossible的实验。
一、File Include是什么?
File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。
文件包含漏洞常配合文件上传来获取目标webshell。本文主要基于文件包含的基础来进行讲解,暂不涉及文件上传。
二、实验步骤
1.low级别
1)代码分析:
由上图可知,该代码会直接获取page中的参数,作为PHP文件进行执行。无任何防御的措施。
2)因此,可直接利用URL进行漏洞的利用。
注:需要确保本机的phpstudy开启了allow_url_include以及allow_url_fopen两个选项,否则无法完成实验。在php扩展及设置中可以找到下图所示的内容。
进行本地的文件包含漏洞:
(直接在page=后面加上本地文件路径即可)
进行远程的文件包含漏洞利用:
(我在kali中开启了apache服务,使得我可以对其进行远程登陆访问)
注:构建的远程URL中最后的文件部分,不论其后缀名是啥,都将执行为php文件,如文件中无php内容则会直接显示文件里的所有内容。
2.Medium级别
1)代码分析:
如上图所示:在本级别中,使用了str_replace函数进行替换。
将http:// https:// ..// ..\ 全部都替换成了空字符。
当然要知道使用str_replace是及其不安全的,因为其只能进行一次替换。因此我们可以使用双写进行替换。
替换如下(示例):
例如:hthttp://tp://…
此处由于,str_replace函数会过滤掉http://因此在我们把上述的URL中带有http://的去掉可得:http://…,至此便可成功绕过。
对于本地文件包含的利用也可同样运用双写进行绕过。
3.high级别
1)代码分析:
与medium一样也拥有输入验证,但本级别使用的是fnmatch,利用此匹配page=后的内容,以确保其后的内容是以file开头或include.php开头的。
虽然是以file开头的文件,看似很安全,但我们仍然可以利用file协议绕过其防御策略。
例如:
~page=file://d:\\phpstudy\phptutorial\www\xxx
进行查看其对应的文件。
至于代码执行,需配合文件上传漏洞进行利用。首先上传一个php文件,而后利用file文件去包含上传的文件(必须知道上传文件的绝对路径),从而实现任意恶意代码执行。
可把含有php代码的文件格式改成jpg发现一样可以用。
#php的测试代码代码:
<?php
phpinfo();
?>
4.imposs级别
代码分析:
由此可知直接对利用的文件进行了设置,设置了白名单。
总结
防御:可参照impossible级别设置对应的白名单;且不能因为格式就不对上传后的文件进行上传,如high中的.jpg文件依旧可以执行php代码