首页 > 其他分享 >upload-labs-master第21关详细教程

upload-labs-master第21关详细教程

时间:2024-12-24 20:30:14浏览次数:4  
标签:name upload 数组 labs file php 上传 21

环境配置

  1. 需要的东西

phpstudy-2018
链接: https://pan.baidu.com/s/1D9l13XTQw7o6A8CSJ2ff9Q
提取码:0278

32 位 vc 9 和 11 运行库
链接: https://pan.baidu.com/s/1pBV3W8UWJe0bmDl_cPFDQw
提取码:0278
upload-labs-master 靶场
链接: https://pan.baidu.com/s/1ERYzrlBe94PAi3A-WagLAw
提取码:0278

Burpsuit 安装
官网: Professional / Community 2024.9.5 | Releases

  1. 上述安装解压后,打开 phpstudy,点击启动

QQ_1732271061098

  1. 然后在本地浏览器输入 127.0.0.1 打开,显示如下界面表示成功

QQ_1732271133489

  1. upload-labs-master 解压后的整个文件目录复制到 .../PHPTutorial/WWW...,比如我的 C:\phpStudy2018\PHPTutorial\WWW,建议是将整个文件目录复制过来,修改目录名称为 upload(复制整个目录是因为防止文件零散,以后不便于管理)

QQ_1732271315958

  1. upload-labs-master (重命名的 upload) 根目录下创建 upload 文件夹,用来存储我们上传的文件,如果存在就不需要创建了

QQ_1732271489255

  1. 在浏览器输入 127.0.0.1/upload 或者未重命名的 127.0.0.1/upload-labs-master ,或者如果不是复制整个目录,而是目录中的文件到上述目录中,直接 127.0.0.1 即可

QQ_1732271596089

解题思路

  1. 查看这一关的源码,去上述的 upload 或者未重命名之前的 upload-labs-master 目录中,找到 21 关,然后以记事本打开 index.php

QQ_1734311735785

  1. 查看源码
$is_upload = false;
$msg = null;
if(!empty($_FILES['upload_file'])){
    //检查MIME
    $allow_type = array('image/jpeg','image/png','image/gif');
    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;
            } else {
                $msg = "文件上传失败!";
            }
        }
    }
}else{
    $msg = "请选择要上传的文件!";
}

解析:

检查的机制

// 这是表示 content-type 类型必须为这几个
$allow_type = array('image/jpeg','image/png','image/gif');

// 这是表示保存的文件名如果为空,就使用上传的文件的那个文件名,如果指定了保存的文件名,则使用指定的
$file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name'];

// file 如果不是数组,就将其变为数组,以 '.' 为分割,如 file=shell.php,那么就变为 file[0]=shell, file[1]=php
if (!is_array($file)) {
	$file = explode('.', strtolower($file));
}

// 按数组来取,取数组最后一个,如上述的就是php,而它的检查机制是需要是jpg,png,gif
$ext = end($file);
$allow_suffix = array('jpg','png','gif');

漏洞的存在

$file_name = reset($file) . '.' . $file[count($file) - 1];
  • 这个就是上述检查都通过后,实际最终的文件名形成,取数组第一个和最后一个拼接
  • file[0]=shell, file[1]=php,最终形成就是 shell.php
  • 这也是存在的漏洞,会发现它取的数组最后一个元素,我们考虑利用数组机制来绕过,如何利用呢

利用漏洞

  1. 由于刚开始不是数组,不是数组就会被上述直接变为数组,我们就直接手动让它变为数组,如何修改呢,是通过抓包修改参数解决
  2. 如赋值 file[0]=shell.php,这个是实际的木马源文件,也是我们想上传的,但是由于不是图片类型,content-type 不是满足的类型,通过抓包修改解决。
  3. 赋值 file[1]=null,... 以此类推,由于上述会取数组最后一个元素检查拓展名是否在白名单中,因此最后一个如 file[5]=jpg,这个赋值就只需要满足是 jpg,png,gif 中一个即可,使其检查通过
  4. 这样赋值后的数组,就能完美绕过上述的检查,由于 file[1]~file[4]=null,所以 count 函数计算出来的为 2,那么上述的拼接完整文件名部分就会导致取出 file[0]=shell.phpfile[2-1]=file[1]=null,然后会添加一个 . ,最终 shell.php. ,但实际最后一个 . 后没有内容,服务器会直接忽略,也就变成了 shell.php 作为服务器端保存的文件名,也就达到了绕过的要求

操作演示

  1. 准备一个一行木马文件,保存为 shell.php
<?php phpinfo(); ?>
  1. 打开 Burpsuit 软件,点击 open browser

QQ_1732274370172

  1. 在地址栏中输入 127.0.0.1/upload 进入靶场,然后点击 pass-21 ,选择上传的文件,准备上传(此时不点击上传), 填写保存名称,随意填写,因为后续会通过抓包修改的

QQ_1734312028567

  1. Burpsuite 中,点击 intercept is off 变为 intercept is on

