zoukankan      html  css  js  c++  java
  • DVWA-5.2 File Upload(文件上传)-Medium-绕过文件类型限制

    Medium Level

    查看代码

    <?php
    
    if( isset( $_POST[ 'Upload' ] ) ) {
        // Where are we going to be writing to?
        $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
        $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );
    
        // File information
        $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
        $uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];
        $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];
    
        // Is it an image?
        if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&
            ( $uploaded_size < 100000 ) ) {
    
            // Can we move the file to the upload folder?
            if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
                // No
                $html .= '<pre>Your image was not uploaded.</pre>';
            }
            else {
                // Yes!
                $html .= "<pre>{$target_path} succesfully uploaded!</pre>";
            }
        }
        else {
            // Invalid file
            $html .= '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
        }
    }
    
    ?>

    可以看到,Medium级别的代码对上传文件的类型、大小做了限制,要求文件类型必须是jpeg或者png,大小不能超过100000B(约为97.6KB)。

    漏洞利用

    方法1 组合拳(文件包含+文件上传)

    因为采用的是一句话木马,所以文件大小不会有问题,至于文件类型的检查,尝试修改文件名为hack.png。

    上传成功

     启用中国菜刀,右键添加

    不幸的是,虽然成功上传了文件,但是并不能成功获取webshell权限,在菜刀上无论进行什么操作都会返回如下信息

    中国菜刀的原理是向上传文件发送包含hello参数的post请求,通过控制hello参数来执行不同的命令,而这里服务器将木马文件解析成了图片文件,因此向其发送post请求时,服务器只会返回这个“图片”文件,并不会执行相应命令。

    那么如何让服务器将其解析为php文件呢?我们想到文件包含漏洞。这里可以借助Medium级别的文件包含漏洞来获取webshell权限,打开中国菜刀,右键添加,在地址栏中输入

    http://127.0.0.1/dvwa/vulnerabilities/fi/?page=hthttp://tp://127.0.0.1/dvwa/hackable/uploads/hack.png

    参数名为hello,脚本语言选择php。

    按照原作者的文章,这里应该是点击添加,成功获取webshell权限。但是不知道为什么我这里并不能,会报如下问题

    方法2 抓包修改文件类型

    上传hack.png文件,抓包

    可以看到文件类型为image/png,尝试修改filename为hack.php

    上传成功

    上菜刀,获取webshell权限

    方法3 截断绕过规则

    在php版本小于5.3.4的服务器中,当Magic_quote_gpc选项为off时,可以在文件名中使用%00截断,所以可以把上传文件命名为hack.php%00.png。

    可以看到,包中的文件类型为image/png,可以通过文件类型检查。

    上传成功

    而服务器会认为其文件名为hack.php,顺势解析为php文件。遗憾的是,由于本次实验环境的php版本为5.5.12,所以无法进行验证。

    参考:https://www.freebuf.com/articles/web/119467.html

  • 相关阅读:
    关于 相对论 的 一些 讨论推理 杂集
    反相 大全
    收录 猴哥 对于 相对论 水星进动 星光偏折 引力透镜 GPS 的 说法
    哲学 一词 起源于 古希腊 的 “爱智慧”
    字符流的父类
    字符编码
    对象流
    BufferStream 缓存流
    OutputStream 以及 使用文件输入输出流实现文件的复制操作
    InputStream
  • 原文地址:https://www.cnblogs.com/zhengna/p/12760282.html
Copyright © 2011-2022 走看看