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

upload-labs靶场Pass-21

upload-labs靶场Pass-21

本关上传方法众多,但是应该考察的是数组后缀绕过,所以我的上传围绕此展开

1.分析源码

$is_upload = false; // 初始化上传状态为false
$msg = null; // 初始化消息变量为null

// 检查是否有文件上传
if(!empty($_FILES['upload_file'])){
    // 定义允许的MIME类型
    $allow_type = array('image/jpeg','image/png','image/gif');
    
    // 检查上传文件的MIME类型是否在允许的类型中
    if(!in_array($_FILES['upload_file']['type'],$allow_type)){
        $msg = "禁止上传该类型文件!"; // 如果不允许,设置错误消息
    }else{
        // 检查文件名,如果没有提供保存名称,则使用上传文件的原始名称
        $file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name'];
        
        // 将文件名按点分割为数组,转换为小写
        if (!is_array($file)) {
            $file = explode('.', strtolower($file));
        }

        // 获取文件扩展名
        $ext = end($file);
        // 定义允许的文件后缀
        $allow_suffix = array('jpg','png','gif');
        
        // 检查文件扩展名是否在允许的后缀中
        if (!in_array($ext, $allow_suffix)) {
            $msg = "禁止上传该后缀文件!"; // 如果不允许,设置错误消息
        }else{
            // 生成最终的文件名
            $file_name = reset($file) . '.' . $file[count($file) - 1];
            // 获取临时文件路径
            $temp_file = $_FILES['upload_file']['tmp_name'];
            // 定义文件上传的目标路径
            $img_path = UPLOAD_PATH . '/' .$file_name;
            
            // 尝试将临时文件移动到目标路径
            if (move_uploaded_file($temp_file, $img_path)) {
                $msg = "文件上传成功!"; // 上传成功,设置成功消息
                $is_upload = true; // 更新上传状态为true
            } else {
                $msg = "文件上传失败!"; // 上传失败,设置错误消息
            }
        }
    }
}else{
    $msg = "请选择要上传的文件!"; // 如果没有文件上传,设置错误消息
}

审计代码发现用之前的方法,比如文件包含漏洞之类就可以完成上传,但本关测试的应该是数组后缀上传。

 if (!is_array($file)) {
            $file = explode('.', strtolower($file));
        }

2.上传原理

==此处判断$fiel是不是数组,不是数组就将文件名按点分开为数组,然后继续执行,通过end()函数获取上传文件后缀,在进行白名单比 对。如果是数组,直接进行白名单比对。
正常我们上传一个比如test.gif文件,先分割为数组,end获取末尾gif后缀,与白名单比对,无误,上传
我们可以在包里修改使其上传一个数字,比如将制作的test.gif,抓包修改包里命名为数组,test php gif,在检查时就会用末尾的gif检查,发现符合白名单,绕过成功,保存的时候,Windows保存为test.php

==

3.上传

上传文件准备
test.php

<?php
phpinfo();
?>

上传
在这里插入图片描述
抓包
在这里插入图片描述
修改
在这里插入图片描述
上传成功
在这里插入图片描述
OVER!!!


http://www.kler.cn/a/371120.html

相关文章:

  • 深度剖析RabbitMQ:从基础组件到管理页面详解
  • 【数字化】华为-用变革的方法确保规划落地
  • 提供的 IP 地址 10.0.0.5 和子网掩码位 /26 来计算相关的网络信息
  • 【Axure视频教程】中继器表格——拖动排序
  • SQL面试题1:连续登陆问题
  • rknn环境搭建之docker篇
  • 网络中的一些基本概念
  • GPT-Sovits-1-数据处理
  • Word设置只读后,为什么还能编辑?
  • 【Mac】Python 环境管理工具
  • Java的ArrayList集合
  • windows 驱动实例分析系列: NDIS 6.0的Filter 驱动改造(三)
  • ARCGIS PRO SDK 实现图层标注
  • 深入理解Java虚拟机(六)
  • 知识吾爱纯净版小程序系统 leibiao SQL注入漏洞复现(XVE-2024-30663)
  • 实验九 视图的使用
  • Hexo提交部署命令与Git Bash Here控制终端中按下Ctrl+C无法中断hexo s的解决办法
  • 开源一个开发的聊天应用与AI开发框架,集成 ChatGPT,支持私有部署的源码
  • SpringMVC学习(3)
  • Android的SQLiteOpenHelper类 笔记241027
  • 开发了一个成人学位英语助考微信小程序
  • Spark SQL DSL
  • QNAP威联通NAS怎么通过HBS3设置定时备份计划至外部存储
  • Python日志系统详解:Logging模块最佳实践
  • 如何选择适合自己的 Python IDE
  • 「C/C++」C++11 之 std::pair单元存储的途径