首页 > 编程语言 >DVWA靶场File Upload(文件上传) 漏洞所有级别通关教程及源码审计

DVWA靶场File Upload(文件上传) 漏洞所有级别通关教程及源码审计

时间:2025-01-01 16:25:30浏览次数:3  
标签:uploaded 文件 name Upload DVWA 源码 file 上传 target

目录

文件上传

文件上传漏洞是由于对上传文件的内、类型没有做严格的过滤、检查,使得攻击者可以通过上传木马文件获取服务器的webshell文件

本人公众号泷羽Sec-track,感兴趣的师傅可以看看

low

上传一个php文件,上传成功,并且可以在WWW\DVWA\hackable\uploads目录下找到该文件

此难度没有做任何过滤,所有文件都可以上传

源码审计

没有做任何过滤,很危险的行为

<?php

if( isset( $_POST[ 'Upload' ] ) ) { // 检查表单是否提交了"Upload"按钮
	// 定义目标上传路径
	$target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/"; // 设置目标路径为一个固定目录
	$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] ); // 将上传文件的基础名称附加到目标路径

	// 尝试将文件移动到上传文件夹
	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>"; // 提示用户图像成功上传,并显示路径
	}
}
?>

medium

先上传一个php文件

只允许上传jpg/png图片,那么就上传这两种图片

上传成功

源码审计

只允许上传文件类型jpg/png内容,以及文件大小小于10000字节,过滤并不严谨

<?php

if( isset( $_POST[ 'Upload' ] ) ) { // 检查表单是否提交了"Upload"按钮
	// 定义目标上传路径
	$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' ]; // 获取上传文件的类型
	$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ]; // 获取上传文件的大小

	// 检查是否为图像文件
	if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) && // 如果是JPEG或PNG格式
		( $uploaded_size < 100000 ) ) { // 并且文件大小小于100000字节(约100KB)

		// 尝试将文件移动到上传文件夹
		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>'; // 提示用户只接受JPEG或PNG格式的图像
	}
}
?>

high

根据提示只允许上传图片文件,上传一个jpg图片结果上传失败

上传并抓包,发送到重放器

添加文件头即可,GIF89a

源码审计

限制了文件后缀及文件内容是否有效,对文件类型过滤不严谨,如果添加文件头,则会被解析为一个jpg文件,就可以正常上传

<?php

if( isset( $_POST[ 'Upload' ] ) ) { // 检查是否有提交的"Upload"表单
	// 定义目标写入路径
	$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' ]; // 获取上传文件的临时存储路径

	// 检查文件是否为图像
	if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) && // 如果扩展名是jpg、jpeg或png(不区分大小写)
		( $uploaded_size < 100000 ) && // 并且文件大小小于100000字节(约100KB)
		getimagesize( $uploaded_tmp ) ) { // 并且临时文件是有效图像

		// 尝试将文件移动到上传文件夹
		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>'; // 提示用户只接受JPEG或PNG格式的图像
	}
}
?>

impossible

源码审计

非常严格的过滤,对上传的文件进行了重命名(搞了一个MD5的加密),还增加了token值的校验,对文件的内容也做了严格的检查。

<?php

if( isset( $_POST[ 'Upload' ] ) ) { // 检查是否提交了"Upload"表单
	// 检查反CSRF令牌
	checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); // 验证用户令牌是否与会话令牌匹配

	// 文件信息
	$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' ]; // 获取上传文件的临时存储路径

	// 设置目标写入路径
	$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; // 生成临时文件的完整路径

	// 检查文件是否为图像
	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 ) ) { // 检查文件是否为有效图像

		// 去除任何元数据,通过重新编码图像(推荐使用php-Imagick替代php-GD)
		if( $uploaded_type == 'image/jpeg' ) { // 如果文件类型为JPEG
			$img = imagecreatefromjpeg( $uploaded_tmp ); // 创建JPEG图像
			imagejpeg( $img, $temp_file, 100); // 以最高质量重新编码并保存到临时文件
		}
		else { // 如果文件类型为PNG
			$img = imagecreatefrompng( $uploaded_tmp ); // 创建PNG图像
			imagepng( $img, $temp_file, 9); // 以最高压缩率重新编码并保存到临时文件
		}
		imagedestroy( $img ); // 销毁图像资源以释放内存

		// 尝试将文件从临时文件夹移动到目标路径
		if( rename( $temp_file, ( getcwd() . DIRECTORY_SEPARATOR . $target_path . $target_file ) ) ) { // 如果移动成功
			// 上传成功
			$html .= "<pre><a href='{$target_path}{$target_file}'>{$target_file}</a> successfully uploaded!</pre>"; // 显示上传成功的消息,并提供文件链接
		}
		else { // 如果移动失败
			// 上传失败
			$html .= '<pre>Your image was not uploaded.</pre>'; // 提示用户图像未上传
		}

		// 删除任何临时文件
		if( file_exists( $temp_file ) ) // 如果临时文件存在
			unlink( $temp_file ); // 删除临时文件
	}
	else { // 如果文件不符合条件
		// 提示无效文件
		$html .= '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>'; // 提示用户只接受JPEG或PNG格式的图像
	}
}

