DVWA 之 File Upload(文件上传)

这篇具有很好参考价值的文章主要介绍了DVWA 之 File Upload(文件上传)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、级别:Low

 2、级别:Medium

3、级别:High 


 文章来源地址https://www.toymoban.com/news/detail-467145.html

什么是文件上传漏洞?

黑客利用文件上传后服务器解析处理文件的漏洞上传一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。

造成文件上传漏洞的原因:

1.服务器配置不当

2.开源编辑器上传漏洞

3.本地文件上传限制被绕过

4.过滤不严格被绕过

5.文件解析漏洞导致文件执行

6.文件路径截断

1、级别: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>";
    }
}

?>

basename(path,suffix)
函数返回路径中的文件名部分,如果可选参数suffix为空,则返回的文件名包含后缀名,反之不包含后缀名。 

服务器对上传的文件并没有做任何的检查和过滤,我们创建一个新文件并上传

DVWA 之 File Upload(文件上传)

DVWA 之 File Upload(文件上传) 

 修改路径为http://192.168.101.66/bachang/DVWA-master/hackable/uploads/1.php,查看我们上传的文件

DVWA 之 File Upload(文件上传)

代码被执行,证明存在漏洞。我们试试写一句话木马进行上传 

DVWA 之 File Upload(文件上传)

上传成功啦!

DVWA 之 File Upload(文件上传) 

再用蚁剑进行连接 (连接密码为123)

DVWA 之 File Upload(文件上传)

 这样我们就可以在服务器上执行任意命令,获取webshell权限,进入网站后台。可以下载、修改服务器的所有文件。

DVWA 之 File Upload(文件上传)

 2、级别: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>';
    }
}

?>

发现,程序对上传的文件类型和文件大小做了限制,文件类型必须为image/jpeg和image/png,且文件大小要小于100000b,也就是我们之前的php文件已经无法成功上传了。

(1)利用bp抓包修改Content-Type类型

DVWA 之 File Upload(文件上传)

 上传成功!

DVWA 之 File Upload(文件上传)

 (2)使用00截断绕过

%00截断绕过,此时,服务器会将low.php%00.png认为其文件名为low.php,解析为PHP文件(仅限于PHP版本小于5.3.4的版本)

        谈到00截断我们都会想到,有什么0x00截断,%00截断,也有人对两个东西分析一大堆,那么它俩有什么区别呢,什么场合适用哪一个呢?这就要从00截断的原理说起:
其实截断的原理也很简单,无论0x00还是%00,最终被解析后都是一个东西:chr(0)
chr()是一个函数,这个函数是用来返回参数所对应的字符的,也就是说,参数是一个ASCII码,返回的值是一个字符,类型为string。
        那么chr(0)就很好理解了,对照ASCII码表可以知道,ASCII码为0-127的数字,每个数字对应一个字符,而0对应的就是NUT字符(NULL),也就是空字符,而截断的关键就是这个空字符,当一个字符串中存在空字符的时候,在被解析的时候会导致空字符后面的字符被丢弃。
        这种情况常出现在ASP程序中,PHP 版本<5.3.4时也会有这个情况,JSP中也会出现。
那么就可以知道00截断的原理了,在后缀中插入一个空字符(不是空格),会导致之后的部分被丢弃,而导致绕过的发生。如:在文件1.php.jpg中插入空字符变成:1.php.0x00.jpg中,解析后就会只剩下1.php,而空字符怎么插入的呢?通常我们会用Burp抓包后,在文件名插入一个空格,然后再HEX中找到空格对应的16进制编码“20”,把它改成00(即16进制ASCII码00,对应十进制的0),就可以插入空字符了。PS:这里的空格纯粹只是一个标记符号,便于我们找到位置,其实这里是什么字符都无所谓,只不过空格比较有特异性,方便在HEX中查找位置

具体操作参考:DVWA靶场-文件上传漏洞_嘿-零一的博客-CSDN博客_dvwa文件上传漏洞
DVWA 之 File Upload(文件上传)

DVWA 之 File Upload(文件上传) 

3、级别: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字符中的最后一次出现的位置,start参数可选,表示指定从哪里开始

substr(string,start,length) 返回string字符中从start开始的字符串,length参数可选,表示返回字符的长度

strtolower(string) 返回给定字符串的小写

