DVWA远程文件包含防御
在这里推荐下自己的博客,支持友链互换,Back's Blog
本次防御从代码层面出发, 尽量从多个角度进行防御。不足之处请指出。谢谢。
黑名单检测防御
首先看下dvwa的远程文件包含页面源码(low级别)。
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
?>
可以看到没有经过任何的加固,远程文件包含利用的最大特点显而易见,就是http和https协议。
我们先进行漏洞利用,简单复现。远程文件包含需要在php.ini中打开allow_url_include。
![](/assets/blank.gif)
这里我已经打开了allow_url_include
本地写好了一个测试文件。简单点。
![](/assets/blank.gif)
进行远程文件包含测试,因为在本地测试,所以写在了同一个虚拟机下(懒得多开)
![](/assets/blank.gif)
成功包含远程文件
这里进行加固,使用黑名单进行检测,若包含的代码中包含http、https则报错,并且退出执行。
加固之后代码如下
<?php$file = $_GET[ 'page' ];$black = array("https","http");if(!in_array($file,$black)){echo "危险操作!";exit;}?>
进行远程文件包含测试
![](/assets/blank.gif)
黑名单中,不仅可以添加协议,也可以添加敏感信息。如passwd、shadow、hosts等等,以进行防御本地文件包含。
str_replace()函数替换防御
加固代码如下,这里仅写了http用以测试
<?php$file = $_GET[ 'page' ];$file = str_replace("http","",$file);?>
加固成功
![](/assets/blank.gif)
但是这种加固是及其不安全的,因为str_replace()函数有一个特性,即仅会检测一次。如果我们构造出hthttptp这样的参数,它会替换掉中间的http,然后左右剩下的ht 和 tp 仍会构成一个新的http。
而str_replace()不会再次对此进行检测。从而达到绕过的目的。如下测试图。
![](/assets/blank.gif)
过滤其他的诸如 https、http:// 等同样可以绕过。
不过对单字符就没办法了。因为只有一个字符,无法构造合成。如下
<?php$file = $_GET[ 'page' ];$file = str_replace("h","",$file);?>
![](/assets/blank.gif)
原则上没有什么问题,但是不建议如此过滤。不仅容易误伤,还容易造成其他错误。
strstr函数过滤防御
直接上代码吧。懒得多BB了。
<?php
$file = $_GET[ 'page' ];
if(strstr($file,"http")==true){echo "危险操作";exit;
}
?>
strstr()函数主要是进行了一个检测,没有对参数本身进行更改,所以不存在hthttptp的这种情况出现。
然后这里进行判断, 如果存在http则echo “危险操作”,并退出执行。
![](/assets/blank.gif)
如果不退出,会是怎样的情景?看一下、我这里修改了下1.txt内容
可以看到,虽然输出危险操作,但是仍然将内容进行了执行并输出。
![](/assets/blank.gif)
你以为这样就是安全的吗?
不,strstr()函数还有一个问题所在,就是它区分大小写。什么意思?就是小写过滤,但是大写不过滤。如下
![](/assets/blank.gif)
应对措施也简单,将获得到的参数进行小写转换。使用strtolower()函数。
$file = strtolower($file);
如此即可
![](/assets/blank.gif)
白名单检测防御
这种防御方法,即指定可包含文件,其他均不允许。此种方法和Impossible级别一样,只不过添加远程文件即可。
<?php// The page we wish to display$file = $_GET[ 'page' ];// Only allow include.php or file{1..3}.phpif( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) {// This isn't the page we want!echo "ERROR: File not found!";exit;}?>
关于远程文件包含的主要加固方式,还是关闭php.ini中的allow_url_include()比较安全。
如果必须开启的话,要从代码层面进行加固。多层防护,一定要检测你所使用的加固函数是否可以绕过,以及相应的加固措施。
DVWA远程文件包含防御相关推荐
- php 创建目录_使用SMB绕过PHP远程文件包含限制
译文声明 本文是翻译文章,文章原作者mannulinux,文章来源:mannulinux.org 原文地址:http://www.mannulinux.org/2019/05/exploiting- ...
- 远程文件包含 php,php本地及远程文件包含漏洞
在php程序中包含有file inclusion的时候,php要开启一下两个功能: allow_url_fopen on allow_url_include on 但是开启这两个功能之后伴随的是url ...
- PHP远程文件包含(RFI)并绕过远程URL包含限制
文章来源|MS08067 公众号粉丝投稿 本文作者:VastSky(Ms08067实验室粉丝) 前言 本文我们讲如何绕过远程URL包含限制.在PHP开发环境php.ini配置文里"allow ...
- LFI(本地文件包含)、RFI(远程文件包含)、PHP封装协议(伪协议)安全问题学习
友情链接:https://www.cnblogs.com/LittleHann/p/3665062.html 目录 一.文件包含的基本概念 1.要想成功利用文件包含漏洞,需要满足下面的条件 (1)in ...
- php代码审计文件包含,PHP代码审计之远程文件包含(RFI)
有位叫做普瑞斯特的大牛针对PHP的web应用列出了下面几种攻击方式: 1.命令注入(Command Injection)2.eval注入(Eval Injection)3.客户端脚本攻击(Script ...
- 文件上传漏洞之——远程文件包含漏洞(RFI)
定义 如果php.ini的配置选项allow_url_include为On的话,文件包含函数是可以加载远程文件的,这种漏洞被称为远程文件包含漏洞.利用远程文件包含漏洞,可以直接执行任意命令 原理 同本 ...
- DVWA通关--文件包含(File Inclusion)
目录 LOW 通关步骤 一.本地文件包含 二.远程文件包含 代码分析 MEDIUM 通关步骤 一.本地文件包含 二.远程文件包含 代码分析 HIGH 通关步骤 一.本地文件包含 二.远程文件包含 代码 ...
- php远程文件包含攻击,利用SMB共享来绕过php远程文件包含的限制
在这篇博文中,我将为大家演示如何利用PHP应用中的远程文件包含漏洞的技术.我们将绕过php远程文件包含的限制,并执行RFI的利用,即使PHP环境被配置为不包含来自远程HTTP/FTP URL的文件. ...
- RFI远程文件包含的漏洞
RFI(Remote File Inclusion) 远程文件包含漏洞,即服务器通过PHP的特性(函数)去包含任意文件时, 由于要包含的这个文件来源过滤不严格,从而可以去包含一个恶意文件,攻击者就可以 ...
最新文章
- 通用Excel文件导出工具类
- 后端:50 个 经典 Spring 面试题,值得收藏!
- ❤️《10个超级常用Python方法总结》复制即用丨小白捷径【文末赠书2本】❤️
- hive表定义(3种方式)
- JavaScript选择器
- 函数的对象,函数的嵌套
- jar包导出无法显示图片或者音乐_超详细微信表情包制作教程
- 中小企业网络推广方案
- 小象学院 零基础Python入门 案例四 52周存钱挑战v_3.0
- 微信编辑器 wxEditor 最牛逼的富文本编辑器
- element input限制输入数字
- Google 三大论文之——MapReduce
- 网站备案其实是服务器备案,国内服务器为什么需要备案?国外服务器备案吗?
- Selenium库实现推特爬虫
- vue组件挂载与html加载区别,vue中的挂载是什么意思?
- 图案设计灵感怎么写_服装设计灵感来源怎么写_服装设计理念怎么写
- 我眼中的匈牙利命名法
- 内网渗透之跨路由访问
- codeforces1166E. The LCMs Must be Large
- 【FME实战教程】003:FME读取地理空间数据(矢量、栅格、点云、三维模型、数据库、地理服务)大全