首页 > 其他分享 >DVWA靶场实战(四)——File Inclusion

DVWA靶场实战(四)——File Inclusion

时间:2023-01-05 18:12:59浏览次数:43  
标签:文件 include File 包含 Inclusion DVWA 漏洞 file php

DVWA靶场实战(四)

四、File Inclusion:

1.漏洞原理:

  随着网站的业务的需求,程序开发人员一般希望代码更加灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通过动态变量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有做合理的校检或者校检被绕过就造成了文件包含漏洞。

2. 常见函数:

(1) include()当前使用该函数包含文件时,只有代码执行到include()将文件包含起来,发生错误时给出一个警告,然后将继续执行语句。

(2) include_once()功能和include()相同,区别当重复调用一个文件时,程序只调用一次。

(3) require()执行如果发生错误,函数会发出错误信息,并终止脚本运行。

(4) require_once和require()相同区别在于当重复调用一个文件时,程序只调用一次。

(5) nighcight_file(),show_source()函数对文件进行语法高亮显示,通常可以看见源代码。

(6) readfile(),file_get_contents()函数读取一个文件,并写入缓冲。

(7) fopen(),打开一个文件或url

注:几乎所有的脚本语言中都提供文件包含的功能,但是文件包含漏洞在PHP中居多,而在jsp/ASP/ASP.NETC程序中非常少,甚至没有文件包含漏洞的存在。

3. 漏洞分类:

(1)本地文件包含漏洞:

当被包含的文件就在服务器本地时,就形成了本地文件包含漏洞。一般会有以下的代码环境:

<?php

$file=$_GET[“file”];

Include($flir);

?>

(2)远程文件包含漏洞:

本地文件包含和远程文件包含造成漏洞的原因是一样的,当php.ini中的配置选项allow_url_fope和alliw_url_include为ON的话,则包含的文件可以是第三方服务器中的文件,就形成了远程文件包含漏洞。

4. 防御手段:

(1)文件名验证防护:包含文件验证是指对可保护文件名设置黑名单或白名单、文件后缀名固定等。如果需要使用文件包含,则通过使用白名单的方法对要包含的文件进行限制,这样可以做到既使用了文件包含,又可以防止问价包含漏洞。

(2)文件名验证绕过防护:这种防护手段主要有两种方式,第一种方式就是在文件后缀名处下手,另一个方式是通过目录长度限制来截断。严格限制包含中的参数,取消那些不可控的参数。

(3)中间件安全配置防护:合理地配置中间件的安全选项也会有良好的防护效果,这主要是通过调整中间件及PHP的安全配置,使得用户在调整文件时进行基本的过滤及限制。

(4)禁用相应函数防护:如果不需要文件包含,则关闭相应的文件包含的函数,这防止远程文件包含,这是最安全的办法。

(5)关闭威胁配置防护:可以将PHP中的一些危险配置直接关闭,由于远程文件的不可信任性及不确定性,在开发中直接禁用远程文件文件包含选项。

5. 漏洞危害:

(1)web服务器的文件被外界浏览导致信息泄露。

(2)脚本被任意执行,典型影响如下:

① 篡改网站;

② 执行非法操作;

③ 攻击其他网站;

6. 注意事项:

  在攻击靶场过程中可能会遇到File Inclusion这样的报错。“The PHP function allow_url_include is not enabled.”

 

  遇到以上情况,我们找到我们安装phpstudy_pro目录的“Extensions”文件夹,找到“php”文件夹,然后找到名称为“php.ini”的文件,找到“allow_url_include=Off”选项,然后将其改为“allow_url_include=On”保存,然后重新启动小皮面板就ok了。

 

 

7. 实战:

(1) Low

  代码分析:

  这里我们可以看出该文件没有进行任何的过滤,这导致我们可以包含任何的文件。当上传问及那不存在时,可以看到,发生了报错,并且把网站的路径都给暴露出来了。所以第一行的意思就是,找不到我们指定名称文件,所以WARNING。而第二行的警告是因为前面没有找到指定文件,所以包含的时候就出警告了。但同时暴露了服务器文件的绝对路径“D:\phpstudy_pro\WWW\DVWA\vulnerabilities\fi\index.php” 

  所以我们就可以开始构造url,此时我们产生本地包含使用“192.168.1.22:81/dvwa/vulnerabilities/fi/?page=../../phpinfo.php”就可以访问phpinfo.php界面。也可以尝试本地包含百度,可以发现也是成功的。

 

