文件上传之upload-labs 1~5 详细介绍

2023-10-28

一、Pass-01(前端js验证)

1.1 原理描述

在文件上传时,用户选择文件时,或者提交时,有些网站会对前端文件名进行验证,一般检测后缀名,是否为上传的格式。如果上传的格式不对,则弹出提示文字。此时数据包并没有提交到服务器,只是在客户端通过 js 文件进行校验,验证不通过则不会提交到服务器进行处理。

1.2 实验操作

试着上传一个php文件,出现一个前端验证的提示,表示客户端只是通过js文件进行了验证,没有提交到服务器里
在这里插入图片描述

1.3 查看源码

function checkFile() {
    var file = document.getElementsByName('upload_file')[0].value;
    if (file == null || file == "") {
        alert("请选择要上传的文件!");
        return false;
    }
    //定义允许上传的文件类型
    var allow_ext = ".jpg|.png|.gif";
    //提取上传文件的类型
    var ext_name = file.substring(file.lastIndexOf("."));
    //判断上传文件类型是否允许上传
    if (allow_ext.indexOf(ext_name + "|") == -1) {
        var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
        alert(errMsg);
        return false;
    }
}

1.4 绕过方法

禁用js脚本,即F12查看器 找到并删掉代码return checkFile()
在这里插入图片描述
在这里插入图片描述
再试着上传看看,上传成功
在这里插入图片描述
复制路径试着访问一下,可以访问成功
在这里插入图片描述

二、Pass-02(服务端MIME验证)

根据提示:本pass在服务端对数据包的MIME进行检查!

2.1 原理描述

有些上传模块,会对 http 的类型头进行检测,如果是图片类型,允许上传文件到服务器,否则返回上传失败。因为服务端是通过 content-type 判断类型,content-type 在客户端可被修改。则此文件上传也有可能被绕过的风险。

2.2 实验操作

在这里插入图片描述

2.3 查看源码

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name']            
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '文件类型不正确,请重新上传!';
        }
    } else {
        $msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';
    }
}

2.4 绕过方法

burp抓包,修改content-type字段
Content-Type: image/jpeg 或(image/png)或(image/gif)
在这里插入图片描述
显示上传成功,试着进行访问
在这里插入图片描述

三、Pass-03(黑名单绕过)

3.1 原理描述

上传模块,有时候会写成黑名单限制,在上传文件的时获取后缀名,再把后缀名与程序中黑名单进行检测,如果后缀名在黑名单的列表内,文件将禁止文件上传。

3.2 实验操作

提示:不允许上传.asp、.aspx、.php、.jsp后缀文件
在这里插入图片描述

3.3 查看源码

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array('.asp','.aspx','.php','.jsp');
        $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.'/'.date("YmdHis").rand(1000,9999).$file_ext;            
            if (move_uploaded_file($temp_file,$img_path)) {
                 $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

3.4 绕过方法

大小写绕过(现在一般不可行)

在这里插入图片描述
我们发现,大小写绕过失败

上传黑名单以外的后缀名即可

iis中间件:可以上传 asa 、cer 、cdx 、ashx 这些后缀
apache中间件:phtml、php3、php5、pht等
在这里插入图片描述
成功上传
在不同的中间件中有特殊的情况,如果在 apache 可以开启 application/x-httpd-php
在 AddType application/x-httpd-php .php .phtml .php3
后缀名为 phtml 、php3 均被解析成 php 有的 apache 版本
在这里插入图片描述

四、Pass-04(. htaccess 绕过上传)

4.1 htaccess是什么

htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
启用.htaccess
需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:AccessFileName .config 。
在这里插入图片描述
在这里插入图片描述

4.2 查看源码

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1",".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",".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 . '文件夹不存在,请手工创建!';
    }
}

4.3 实验操作

提示:
本pass禁止上传.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.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后缀文件!
在这里插入图片描述

4.4 绕过方法

上传.htaccess 到网站里.htaccess 内容是
<FilesMatch “jpg”>
SetHandler application/x-httpd-php

再上传恶意的 jpg 到.htaccess 相同目录里,访问图片即可获取执行脚本
在这里插入图片描述
在这里插入图片描述
允许上传.htaccess文件
接着上传一个jpg格式的文件,我是将一句话木马文件转化为jpg
在这里插入图片描述
在这里插入图片描述
上传成功,试着访问目录
在这里插入图片描述

五、Pass-05(.user.ini绕过)

5.1 ini文件?

.ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式,统管windows的各项配置,一般用户就用windows提供的各项图形化管理界面就可实现相同的配置了。但在某些情况,还是要直接编辑ini才方便,一般只有很熟悉windows才能去直接编辑。百度百科

5.2 查看源码

$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");
        $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 . '文件夹不存在,请手工创建!';
    }
}

根据源码显示,过滤了.ini文件,这也是和pass-04的区别,第四关是过滤了.htaccess文件

5.3 绕过方法

