当前位置: 首页 > news >正文

upload-labs靶场Pass-10

upload-labs靶场Pass-10

在这里插入图片描述
分析源码

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini");$file_name = trim($_FILES['upload_file']['name']);$file_name = deldot($file_name);//删除文件名末尾的点$file_ext = strrchr($file_name, '.');$file_ext = strtolower($file_ext); //转换为小写$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA$file_ext = trim($file_ext); //首尾去空if (!in_array($file_ext, $deny_ext)) {$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH.'/'.$file_name;if (move_uploaded_file($temp_file, $img_path)) {$is_upload = true;} else {$msg = '上传出错!';}} else {$msg = '此文件类型不允许上传!';}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}

分析源码

这段 PHP 代码的功能是处理文件上传,具体步骤如下:初始化变量:$is_upload 被设置为 false,用于标记文件是否成功上传。
$msg 被初始化为 null,用于存储任何错误消息。
检查表单提交:代码首先检查是否有表单提交(isset($_POST['submit']))。
检查上传目录:使用 file_exists(UPLOAD_PATH) 检查指定的上传目录是否存在。如果不存在,设置 $msg 为相应的错误信息。
定义禁止的文件扩展名:$deny_ext 数组包含了一系列不允许上传的文件扩展名(如 .php, .html, .jsp 等),以防止上传潜在的恶意文件。
处理上传文件:从 $_FILES['upload_file'] 中获取上传文件的名称,并进行处理:
使用 trim() 去除文件名两端的空格。
调用 deldot($file_name) 函数(假设该函数用于删除文件名末尾的点)。
使用 strrchr() 获取文件扩展名,并将其转换为小写。
使用 str_ireplace() 去除扩展名中的 ::$DATA 字符串(这通常是为了防止某些攻击)。
使用 trim() 去除扩展名两端的空格。
检查文件扩展名:使用 in_array() 检查文件扩展名是否在禁止的扩展名列表中。如果不在禁止列表中,继续处理上传。
移动上传文件:使用 move_uploaded_file() 将临时文件移动到指定的上传路径。如果成功,设置 $is_upload 为 true;如果失败,设置 $msg 为“上传出错!”。
处理不允许的文件类型:如果文件扩展名在禁止列表中,设置 $msg 为“此文件类型不允许上传!”。
处理上传目录不存在的情况:如果上传目录不存在,设置 $msg 为“UPLOAD_PATH 文件夹不存在,请手工创建!”。
总结
这段代码的主要功能是安全地处理文件上传,确保上传的文件不包含潜在的恶意代码(通过检查文件扩展名),并提供相应的错误消息以便用户了解上传过程中的问题。

原理

发现他对去除点和空格只进行了一遍,没有循环遍历检查

所以我们可以构造出. .文件如1.php. .即点,空格,点
这样,他在进行检查时候
使用 trim() 去除文件名两端的空格。1.php. .
调用 deldot($file_name) 函数(假设该函数用于删除文件名末尾的点) 。 1.php. 此处点后有个空格
使用 strrchr() 获取文件扩展名,并将其转换为小写。1.php. 空格还没有去除
使用 str_ireplace() 去除扩展名中的 ::$DATA 字符串(这通常是为了防止某些攻击)。1.php. 空格还没有去除
使用 trim() 去除扩展名两端的空格。1.php. 空格去除

然后上传到服务点为1.php.文件,由于Windows特性,最后一个点会被去除,变成1.php,最终上传成功。

上传

上传文件

<?php phpinfo(); ?>

在这里插入图片描述

抓包

在这里插入图片描述

修改报文

在这里插入图片描述

放包,访问

在这里插入图片描述


http://www.mrgr.cn/news/55562.html

相关文章:

  • gbn,sr和tcp的区别
  • SaaS架构:中央库存系统架构设计
  • 【Golang】合理运用泛型,简化开发流程
  • 程序员必须掌握的消息中间件-RocketMQ
  • 【GAMES101笔记速查——Lecture 14 Ray Tracing2】
  • perl文件测试操作符及其意义
  • PH47代码框架软件二次开发极简教程
  • HarmonyOS开发 - ohpm环境变量配置
  • JAVA课设-图书指引系统(前后端分离)
  • 期权懂|股票下跌时可以使用期权止损吗?
  • 绝对差值的和
  • 【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-1
  • 高级java每日一道面试题-2024年10月19日-消息队列[RabbitMQ]-RabbitMQ中积压了大量的消息,如何处理?
  • Saprk:数据插入的优化(forachPartition)
  • 电能表预付费系统-标准传输规范(STS)(15)
  • Hadoop---HDFS(2)
  • A Graph-Transformer for Whole SlideImage Classification文献笔记
  • arm_acle.h找不到
  • 基于递推式最小二乘法的PMSM参数辨识MATLAB仿真模型
  • 六、栈————相关概念详解
  • ChatGPT4o、o1 谁才是最佳大模型?
  • DDD话语批评之一:评“状态和事件本质相同”[全文]
  • 稀疏表示的图像修复、图像退化、白噪声
  • Linux conda activate报错:CondaError: Run ‘conda init‘ before ‘conda activate‘
  • 算法|牛客网华为机试1-10C++
  • 拥抱云开发的未来:腾讯云数据库、云模板与AI智能化的应用场景探索