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

    High 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_ext  = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);
        $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];
        $uploaded_tmp  = $_FILES[ 'uploaded' ][ 'tmp_name' ];
    
        // Is it an image?
        if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) &&
            ( $uploaded_size < 100000 ) &&
            getimagesize( $uploaded_tmp ) ) {
    
            // Can we move the file to the upload folder?
            if( !move_uploaded_file( $uploaded_tmp, $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>';
        }
    }
    
    ?>

    相关函数介绍

    strrpos(string,find,start)

    函数返回字符串find在另一字符串string中最后一次出现的位置,如果没有找到字符串则返回false,可选参数start规定在何处开始搜索。

    getimagesize(string filename)

    函数会通过读取文件头,返回图片的长、宽等信息,如果没有相关的图片文件头,函数会报错。

    可以看到,High级别的代码读取文件名中最后一个”.”后的字符串,期望通过文件名来限制文件类型,因此要求上传文件名形式必须是”*.jpg”、”*.jpeg” 、”*.png”之一。同时,getimagesize函数更是限制了上传文件的文件头必须为图像类型。

    漏洞利用

    采用%00截断的方法可以轻松绕过文件名的检查,但是需要将上传文件的文件头伪装成图片,由于实验环境的php版本原因,这里只演示如何借助High级别的文件包含漏洞来完成攻击。

    首先利用copy将一句话木马文件php.php与图片文件1.jpg合并

    copy 1.jpg/b+php.php/a hack.jpg

    生成的文件hack.jpg

    打开可以看到,一句话木马藏到了最后

    顺利通过文件头检查,可以成功上传。

    上菜刀,右键添加shell,地址栏填入http://192.168.0.101/dvwa/vulnerabilities/fi/?page=file:///D:/software/wamp/www/dvwa/hackable/uploads/hack.jpg

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

    成功拿到webshell

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

  • 相关阅读:
    @终极解密输入网址按回车到底发生了什么
    jgitflow-maven-plugin报错:The authenticity of host can't be established.
    java log4j2日志行号不显示问题
    Prometheus监控之grafana常用模板编号记录
    DM数据守护
    使用IntelliJ IDEA 配置Maven(入门)
    IntelliJ IDEA lombok插件的安装和使用
    idea svn连接https报错问题: E230001: Server SSL certificate verification failed: certificate issued
    SVN安装后,右键不显示SVN菜单项
    IntelliJ IDEA怎么配置svn,集成svn方法
  • 原文地址:https://www.cnblogs.com/zhengna/p/12764684.html
Copyright © 2011-2022 走看看