先看一下提示,上传的目录存在一个名为readme.php文件
因为.ini后缀的文件可以上传,所以我们可以上传一个.user.ini文件来改变服务器配置
具体方法:上传一个.user.ini,再上传一个图片马,包含起来进行getshell。不过前提是含有.user.ini的文件夹下需要有正常的php文件,否则也不能包含了(正常的文件即本身自带的readme.php)。
我们就可以利用到readme.php包含一个我们上传的木马文件,再连接readme.php文件达到连接一句话木马的目的
.ini的文件内容:auto_prepend_file=shell.jpg(其中shell.jpg是自己上传的木马图片)

第一步:首先上传一个.user.ini文件

在这里插入图片描述
在这里插入图片描述
显示上传成功
在这里插入图片描述

第二步:然后再上传一个一句话木马文件,名字需要与.user.ini配置的文件名相同

因为jpg没有在黑名单的限制之内,所以可以修改后缀名为jpg绕过上传限制
在这里插入图片描述
这时,在服务器端的upload文件夹会存在三个文件,原先服务器就存在的readme.php和我们上传的.user.ini shell.jpg
在这里插入图片描述
最后就是用菜刀或蚁剑连接readme.php,达到连接shell.jpg一句话木马的效果
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件上传之upload-labs 1~5 详细介绍 的相关文章

  • 空间与虚拟服务器,虚拟空间与服务器区别

    虚拟空间与服务器区别 内容精选 换一换 当云硬盘容量空间不足时 可以有如下处理方式 创建一块新的云硬盘 并挂载给云服务器 具体操作请参见购买云硬盘 扩容原有云硬盘容量 系统盘和数据盘均支持扩容 具体操作请参见云硬盘扩容 清理云硬盘的空间 具
  • UE4 运行后视角切换到Cinecamera相机的三种方法

    目的 解决运行后Cinecamera相机无法自动切换到玩家视角 方法 1 调用这个蓝图节点 这个最简单 适合只考虑切换视角的需求 2 制作并播放关卡序列 这个有点麻烦 适合需要做关卡序列动画 3 创建GameMode和Pawn 添加Cine
  • 人脸识别之人脸检测算法

    人脸识别的一般步骤 人脸检测 gt 人脸对齐 gt 人脸特征提取 gt 计算人脸的差值 三元组损失 中心损失 gt 差值小于某一阈值则为同一个人 差值大于某一阈值则不是同一人 本文将对每一个步骤的技术现状 进行分析 并尝试实现其中最优的几种
  • ARMv8 Linux内核异常处理过程分析

    看了Linaro提供的开源ARMv8 Linux内核源码 发现ARMv8异常处理与ARMv7及之前的架构有所不同 简单分析 LinaroARMv8工程 http www linaro org engineering engineering
  • MySQL主从同步配置及相关坑

    主 mysqld 主从同步主配置开始 server id 1 节点ID 确保唯一 log bin master bin 开启mysql的binlog日志功能 sync binlog 1 控制数据库的binlog刷到磁盘上去 0 不控制 性能
  • C++如何初始化顺序表

    顺序表可以使用以下代码初始化 include
  • 如何利用chatGPT提升自己

    经过一个月的使用 我可以很肯定地告诉大家 学习是ChatGPT最能够帮助普通人的一个重要功能 此时我们不必去过度担心是否会被AI替代 而是应该注重如何利用好ChatGPT来提升自身能力 ChatGPT所学习和整理的文本量都超过了人类一生的范