getimagesize(string) 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通 HTML 文件中 IMG 标记中的 height/width 文本字符串。如果不能访问 filename 指定的图像或者其不是有效的图像,getimagesize() 将返回 FALSE 并产生一条 E_WARNING级的错误。所以 getimagesize函数的作用是判断上传的文件是不是有效的图片

move_uploaded_file(file,newlocal) 函数表示把给定的文件移动到新的位置

High级别采用白名单过滤的方式,只允许上传的文件后缀名为jpg、jpeg、png且文件大小小于100000字节,同时上传的文件必须是有效的图片格式(不只是以图片的格式结尾,而且文件内容是图片格式的)

我们在文件头部加上了jpg格式的 GIF89  (文件不能有空格,不然就像我一样上传不成功了)

DVWA 之 File Upload(文件上传)

 后缀名也改为jpg

DVWA 之 File Upload(文件上传)

上传成功

DVWA 之 File Upload(文件上传) 

 修改url为:http://192.168.101.66/bachang/DVWA-master/vulnerabilities/fi/?page=file:///H:\CTF\PHPstudy\PHPTutorial\WWW\bachang\DVWA-master\hackable\uploads\1.jpg

DVWA 之 File Upload(文件上传)

 同理如果上传的是一句话木马,可直接用蚁剑连接拿到shell

 

到了这里,关于DVWA 之 File Upload(文件上传)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HadoopWEB页面上传文件报错Couldn‘t upload the file course_info.txt

    右键F2检查发现:文件上传PUT操作的IP地址是节点IP别名识别不到导致 解决方法:在WEB页面访问浏览器所在机器上面配置hosts映射地址(注意:配置的是浏览器访问的地址不是hadoop节点所在的映射地址,如果是云服务器就配置公网IP的映射地址)

    2024年02月06日
    浏览(38)
  • DVWA之文件上传

    指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。 “文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解

    2023年04月18日
    浏览(26)
  • DVWA之文件上传漏洞

    指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。 “文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解

    2024年02月12日
    浏览(37)
  • DVWA靶场-文件上传漏洞

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

    2024年02月07日
    浏览(37)
  • dvwa文件上传通关及代码分析

    查看源码:

    2024年02月10日
    浏览(34)
  • 上传漏洞(一句话木马、中国菜刀使用、DVWA文件上传漏洞利用)

       可抓包后修改扩展名为图片格式,再上传可绕过验证。如:   可以修改php文件后缀为其他,再上传。如test.php.xxx  可对图片文件添加一句话木马,再修改为.php上传,会解析为图片上传此文件。    客户端验证绕过的方法有:  例:   1)木马分为大马、小马和一句话木马:

    2024年02月11日
    浏览(43)
  • Ant Design upload 文件上传 限制文件只能上传一个

    上传前:                 回显:可以删除   最近做了一个后台管理系统使用的是 Ant Design和vue框架搭建的 文件上传 :组件:  Ant Design   https://1x.antdv.com/components/upload-cn/  (upload 官方文档) 功能需求 : 1.可以拖拽,或者点击上传文件  2.只能上传单个文件,不能上传多个文

    2024年02月14日
    浏览(45)
  • ElementUI —— Upload 文件上传

    前言 :            实现单文件上传!此文章仅记录代码如何实现,便于后期项目学习使用!! 代码实现 :

    2024年02月16日
    浏览(54)
  • DVWA 靶场之 Brute Force-Low&Medium(前期配置铺垫与渗透方法及源码分析)

    首先登录 DVWA 靶场 DVWA 默认的用户有5个,用户名及密码如下: 难度等级设置为 low ,我们先从最简单的开始 来到 Brute Force(暴力破解) 我们可以输入用户名和密码 简单测了几个,回显用户名或密码不正确 但是并未对我们输入的内容及次数进行限制,因此直接进行爆破 暴力

    2024年02月19日
    浏览(40)
  • 文件上传漏洞 (upload部分通关教程)

    只适合只有前端验证的网站 一句话木马: 保存到文件中: 使用第一关直接上传,报错: 按照网站要求,修改文件后缀名为jpg: 重新上传111.jpg文件,打开burp抓包,修改包中的后缀名 点击Forword上传,上传成功: 使用蚁剑连接后台步骤: 复制url: 连接成功: 原理就是验证后

    2024年02月22日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包