文件上传

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

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();
?>

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

  1. DVWA之File Upload (文件上传漏洞)

    目录 Low: Medium: 方法一:抓包修改文件的type 方法二:00截断 High: Impossible : Low: 源代码: <?php if( isset( $_POST[ 'U ...

  2. DVWA靶机--简单的文件上传漏洞

    简单的文件上传漏洞(靶机安全级别:low) 事先准备好一句话木马,密码为pass 上传一句话木马,显示上传路径(一般网站是不会显示路径的,这里靶机为了方便你测试漏洞,直接显示出了路径: ../../h ...

  3. jQuery File Upload 文件上传插件使用一 (最小安装 基本版)

    jQuery File Upload 是一款非常强大的文件上传处理插件,支持多文件上传,拖拽上传,进度条,文件验证及图片音视频预览,跨域上传等等. 可以说你能想到的功能它都有.你没想到的功能它也有.. ...

  4. jQuery File Upload文件上传插件简单使用

    前言 开发过程中有时候需要用户在前段上传图片信息,我们通常可以使用form标签设置enctype=”multipart/form-data” 属性上传图片,当我们点击submit按钮的时候,图片信息就 ...

  5. jQuery File Upload 文件上传插件使用二 (功能完善)

    使用Bootstrap美化进度条 Bootstrap现在几乎是人尽皆知了,根据它提供的进度条组件, 让进度条显得高大尚点 正因为其功能强大,js模块文件之间牵连较深 不好的地方耦合度非常高 重要的参数 ...

  6. jquery file upload 文件上传插件

    1. jquery file upload 下载 jquery file upload Demo 地址:https://blueimp.github.io/jQuery-File-Upload/ jq ...

  7. PHPcms9.6.0任意文件上传漏洞直接getshell 利用教程

    对于PHPcms9.6.0 最新版漏洞,具体利用步骤如下: 首先我们在本地搭建一个php环境,我这里是appserv或者使用phpnow (官网下载地址:http://servkit.org/) (只 ...

  8. DVWA各等级文件上传漏洞

    file upload 文件上传漏洞,攻击者可以通过上传木马获取服务器的webshell权限. 文件上传漏洞的利用是 够成功上传木马文件, 其次上传文件必须能够被执行, 最后就是上传文件的路径必须可知 ...

  9. DVWA 黑客攻防演练(五)文件上传漏洞 File Upload

    说起文件上传漏洞 ,可谓是印象深刻.有次公司的网站突然访问不到了,同事去服务器看了一下.所有 webroot 文件夹下的所有文件都被重命名成其他文件,比如 jsp 文件变成 jsp.s ,以致于路径映 ...

  10. 【DVWA】File Upload(文件上传漏洞)通关教程

    日期:2019-08-01 17:28:33 更新: 作者:Bay0net 介绍: 0x01. 漏洞介绍 在渗透测试过程中,能够快速获取服务器权限的一个办法. 如果开发者对上传的内容过滤的不严,那么就 ...

随机推荐

  1. 【小 w 的代数】(提供一种 n^2 log 的解法)

    前言: 卖点 记录 CTH 的发言 CTH:你这真是 n^3 的 CTH:我也不知道你线段树优化个啥,\(n^3 \log n\) CTH:你优化到哪了啊 CTH:······你从赛时打这个题到现在 ...

  2. 常见CDN绕过姿势

    CDN绕过: 1.子域名 子域名查询: 在一些网站中有可能只加速了主站,而一些其它子域名和主站在同一个C段或者同服务器 利用子域名查询工具: http://tool.chinaz.com/subdom ...

  3. AOT漫谈专题(第七篇): 聊一聊给C#打造的节点依赖图

    一:背景 1. 讲故事 上一篇我们聊过AOT编程中可能会遇到的三大件问题,而这三大件问题又是考验你对AOT中节点图的理解,它是一切的原点,接下来我就画几张图以个人的角度来解读下吧,不一定对. 二:理解 ...

  4. 解密prompt系列41. GraphRAG真的是Silver Bullet?

    这一章我们介绍GraphRAG范式,算着时间也是该到图谱了,NLP每一轮新模型出来后,往往都是先研究微调,然后各种预训练方案,接着琢磨数据,各种主动学习半监督,弱监督,无监督,再之后就到图谱和对抗学习 ...

  5. SLS:整层剪掉!基于降维特征聚类的PETL模型剪枝新方法 | ECCV'24

    来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: Straightforward Layer-wise Pruning for More Efficient Visual Adaptation ...

  6. 使用 FastGPT 实现最佳 AI 翻译工作流:全世界最信达雅的翻译

    想让AI翻译既准确又地道?本文将教你如何利用 FastGPT 打造一个革命性的翻译工作流. 它不仅支持文本翻译,还能直接处理文档,更能通过自定义术语表确保专业术语的翻译准确性,堪称翻译神器! 直接看效 ...

  7. Python一些常见的技巧及语句!!

    题记:关于遇到的一些python代码或者不清楚用法的函数.类别等我会在这里记录下来,方便日后学习和交流.之后研究生三年我会持续更新学习,可能得记录几千个吧. 1. copy.copy()和copy.d ...

  8. Qt Creator pro文件常见配置

    HEADERS:指定项目的头文件(.h) SOURCES:指定项目的源文件(.cpp) FORMS:指定协议UIC处理的由Qt Designer生成的.ui文件 RESOURCES:指定需要rcc处理 ...

  9. .NET 8 高性能跨平台图像处理库 ImageSharp

    前言 传统的 System.Drawing 库功能丰富,但存在平台限制,不适用于跨平台开发..NET 8 的发布,ImageSharp 成为了一个更好的选择. ImageSharp 是一个完全开源.高 ...

  10. 域渗透之初识Kerberos认证过程

    目录 Kerberos协议中的角色 关键名词 Kerberos协议的工作流程 AS_REQ & AS_REP TGS_REQ & TGS_REP AP_REQ PAC 总结 Kerbe ...