zoukankan      html  css  js  c++  java
  • DVWA各级文件包含漏洞

    File Inclusion文件包含漏洞

    1. 漏洞分析
    1. 文件包含函数
    • require() 找不到被包含的文件时会产生致命错误,并停止脚本运行
    • include() 找不到被包含的文件时只会产生警告,脚本将继续运行
    • include_once()与include()类似 ,唯一区别时如果该文件中代码已经被包含,则不会再次包含
    • require_one()与require()类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含

    Level:low

    <?php 
    
    // The page we wish to display 
    $file = $_GET[ 'page' ]; 
    
    

    漏洞分析

    low级别没有进行任何过滤;

    • 第一步:构造url
      127.0.0.1/dvwa/vulnerabilities/fi/?page=/etc/shadow
      报错,显示没有这个文件,说明不是服务器系统不是Linux,但同时暴露了服务器文件的绝对路径

    D:PhpstudyPHPTutorialWWWdvwa

    • 第二步:通过绝对路径读取服务器的php.ini

    其中'allow_url_fopen = on allow_url_include = on ' 文件包含都是打开的
    可以通过..保证到达服务器的C盘根目录

    配置文件中的Magic_quote_gpc选项为off。在php版本小于5.3.4的服务器中,当Magic_quote_gpc选项为off时,我们可以在文件名中使用%00进行截断,也就是说文件名中%00后的内容不会被识别,即下面两个url是完全等效的。
    使用%00截断可以绕过某些过滤规则,例如要求page参数的后缀必须为php,这时链接A会读取失败,而链接B可以绕过规则成功读取

    Level:medium

    <php
    //Thepagewewishtodisplay
    $file=$_GET['page'];
    //Inputvalidation
    $file=str_replace(array("http://","https://"),"",$file);
    $file=str_replace(array("../","..""),"",$file);
    >
    
    

    漏洞分析

    • Medium级别的代码增加了str_replace函数,对page参数进行了一定的处理,将”http:// ”、”https://”、 ” ../”、”..”替换为空字符,即删除

    • Sre_replace(函数)及其不安全,可以使用双写绕过替换规则
      例如:page=hthttp://127.0.0.1/phpinfo.txt时,str_replace函数会将http://删除变成http://127.0.0.1/phpinfo成功执行
      同时,因为替换的只是“../”、“..”,所以对采用绝对路径的方式包含文件是不会受到任何限制的。

    Level:high

    <php
    //Thepagewewishtodisplay
    $file=$_GET['page'];
    //Inputvalidation
    if(!fnmatch("file*",$file)&&$file!="include.php"){
       //Thisisn'tthepagewewant!
    echo"ERROR:Filenotfound!";
    exit;
    }
    
    

    漏洞分析

    • High级别的代码使用了fnmatch函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件.
    • High级别的代码规定只能包含file开头的文件,看似安全,不过的是我们依然可以利用file协议绕过防护策略。

    构造url

    什么时file协议

    字面意思:本地文件传输协议
     
    什么是File:
    file协议主要用于访问本地计算机中的文件,好比通过Windows的资源管理器中打开文件或者通过右键单击‘打开’一样
    file协议的基本格式如下:

    file:///文件路径

    file协议与http协议的区别

    file协议与http协议的区别

    Level:impossible

    <php
    //Thepagewewishtodisplay
    $file=$_GET['page'];
    //Onlyallowinclude.phporfile{1..3}.php
    if($file!="include.php"&&$file!="file1.php"&&$file!="file2.php"&&$file!="file3.php"){
    //Thisisn'tthepagewewant!
    echo"ERROR:Filenotfound!";
    exit;
    }
    >
    
    

    漏洞分析

    Impossible级别的代码使用了白名单机制进行防护,简单粗暴,page参数必须为“include.php”、“file1.php”、“file2.php”、“file3.php”之一,彻底杜绝了文件包含漏洞。

  • 相关阅读:
    后序非递归遍历二叉树的应用
    关于驰骋工作流程引擎,工作流程管理系统演示与学习环境发布的通知。
    驰骋工作流程引擎,ccflow,如何把子线程的数据汇总到合流节点表单中去?
    关于取消ccflow abc 级别用户与开放表单设计器源代码的通知
    驰骋工作流程引擎问题解答,武汉朋友。
    ccform 单据打印的规则调整与新增功能发布说明
    发几个傻瓜表单设计器预览图片,以方便大家学习.
    关于工作流程管理系统中的现有版本自由表单设计器的停止升级与新版本将要发布的声明.
    ccflow向流程开始节点表单传输数据方法大全
    利用开源的驰骋工作流程引擎,处理的集团公司流程应用案例之一.
  • 原文地址:https://www.cnblogs.com/zjhzjhhh/p/14102282.html
Copyright © 2011-2022 走看看