// 生成反CSRF令牌
generateSessionToken();
?>

标签:uploaded,文件,name,Upload,DVWA,源码,file,上传,target
From: https://blog.csdn.net/m0_74786138/article/details/144867207

相关文章

  • 百万架构师的第二课:设计模式:Spring 源码版本命名规则及下载安装
    第二章--SpringWeb应用开发篇二、Spring源码版本命名规则及下载安装2.1、Spring源码版本命名规则(1)首先看看某些常见软件的版本号:LinuxKernel:0.0.1,1.0.0,2.6.32,3.0.18...,若用X.Y.Z表示,则偶数Y表示稳定版本,奇数Y表示开发版本Windows:Windows98,Win......
  • DVWA靶场File Inclusion (文件包含) 漏洞所有级别通关教程及源码解析
    文件包含文件包含漏洞(FileInclusionVulnerability)是一种常见的网络安全漏洞,主要出现在应用程序中不安全地处理文件路径时。攻击者可以利用此漏洞执行恶意文件,或者访问不该被访问的文件1.low有3个页面随便点击一个,可以在url处发现传参点访问:http://127.0.0.1/DVWA/vulner......
  • flask框架土家风景文化管理平台毕设源码+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于土家风景文化管理的研究,现有研究多集中在土家文化的民俗、艺术等方面的单一展示,专门针对土家风景文化管理平台这种综合性管理模式......
  • flask框架微社区综合服务疫情防控管理系统毕设源码+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于疫情防控管理的研究,现有研究主要以宏观层面的区域防控、医疗资源调配等为主,专门针对微社区综合服务疫情防控管理的研究较少。在国......
  • 基于PLC的电梯控制系统(论文+源码)
    1.系统设计电梯采用了PLC控制方式,通过对PLC进行逻辑程序设计,电梯不仅在控制水平上得到了质的提升,同时在安全性上也得到了大大提高。控制系统在构造上实现了简洁化,不仅优化了硬件接线方便了线路施工,同时对控制要求的改变或增加可以很轻松的完成,在系统安全运行性上也有大幅度的......
  • 基于单片机的仓库环境无线监测系统(论文+源码)
    1系统方案设计根据系统功能的设计要求,展开仓库环境无线监测系统设计。系统以STM32单片机作为主控核心,通过DHT11温湿度传感器、CO2传感器、光敏电阻实现仓储环境数据的温度、湿度、CO2浓度、光照强度监测,监测数据不仅能够通过OLED液晶实时显示,还能通过WiFi无线通信模块与Web端......
  • LockSupport底层源码分析(二)
    目录blocker对象分析基本作用内存屏障效果写入过程实际应用其他线程可见性 诊断和监控blocker对象分析publicclassLockSupport{publicstaticvoidpark(Objectblocker){//1.设置blockerThreadt=Thread.currentThread();......
  • springboot527基于Java企业项目管理系统(论文+源码)_kaic
    摘 要如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统企业项目管理系统信息管理难度大,容错率低,管理人员处理数据费工费时,所以专门为解决这个难题开发了一个企业项......
  • springboot526基于Java的大学生考勤系统的设计与实现(论文+源码)_kaic
    摘  要信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理......
  • 【Java项目】基于SpringBoot+Vue的宠物救助及领养平台的设计与实现(源码+LW+包运行)
    源码获取:https://download.csdn.net/download/u011832806/90001525基于SpringBoot+Vue的宠物救助及领养平台开发语言:Java数据库:MySQL技术:SpringBoot+MyBatis+Vue.js工具:IDEA/Ecilpse、Navicat、Maven宠物救助及领养平台是一个专注于宠物保护和幸福的在线平台。它致力于......