DVWA-File Inclusion实战篇--文件包含漏洞

DVWA实战篇--文件包含漏洞

File Inclusion

漏洞介绍

 为了使代码更加灵活,通常会将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。对一个简单的 PHP 小程序来说,在不同的 PHP 脚本之间剪切或复制某一函数不是大问题, 但是当进入项目开发时,函数的数量将会变得相当庞大,并且函数具有较强的复杂性,这时你就会把它们保存到一个便于随时调用的函数库中,以便于该函数在整个项目中可以随时被调用。通常情况下这个函数库是一个文件,我们称为代码库。当为特定领域的功能编写函数时,希望通过把自定义的这些函数组织到一起,并存放到 单独的代码文件中。当团队开发项目时,如果有统一的通用函数文件,则将大幅缩短项目的开发周期,并使 得项目的层次结构分明。
    开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程一般被称为包含。
 

形成条件

当服务器php配置中开启allow_ url include时,可以通过php的某些特性函数(include(),require(),include once()和 require once())利用url去动态包含文件。如果没有对文件来源进行严格审查,就会导致加载恶意文件。
   文件包含漏洞分为本地文件包含漏洞和远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow urlr fopen选项,该选项开启以后,服务器允许包含一个远程文件。
   需要说明的一点是,包含文件时,不管文件后缀是不是php,都会尝试当做php文件执行,如果内容是php,会正常执行并打印结果,如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取与任意命令执行。 include:包含并运行指定文件,当包含外部文件发生错误时,系统给出警告,但整个php.文件继续执行。require:跟include不同的是,当产生错误的时候,include 下面继续运行而require 停止运行了。

漏洞实践

Low

源码分析

从源码看到直接获取一个参数,没有任何安全过滤和验证

漏洞实践

通过多个.\不断地遍历目录

遍历到目录执行phpinfo.php

执行php.ini

运程包含读取robots.txt

Medium

源码分析

 

通过分析源码发现对"http://", "https://","../", "..\""替换为””,过滤了远程包含,对本地包含没有任何过滤。

漏洞实践

本地文件包含:….//….//绕过过滤

远程文件包含:httphttp://://

High

源码分析

分析源代码可知道将 str_replace替换为 fnmatch ,保证服务器只能够通过 file协议来获取文件。这里就无法使用http协议进行远程文件包含。

漏洞实践

这个级别需要利用file协议读取本地文件

impossible

源码分析

源码只允许四个文件名,有效的防止了文件的包含漏洞

防御方法及修复建议

1、严格判断包含中的参数是否外部可控

2、路径限制,限制被包含的文件只能在某一个文件夹内,特别是一定要禁止目录跳转字符,如:“../”

3、基于白名单的包含文件验证,验证被包含的文件是否在白名单中。设置类似白名单的方法,通过筛选固定文件名方法,一方面不必切断这个业务,另一方面又不会被轻易绕过

4、尽量不要使用动态包含,可以在需要包含的页面固定写好,如:“include("head.php")”

5、可以通过调用str_replace()函数实现相关敏感字符的过滤,一定程度上防御了远程文

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值