参考文章:DVWA之File Inclusion(文件包含) | 新手指南:DVWA-1.9全级别教程之File Inclusion
原理
File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项**时,攻击者通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含shell文件**
此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行
文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞
远程文件包含漏洞是因为开启了allow_url_fopen选项**(选项开启之后,服务器允许包含一个远程的文件)
文件包含相关函数
include函数:将指定的文件读入并且执行里面的程序
require函数:将目标文件的内容读入,并且把自己本身代换成这些读入的内容
include_once函数:在脚本执行期间包含并运行指定文件,如果文件被包含过,不会再次包含
require_once函数:和require函数相同,唯一区别是如果文件被包含过,不会再次包含
include和require之间的区别
include 引入不存文件时,产生一个警告且脚本还会继续执行
require 引入不存文件时,会导致一个致命性错误且脚本停止执行
分析
LOW
先看代码,进行审计,找出可包含原因
对page参数传入的值没有进行任何过滤,导致任意文件包含
先包含一个不存在的文件,看一眼效果如何
哟,将网站路径都爆出来了(这里可以通过SQL注入,拿dba权限,写shell连接)
第一行的警告是因为找不到我们指定的haha.php文件,也就是包含不到我们指定的文件,所以Warning
而第二行的警告是因为前面没有找到指定文件,所以包含的时候就出警告了
本地包含
http://127.0.0.1:81/dvwa/vulnerabilities/fi/?page=../../php.ini
再看一眼phpinfo.php
http://127.0.0.1:81/dvwa/vulnerabilities/fi/?page=../../phpinfo.php
远程包含
我们可以试下是否存在远端包含,弟弟没有服务器,直接就访问phpinfo测试
http://127.0.0.1/vulnerabilities/fi/?page=http://127.0.0.1:81/phpinfo.php
Medium
老样子,先看代码,进行审计,找出可包含原因
代码使用 str_replace函数 对http:// 和 https://进行了过滤,也为了本地包含漏洞的产生,过滤了 ../ 和 ..\ 防止了进行目录切换的包含
http://、https://可以用大小写、双写绕过 | ../和..\是防止了本地包含漏洞,还有远程包含漏洞
大小写
http://192.168.10.100:81/dvwa/vulnerabilities/fi/?page=HTTP://127.0.0.1:81/phpinfo.php
双写
http://192.168.10.100:81/dvwa/vulnerabilities/fi/?page=hthttp://tp://127.0.0.1:81/phpinfo.php
High
老样子,先看代码,进行审计,找出可包含原因
对包含的文件名进行了限制,必须为 file* 或者 include.php ,否则会提示Error:File not found
但是可以用file伪协议进行绕过 | 想看别的PHP伪协议:PHP伪协议讲解
拿shell
文件包含,想拿shell,必须配合文件上传漏洞使用
思路就是,先用文件上传漏洞将一句话木马上传至服务端,然后文件包含去包含那个木马文件,再用蚁剑连接
这里我已经上传好了一句话木马 D:\phpStudy\PHPTutorial\WWW\dvwa\hackable\uploads\shell.php
直接利用file协议包含木马文件,蚁剑连接(如果有远程包含,也可以拿shell)
http://192.168.10.100:81/dvwa/vulnerabilities/fi/?
page=file:///D:/phpStudy/PHPTutorial/WWW/dvwa/hackable/uploads/shell.php
可以看到是可以访问的,下面重要点来了,来了!!!
因为DVWA是要登录的,所以必须要在蚁剑中浏览网站,留下session,才能拿shell,不然会像下面一样报错
先添加好数据,然后浏览网站,留下session
Impossible
老样子,先看代码,进行审计,找出不可包含原因
使用了白名单过滤的方法,包含的文件名只能等于白名单中的文件,所以避免了文件包含漏洞的产生!