PHP代码审计DVWA\PHP代码审计DVWA文件上传[File Upload]

在这里插入图片描述

File Upload文件上传

靶场搭建可以用蓝易云服务器

😘😘😘😘😘😘点击查看服务器
介绍:

文件上传漏洞是指用户上传了一个可执行的脚本文件比如(php、jsp、xml、cer等文件),而WEB系统没有进行检测或逻辑做的不够安全。导致用户将恶意的文件上传到了对方服务器当中了

LOW

代码审计

<?php
//经典if判断
    //提交值非空
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?
    //这个是将我们上传的文件移动到一个目录里面,就是有一个上传的目标
    //move_uploaded_file — 将上传的文件移动到新位置 
    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>";
    }
}

?> 

我们看了这个代码

照成文件上传漏洞的非常大的关键是没有对类型进行过滤

为什么怎么说呢

首先我们上传一张图片是可以的,但是如果我们上传一个木马文件呢,可以吗一样是可以的,找出能上传木马文件的原因就再去对文件的类型没有进行严格的判断和过滤

那么LOW级别就分成简单了

直接上传一个木马文件就可以了

我们通过哥斯拉生成一个php的木马

在这里插入图片描述

因为没有什么拦截的直接上传
在这里插入图片描述

那么这个木马呢

ip+/hackable/uploads/NB.php

在这里插入图片描述

回显无异常

访问正常

我们用哥斯拉测试连接一下

在这里插入图片描述

OK

Medium

代码审计

<?php
//经典if判断
    //提交值非空
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?
    //这个是将我们上传的文件移动到一个目录里面,就是有一个上传的目标
    //move_uploaded_file — 将上传的文件移动到新位置 
    //类型判断必须是图片类型的
    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
            //没有上传成功显示Your image was not uploaded.
            echo '<pre>Your image was not uploaded.</pre>';
        }
        else {
            // Yes!
            //上传成功显示,上传成功
            echo "<pre>{$target_path} succesfully uploaded!</pre>";
        }
    }
    else {
        // Invalid file
        //如果你上传的不是image/jpeg图片类型的文件会提示
        //Your image was not uploaded. We can only accept JPEG or PNG images.
        //类型无效
        echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
    }
}

?> 

在这里插入图片描述

我们直接提交php文件会显示

Your image was not uploaded. We can only accept JPEG or PNG images.

不是JPEG和PNG类型的文件所以无效

首先我们可以通过抓包去修改文件的类型

我们可以用burp来解决问题

我们先把NB.php改成NB.jpeg

先上传

在这里插入图片描述

在这里插入图片描述

数据包抓一下

怎么改呢

首先他规定的类型是我们再把图片类型改成php后缀的

任何再把数据包放行了

我们会发现

成功的上传进去了

在这里插入图片描述

访问一下

在这里插入图片描述

再测试连接一下

在这里插入图片描述

测试没有问题

连接一下

在这里插入图片描述

OK

High

代码分析

<?php
//经典if判断
    //提交值非空
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是文件的后缀名
    $uploaded_ext  = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);
    $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];
    $uploaded_tmp  = $_FILES[ 'uploaded' ][ 'tmp_name' ];

    // Is it an image?
    //这里限制上传的文件的后缀名必须以 jpg 、jpeg 或 png 结尾,同时大小<100000,同时上传的文件必须是有效的图片格式(不只是以图片的格式结尾,而且文件内容是图片格式的)
    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
            //没有上传成功显示
            //Your image was not uploaded.
            //你的图片未上传
            echo '<pre>Your image was not uploaded.</pre>';
        }
        else {
            // Yes!
            //上传成功显示,上传成功

            echo "<pre>{$target_path} succesfully uploaded!</pre>";
        }
    }
    else {
        // Invalid file
        //如果你上传的不是image/jpeg图片类型的文件会提示
        //Your image was not uploaded. We can only accept JPEG or PNG images.
        //类型无效
        echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
    }
}

?> 

所以我们在文件头部加上了jpg格式的 GIF89

在这里插入图片描述

或者

copy 666.png /b + 1.txt /a 888.png

(//666是图片,1.txt是一句话木马所在的文件,888是复制完成之后的图片命名)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无聊的知识

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值