file includes

一、前置知识

1、什么是文件包含
一种代码处理方法,函数如include,require等,参数是文件名。
2、文件包含漏洞
文件名的参数用户可控且过滤不严,被攻击者偷梁换柱
在这里插入图片描述

二、尝试low等级

打开文件包含题目会发现以下提示,我们找到php.ini配置文件(一般在安装目录里),把 allow_url_include的值改成on,然后重启phpstudy即可
The PHP function allow_url_include is not enabled
在这里插入图片描述
我们点击文件一、文件2、文件3、发现了下图的规律。
在这里插入图片描述
那么我们尝试下输入

http://localhost/DVWA/vulnerabilities/fi/?page=test.php

在这里插入图片描述
那么我们就可以利用这个漏洞了,输入

http://localhost/DVWA/vulnerabilities/fi/?page=..\..\php.ini

..\的意思是返回上一级目录。因为php.ini在DVWA目录下,所以使用..\..\
直接输出了这个文件的内容
在这里插入图片描述
那么问题又来了,读取其他目录的php脚本会怎样,显示内容还是执行php代码

输入

http://localhost/DVWA/vulnerabilities/fi/?page=..\..\phpinfo.php

在这里插入图片描述

说明了文件包含不仅仅显示内容还会执行文件。

那什么会执行远程文件吗?
我们再次尝试
在这里插入图片描述
在这里插入图片描述
可以执行并且非php文件里面只要包含php代码就可以执行

那么问题又来了。远程执行php文件和非php文件有什么差别吗?
当然有了,以上面的phpinfo.php和phpinfo.txt为例,进行说明
phpinfo.php是在攻击者的web服务器上执行,这毫无意义,我们期望的是在受害者的web服务器上执行,所以phpinfo.txt才是正解,(phpinfo.txt在受害者的web服务器上执行)

三、尝试medium等级

用low等级的方法发现依然成功。
但是他和low的等级有什么差别吗
差别在于它过滤了../而low的等级没有。
在这里插入图片描述
在这里插入图片描述
第一张图为low等级,第二张图为medium等级代码。
可以发现差别在于str_place()函数
他把我们传入的参数中的../和..\"替换成了空。
还有https://和http://替换成了空

那么medium等级的远程文件可以执行吗。
当然可以了
既然过滤了http://那么我们可以使用httphttp://://
如下图
在这里插入图片描述

四、high等级

我们尝试了medium等级的方法,进行本地文件执行发现以下错误
在这里插入图片描述
经常一番尝试发现只执行以file开头的文件
。那么这里就不得不提到file协议了

那么什么是files协议呢
就是文本传输协议,访问本地计算机中的文件

输入

http://localhost/DVWA/vulnerabilities/fi/?page=file://F:\php\PHPTutorial\WWW\DVWA\phpinfo.php

file://后面是本地路径,成功执行本地文件
在这里插入图片描述
也可以查看系统文件

http://localhost/DVWA/vulnerabilities/fi/?page=file://C:\windows\win.ini

在这里插入图片描述

那么怎样进行远程文件执行呢
medium方法不可以,
查看源码,
可知用fnmatch()函数限制参数文件的开头
在这里插入图片描述
进入impose等级
在这里插入图片描述
那么要如何远程执行呢,要就有把文件放在图片里,然后上传到web服务器,怎么把文件放在图片里这篇博客里的high等级部分说明了
在这里插入图片描述

0%