QQ_1732274491172

  1. 回到靶场,点击上传,然后回到 Burpsuite ,会发现捕捉到了信息,然后找到下面的 content-type 修改为满足要求的,如 image/jpeg,image/png,image/gif
  2. 手动将 file 变为数组,修改 name=save_name[0] ,变为数组,然后将值修改为 shell.php ,然后复制一份,目的填写数组最后一个元素 save_name[3],修改为 png, 目的是跳过扩展名的检查,由于 save_name[1], save_name[2] 没有赋值,所以为空,也就是我们思路的那个样子

QQ_1734313180270

  1. 像上述修改后,此时点击左上角的 forward,让行这个抓包的请求,会发现文件上传成功了,也就是我们绕过了这个检查

QQ_1734313230023

  1. 在浏览器中访问上传文件的路径(不是在那个 Burpsuite 中的那个 open browser 打开的地址栏,在本地浏览器中),例如 http://127.0.0.1/upload/upload/shell.php ,如果成功执行了 PHP 代码,说明攻击成功。因为我重命名 upload-labs-masterupload,在这个子目录下的 upload 才是上传文件的保存路径,所以写了两个 upload

QQ_1732274875195

标签:name,upload,数组,labs,file,php,上传,21
From: https://www.cnblogs.com/xingzhuz/p/18628659

相关文章

  • 阅读报告 Science385,1318-1321(2024).
    论文:WenxuanJia etal.,Squeezingthequantumnoiseofagravitational-wavedetectorbelowthestandardquantumlimit.Science385,1318-1321(2024).DOI:10.1126/science.ado8069引力波是时空的涟漪,让空间发生微弱的扭曲,它的强度极弱.在测量引力波的时候,任何一......
  • FS2115C是一款低噪声、恒定频率(1 2MHz)的开关电容器倍压器。
    一般描述(百度翻译)FS2115C是一款低噪声、恒定频率(1.2MHz)开关电容倍压器。它产生2.7V至5V输入的稳压输出电压,输出电流高达250mA。该PW5410A外部元件数量少(VIN和VOUT处有一个跨接电容器和两个小型旁路电容器),非常适合小型电池供电应用。新的电荷泵架构可在空载时保持......
  • 《DNK210使用指南 -CanMV版 V1.0》第四十六章 车牌识别实验
    第四十六章车牌识别实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)正点原......
  • upload-labs实战打靶
    Pass-01:提示不支持php文件类型在控制器查看源代码,并修改文件输入类型修改完成,回车,上传文件,得到一个图像打开图像所在位置,复制网址,进入php页面pass-02:通过抓包,修改文件类型得到图像,复制图像的网址,在菜刀里打开pass-03:查看源代码显示,几种文件类型不支持,在抓包工具里......
  • 真题-2021年南海区C++组真题
    这套题包含了历年真题,十分重要!!!!要考试的同学可以参考一下!!此套题限时3小时。#A.NH.2021.01.笨鸟先飞题目描述多多是一只小菜鸟,都说笨鸟先飞,多多也想来个菜鸟先飞。于是它从0点出发,一开始的飞行速度为1米/秒,每过一秒多多的飞行速度比上一秒的飞行速度快2米/秒,问n秒......
  • 德普微一级代理 DP021N03FGLI DFN5*6 DPMOS N-MOSFET 30V 180A 1.8mΩ
    主要特点• Uses advanced MOSFET-DPMOS technology• Extremely low on-resistance RDS(on)• ExcellentQgxRDS(on) product(FOM)• Qualifiedaccording to JEDEC criteria (industrial grade)产品概述典型应用• Motorcontrol and drive• B......
  • NodeJS社区独居老人健康管理系统-毕业设计源码21353
    NodeJS社区独居老人健康管理系统摘  要随着科技的进步,信息技术已经深刻地影响了社会的各个领域。计算机的普及已经成为了不可或缺的一部分,它为我们提供了无限的可能性。该社区独居老人健康管理系统提供了多种功能,包括查看首页、个人中心、网站公告、健康资讯、医生信息、......
  • 基于Springboot的大学生心理健康管理系统的设计与实现-毕业设计源码21346
    目录摘要1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.1.1技术可行性2.1.2经济可行性2.1.3操作可行性2.1.4社会可行性2.2系统流程分析2.2.1系统开发流程2.2.2用户登录流程2.2.3系统操作流程2......
  • 2021-03-20 特殊完全平方数
    依然由2021-03-19特殊日期连续3个相同数-CSDN博客修改而来。使用FOR也一样:for(;b<=bb;)即可,这还解释?我写的每条语句已经很清晰了。逻辑上1不等重新取样重新计数;2相等计数;3达到条件输出并开始下一个平方数;4都不符合开始下一个平方数。void特殊完全平方数(){//缘由https:......
  • 【YashanDB知识库】YMP迁移过程中报错YAS-02143或YAS-02193
    本文内容来自YashanDB官网,原文内容请见https://www.yashandb.com/newsinfo/7802944.html?templateId=1718516【标题】YMP迁移过程中报错accountlock【关键字】YMP迁移accountlockopenssl【问题描述】YMP所在机器的openssl版本低于1.1.1,在安装YMP及内置库时使用了--deps将......