随机推荐

  • 用C语言创建基本的栈与队列

    目录 一 栈 1 什么是栈 2 数组栈与链式栈哪个更优 3 栈的实现 Stack h Stack c lt 1 gt StackInit lt 2 gt StackPop lt 3 gt StackPush lt 4 gt StackDes
  • 基于Spring Cloud架构应用Spring Cloud Alibaba Nacos

    记录 296 场景 基于Spring Cloud架构应用Nacos 版本2 1 0 包括Nacos部署 微服务集成Nacos 微服务注册 微服务配置 微服务调用 RestTemplate和Spring Cloud OpenFeign 版本
  • python数据处理——双y轴图

    画图要求 x轴表示时间 两个y轴 y轴的单位不一致 例如 x轴表示时间 y1表示情感值 y2表示次数 颜色对应表查询网址 颜色代码对应表 或是调用python中的画图模块 Choosing Colormaps in Matplotlib M
  • TypeScript基础知识(2)原始类型 作用域 Object类型

    TypeScript TypeScript是JavaScript的超集 TypeScript JavaScript 类型系统 ES6 或者更后版本 会被编译为JavaScript 配置步骤 1 npm install g typesrcip
  • [Unity 3D] 簡單瞭解「Collision碰撞」與「Trigger觸發」

    Unity 3D是套非常好用的遊戲開發引擎 內建的物理系統讓使用者不需寫長長的程式碼 就能夠迅速設定好所有物件之間的碰撞關係 做出讓角色走不過去的牆 或是可以射穿牆壁的子彈等等 不過它的設定相當細 若是分不清其中差異 很容易就會陷入鬼打牆的
  • IT新技术

    1 物联网 含义 指物物相连的互联网 关键技术 RFID技术 传感器技术等 应用 物流 智能交通 智能医疗 智能家居等 2 大数据 巨量资料 海量 高增长率和多样化的信息资产 特点 4v 大量 多样 高速 价值密度低 应用 金融行业 电商行
  • 《战狼》演习中到底是靠什么代码攻破对方的指挥系统?

    战狼 演习中到底是靠什么代码攻破对方的指挥系统 红蓝双方正在进行军事演习 开局 红方发动了手速buff 仅用时3秒 便成功入侵了对方了指挥网络 旗开得胜 接下来让我们好好学习一下这段代码 敲黑板 啊 这 C语言的气息 通过红框标注的prin
  • SpringSecurity的使用

    Spring Security 是针对Spring项目的安全框架 也是Spring Boot底层安全模 块默认的技术选型 他可以实现强大的Web安全控制 对于安全控制 我们仅需要 引入 spring boot starter securit
  • Slor 条件查询提示:org.apache.http.ParseException: Invalid content type:

    今天在编写Solr查询条件时 启动单元测试 solr 提示如下错误信息 Caused by org apache http ParseException Invalid content type at org apache http ent
  • Unity小游戏-勇闯小岛(PC) 项目展示+完整项目源码

    游戏录像 游戏玩法 主角可以变换四种状态 玩家通过四种状态特有的技能来击败眼前的怪物闯关 切换到棕色 有一个一直围绕自己旋转的大摆斧攻击敌人 切换到绿色 可以抵挡一切的投掷物 但是无法攻击敌人 切换到粉色 切换瞬间可以发出飞镖 切换到蓝色
  • ChatGPT全宇宙!开启联网解除封印,插件生态系统即将问世!

    OpenAI 冷不丁又宣布了惊爆全球的消息 ChatGPT 可以集成第三方插件了 封印解除后 ChatGPT 俨然已经迎来了属于自己的 全知全能 宇宙 网友直呼 AI 的 APP Store 时刻已来 今早醒来 全网都炸锅了 之前 大家都公
  • 硬盘的存储原理和内部架构

    首先 让我们看一下硬盘的发展史 1956年9月13日 IBM的IBM 350 RAMAC Random Access Method of Accounting and Control 是现代硬盘的雏形 整个硬盘需要50个直径为24英寸表面涂
  • String未声明标识符号

    String未声明标识符号 问题描述 原因 解决方法 整体结构为 主函数 头文件的引入 检测函数头文件 检测函数 问题描述 原因 定义的String为CV String 我们需要std string 解决方法 使用string 报错 str
  • Ubuntu16.04搭建fisco-bcos和webase中间件开发环境

    搭建fisco bcos和webase中间件开发环境 依赖安装 node环境搭建 webase中间件依赖配置 Java MySQL python mysql mysql安装 mysql配置test用户 不建议给root用户授权远程访问 搭建
  • 【SDG代码精读】More Control for Free! Image Synthesis with Semantic Diffusion Guidance【SDG】

    SDG代码精读 More Control for Free Image Synthesis with Semantic Diffusion Guidance SDG 1 首先看看这篇文章的主要贡献 2 主要代码的分析 1 主要的采样模块 2
  • nginx二级域名配置阿里云免费SSL证书浏览器提示不安全

    阿里云免费SSL证书 由图可知SSL证书只作用于 xxx top 与 www xxx top 一个主域名和一个子域名 如果你用nginx添加证书至 xxx xxx top 二级域名 则需要购买通配符证书
  • Java中的二维数组排序——多条件排序

    目录 重写Array sort 方法 使用lambda表达式重写Array sort 方法 重写Array sort 方法 输入的排序数组的形式为int 2 例如 int test 7 0 4 4 7 1 5 0 6 1 5 2 排序的逻辑
  • 打扮一下咱们的开发工具--更换IDEA主题

    当我们安装一个新的IDEA工具时 第一次进入时会提示我们选择一个themes 但是只有两个风格 如下图 我们可以选择自己喜欢的主题风格吗 当然是可以设置的啦 亲测按以下方式设置IntelliJ IDEA 和PyCharm 都可以 一 下载我
  • Android UI组件学习——AutoCompleteTextView

    Android UI组件学习 自动完成文本框 AutoCompleteTextView 的功能和用法 AutoCompleteTextView还派生了一个子类 MultiAutoCompleteTextView 该子类功能与AutoComp
  • 文件上传之upload-labs 1~5 详细介绍

    一 Pass 01 前端js验证 1 1 原理描述 在文件上传时 用户选择文件时 或者提交时 有些网站会对前端文件名进行验证 一般检测后缀名 是否为上传的格式 如果上传的格式不对 则弹出提示文字 此时数据包并没有提交到服务器 只是在客户端通