(2)Medium:

  代码分析:

 

  这里“$file=str_replace(array(“http://”,”https://”),””,$file);”的意思就是将“http://”、“https://”、“../”、“..\”全部替换为了空(就是删了),所以这里我们采用双写过滤的方式绕过。

  我们这里采用“....//....//phpinfo.php”的payload进行攻击,在替换后就相当于“../../phpinfo.php”说明此方法可行,所以如果我们要利用文件包含漏洞访问“hhtp://www.baidu.com”就只用写为“hthttp://tp://www.baidu.com”就可以绕过。

 

(3)High:

  代码分析:

 

  这里我们看出来他使用了fnmatch函数,该函数的功能是指定的模式来匹配文件名或字符串。

  我们可以看见这里运用了fnmatch函数检查page参数,要求参数开头必须是file,服务器才回去包含相应文件。所以这里只能用伪协议包含,伪协议也就是“file://”来访问本地文件系统,关于“伪协议包含”补充以下:

伪协议

作用

file://

访问本地文件系统

http://

访问HTTP网址

https://

访问HTTPS网址

ftp://

访问FTP URL

php://

访问输入输出流

zlib://

压缩流

data://

数据

ssh2://

security shell2

expect://

处理交互式的流

glob://

查找匹配的文件路径

  注:伪协议后文件必须是绝对路径。

  了解完这些后我们开始进行攻击,这里我们将url进行构造选择将之前在low中我们获取的绝对路径加上“file:///”变成“file:///[绝对路径]”的格式,“http://192.168.1.22:81/dvwa/vulnerabilities/fi/?page=file:///D:\phpstudy_pro\WWW\DVWA\phpinfo.php”然后构造以上payload进行攻击,得到phpinfo。


(4)Impossible:

  代码分析:

 

  这里使用白名单进行保护,所以已经没有了文件包含漏洞。

标签:文件,include,File,包含,Inclusion,DVWA,漏洞,file,php
From: https://www.cnblogs.com/wybsignal/p/17028509.html

相关文章

  • 使用AIR中的File对象
    ​​http://help.adobe.com/zh_CN/as3/dev/WS5b3ccc516d4fbf351e63e3d118666ade46-7fe4.html​​ ​​关于File类​​​​File对象的路径​​​​AIRforTV应用程序......
  • makefile生成静/动态库
    通过makefile生成静态库和动态库目录树➜app_hellotree-h.├──[280]app_hello.c├──[218]app_hello.h└──[997]makefile0directories,3f......
  • dockerfile实践学习
    一、dockerfile简介镜像是分层存储的,每一层在前一层的基础上进行修改。容器也是分层存储,已经向为基础层,在其他基础上加一层作为容器运行的存储层。创建镜像的另种两种......
  • git 拉取新分支 error: pathspec ‘develop‘ did not match any file(s) known to gi
     git上有develop分支,branch查看分支看不到develop,checkout切换分支报错一、问题 git上有develop分支,branch查看分支看不到develop,checkout切换分支报错(一)branch查看......
  • Huge CRF File Size Oracle RAC Environment
    EnvironmentOracleLinux(6.xor7.x)Oracle11g(RACorSTANDALONE) SymptomsOracleGRID_HOMEsizeishuge$GRID_HOME/crf/foldersizeishugeForea......
  • files found with path 'META-INF/DEPENDENCIES' from inputs: 报错日志
    filesfoundwithpath'META-INF/DEPENDENCIES'frominputs:报错日志>Task:app:mergeDebugJavaResourceFAILEDExecutionfailedfortask':app:mergeDebugJavaResou......
  • 多个makefile构建多个目录的工程文件(大工程基本如此)
    通过多个层级的makefile构建整个工程级别的makefile,大工程如果不使用cmake等,基本如此组织,linux内核也是这样哈目录树➜test_pro3tree-h.├──[4.0K]app_1│......
  • Dockerfile
    ####dockerfile常用保留字FROM:指定一个镜像作为模板,第一条必须为FROMMAINTAINER:镜像维护者的姓名和邮箱地址RUN:容器构建是运行的命令shell格式:RUNyum-yinstallvimE......
  • xlrd.biffh.XLRDError: Excel xlsx file; not supported
    1、问题描述使用xlrd读取‘*.xlsx’文件的时候出现一下错误2、解决方案实际上那个是xlrd的版本问题,当前最新版xlrd是‘2.0.1’的,只支持‘*.xls’格式文件,把xlrd版本降低到’......
  • How Liquibase Finds Files: Liquibase Search Path
    https://docs.liquibase.com/concepts/changelogs/how-liquibase-finds-files.html Forexample,ifyourreferencedfilepathis project1/db.changelog.xml andy......