zoukankan      html  css  js  c++  java
  • DVWA-文件上传 File Upload

    File Upload

    File Upload,即文件上传漏洞,通常是由于对上传文件的类型、内容没有进行严格的过滤、检查,使得攻击者可以通过上传木马获取服务器的webshell权限,因此文件上传漏洞带来的危害常常是毁灭性的,Apache、Tomcat、Nginx等都曝出过文件上传漏洞。

    LOW:
    代码:

    复制代码
    <?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' ] ); 
    
        // Can we move the file to the upload folder? 
        if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) { 
            // No 
            echo '<pre>Your image was not uploaded.</pre>'; 
        } 
        else { 
            // Yes! 
            echo "<pre>{$target_path} succesfully uploaded!</pre>"; 
        } 
    } 
    
    ?> 
    复制代码

     可以看到,服务器对上传文件的类型、内容没有做任何的检查、过滤,存在明显的文件上传漏洞,生成上传路径后,服务器会检查是否上传成功并返回相应提示信息。

    文件上传漏洞的利用是有限制条件的,首先当然是要能够成功上传木马文件,其次上传文件必须能够被执行,最后就是上传文件的路径必须可知。这里三个条件全都满足。

    php版本的一句话木马,文件格式记得改成php:

     

     上传成功,并且显示上传的路径。

    使用中国菜刀 连接成功

    Medium:

    代码:

    复制代码
    <?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 
                echo '<pre>Your image was not uploaded.</pre>'; 
            } 
            else { 
                // Yes! 
                echo "<pre>{$target_path} succesfully uploaded!</pre>"; 
            } 
        } 
        else { 
            // Invalid file 
            echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>'; 
        } 
    } 
    
    ?> 
    复制代码

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

    漏洞利用1:文件包含+文件上传

    首先我们把之前的php文件改成png文件上传

    我们可以利用文件包含,在菜刀的添加地址栏中输入:

    http://192.168.50.100/dvwa/vulnerabilities/fi/?page=hthttp://tp://192.168.50.100/dvwa/vulnerabilities/upload/mmm.php

    然后拿到webshell

     漏洞利用2:抓包上传文件的数据,然后修改其为php文件


    执行以后 显示

    上中国菜刀 连接成功

     

     漏洞利用三:截断绕过规则

    在php版本小于5.3.4的服务器中,当Magic_quote_gpc选项为off时,可以在文件名中使用%00截断

    修改文件后缀名为.php%00.png

    抓包可以看到类型符合要求,并且上传成功

     

     

    使用菜刀连接即可。

     

    HIGH:

    代码:

    复制代码
    <?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 
                echo '<pre>Your image was not uploaded.</pre>'; 
            } 
            else { 
                // Yes! 
                echo "<pre>{$target_path} succesfully uploaded!</pre>"; 
            } 
        } 
        else { 
            // Invalid file 
            echo '<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将一句话木马文件ghz.php与图片文件3.jpg合并

     

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

    上菜刀,右键添加shell,地址栏填入http://192.168.50.100/dvwa/vulnerabilities/fi/?page=file:///C:phpStudyPHPTutorialWWWdvwahackableuploadsmm.jpg

    参数名填ghz

    脚本语言选择php。

  • 相关阅读:
    Mix 10 上的asp.net mvc 2的相关Session
    Vista、XP SP2主流支持即将终止
    向Visual Studio 2010迁移的电子书
    ASP.NET MVC 2 转换工具
    Javascript瘦身工具AJAX Minifier
    微软公司的安全开发周期模型
    User Experience Kit
    乐在其中设计模式(C#) 迭代器模式(Iterator Pattern)
    [翻译]使用ASP.NET AJAX让GridView的数据行显示提示框(ToolTip)
    [翻译]使用ASP.NET AJAX实现幻灯片效果
  • 原文地址:https://www.cnblogs.com/xingyuner/p/12292235.html
Copyright © 2011-2022 走看看