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

【HW系列】—web常规漏洞(文件上传漏洞)

文章目录

    • 一、简介
    • 二、危害
    • 三、文件检测方式分类
    • 四、判断文件检测方式
    • 五、文件上传绕过技术
    • 六、漏洞防御措施

一、简介

文件上传漏洞是指Web应用程序在处理用户上传文件时,未对文件类型、内容、路径等进行严格校验和限制,导致攻击者可上传恶意文件(如WebShell、木马、病毒等)到服务器,进而控制服务器或执行非法操作。其核心原理在于服务器对上传文件的处理逻辑存在缺陷,例如未限制可执行文件的存储路径、未验证文件真实类型等。根据统计,约30%的Web应用存在此类漏洞。

二、危害

远程代码执行:上传WebShell(如PHP、ASP脚本)可直接执行系统命令,控制服务器。

数据泄露:攻击者可访问敏感文件(如数据库配置、用户信息)。

服务器瘫痪:通过上传大文件或恶意程序发起DDoS攻击。

权限提升:结合路径遍历漏洞覆盖系统关键文件,或篡改网站内容。

供应链攻击:上传恶意图片或跨域策略文件(如crossdomain.xml),控制客户端行为。

三、文件检测方式分类

在这里插入图片描述

文件上传检测主要分为以下五类:
客户端检测:通过JavaScript校验文件扩展名和大小,易被禁用或绕过。

服务端MIME检测:验证HTTP请求的Content-Type字段(如image/jpeg),但可伪造。

扩展名检测:黑名单或白名单校验文件后缀,易被大小写、双扩展名(如.php.jpg)绕过。

文件内容检测:检查文件头(Magic Number)或二次渲染图片破坏恶意代码。

目录路径检测:限制上传路径合法性,但可能被路径遍历(如…/)突破。

四、判断文件检测方式

客户端检测:
上传非法文件时,未发送请求即弹出错误提示(如“仅允许.jpg文件”)。

服务端检测:

MIME检测:修改Content-Type为合法类型(如image/png)可绕过。

扩展名检测:尝试上传非常见后缀(如.phtml、.php5)测试黑名单覆盖范围。

内容检测:添加合法文件头(如GIF89a)或嵌入恶意代码于图片元数据(Exif)。

五、文件上传绕过技术

在这里插入图片描述

扩展名绕过:

  • 双扩展名:.php.jpg(Apache解析漏洞)。

  • 空字节截断:shell.php%00.jpg(PHP版本<5.3.4)。

  • 大小写混淆:.pHp、.AsP。
    内容欺骗:

  • 图片马:通过copy /b 1.jpg+shell.php 2.jpg合并文件。

  • Exif元数据注入:使用工具(如ExifTool)插入恶意代码。
    解析漏洞利用:

  • Apache解析规则:从右向左解析扩展名(如1.php.xxx)。

  • IIS目录路径解析:/upload/shell.asp/1.jpg触发ASP解析。
    条件竞争:快速上传并访问临时文件,绕过删除逻辑。

六、漏洞防御措施

严格校验机制:

  • 白名单验证:仅允许特定扩展名(如.jpg、.png)和MIME类型。

  • 文件内容检测:使用finfo库验证文件头,二次渲染图片破坏隐藏代码。
    存储安全:

  • 随机重命名:使用UUID或哈希值生成文件名,避免直接访问。

  • 非Web目录存储:上传文件存放于不可通过URL直接访问的路径。

  • 权限控制:目录设置为不可执行(如chmod -x uploads/)。
    服务器加固:

  • 禁用危险函数:如PHP的system()、exec()。

  • 配置安全:Apache禁用.htaccess,Nginx限制解析特定扩展名。
    其他措施:

  • 日志监控:记录上传行为,实时检测异常(如高频上传)。

  • CDN分发:通过CDN提供静态文件,隔离执行风险。

总结
文件上传漏洞的防御需从输入验证、存储隔离、服务器配置多层面综合防护。开发中应优先采用白名单机制,避免依赖客户端检测,并结合定期渗透测试修复潜在风险。攻击手法与防御技术持续演进,需紧跟安全社区动态更新防护策略。

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

相关文章:

  • 如何实现 C/C++ 与 Python 的通信
  • python炸鱼船
  • 使用AutoKeras2.0的AutoModel进行结构化数据回归预测
  • 好用但不常用的Git配置
  • ULVAC VWR-400M/ERH 真空蒸发器 Compact Vacuum Evaporator DEPOX (VWR-400M/ERH)
  • P1068 [NOIP 2009 普及组] 分数线划定
  • PPT连同备注页(演讲者模式)一块转为PDF
  • 第三十二天打卡
  • 项目三 - 任务8:实现词频统计功能
  • MongoDB 快速整合 SpringBoot 示例
  • 2025.05.22-得物春招机考真题解析-第二题
  • ollama list模型列表获取 接口代码
  • OPC Client第5讲(wxwidgets):初始界面的事件处理;按照配置文件初始化界面的内容
  • 什么是BFC,如何触发BFC,BFC有什么特性?
  • python做题日记(9)
  • Leetcode 3557. Find Maximum Number of Non Intersecting Substrings
  • 【C++进阶篇】初识哈希
  • Spring Boot——自动配置
  • 免费轻量便携截图 录屏 OCR 翻译四合一!提升办公效率
  • 使用 Vuex 实现用户注册与登录功能
  • 进程通信(管道,共享内存实现)
  • 电池预测 | 第28讲 基于CNN-GRU的锂电池剩余寿命预测
  • 快速上手SHELL脚本常用命令
  • 【无标题】前端如何实现分页?
  • 【自然语言处理与大模型】大模型Agent四大的组件
  • 小巧高效的目录索引生成软件
  • 云原生架构设计相关原则
  • android实现使用RecyclerView详细
  • 华为云Flexus+DeepSeek征文 | Flexus X实例助力 Dify-LLM 一键部署:性能跃升与成本优化的革新实践
  • 曼昆经济学原理第九版目录