文件上传漏洞学习笔记


一、漏洞概述

  1. 定义 文件上传漏洞指未对用户上传的文件进行充分安全校验,导致攻击者可上传恶意文件(如Webshell、木马),进而控制服务器或执行任意代码。

  2. 危害等级 ⚠️ 高危漏洞(通常CVSS评分7.0+),可能导致:

    • 服务器完全沦陷

    • 数据泄露

    • 钓鱼攻击跳板

    • 内网渗透入口


二、常见漏洞触发点

  1. 未校验文件类型 仅依赖前端JS验证或未校验Content-Type。

  2. 黑名单机制缺陷 漏掉冷门可执行后缀(如 .phtml, .php5)。

  3. 路径处理不当 用户可控制上传路径(如 filename=../../uploads/shell.php)。

  4. 未重命名文件 保留用户输入的文件名,导致覆盖或解析漏洞。

  5. 服务器配置错误 如Apache的AddHandler错误配置导致文本文件按脚本解析。


三、攻击方式

1. 直接上传Webshell

  • 经典PHP Webshell

    php

  • <?php @eval($_POST['cmd']); ?>

  • 绕过技巧:利用短标签 <?=、编码混淆、图片马注入。

2. 钓鱼文件攻击

  • 上传伪装成图片/文档的恶意文件(如 invoice.pdf.exe)。

3. 配合其他漏洞利用

  • 文件包含漏洞:上传含恶意代码的图片,通过LFI执行。

  • 解析漏洞:IIS/nginx错误解析文件名(如 shell.php.jpg)。


四、绕过防御技巧

1. 前端绕过

  • 禁用JS或修改前端校验代码(如删除onsubmit事件)。

2. 黑名单绕过

  • 尝试非常规后缀:.php5, .phtml, .phar, .htaccess(Apache)。

  • 大小写混合:.PhP, .pHp

  • 双写后缀:.pphphp → 过滤后变为 .php

3. MIME类型绕过

  • 修改Content-Type为合法类型:

    httpContent-Type: image/png

4. 文件头伪造

  • 在恶意文件头部添加合法标识:

    php

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

5. .htaccess攻击(Apache)

  • 上传覆盖.htaccess文件,定义解析规则:

    apache

    AddType application/x-httpd-php .abc

6. 特殊符号截断

  • %00截断(需PHP<5.3):

    filename="shell.php%00.jpg"

7. 解析漏洞利用

  • IIS 6.0/uploads/shell.asp;.jpg 被解析为ASP文件。

  • Nginx畸形路径/uploads/shell.jpg/.php 错误解析为PHP。


五、防御方案

1. 白名单校验

  • 文件扩展名:仅允许 .jpg, .png, .pdf 等必要类型。

  • MIME类型:从服务器端检测 magic number(真实文件类型)。

2. 重命名文件

  • 使用随机哈希值重命名(如 a3F8d9.jpg),避免用户控制文件名。

3. 存储隔离

  • 上传目录禁止脚本执行(通过服务器配置):

    nginx

    location /uploads/ {deny all;
    }

4. 文件内容检测

  • 检查图片文件的宽高属性,验证是否为真实图片。

  • 使用杀毒引擎扫描上传文件。

5. 限制文件大小

  • 设置合理的最大上传尺寸(如10MB)。

6. 日志与监控

  • 记录所有上传行为,对异常文件(如 .php)触发告警。

7. WAF防护

  • 配置规则拦截 <?phpeval( 等危险关键词。


六、实战案例

  1. Discuz! 任意文件上传漏洞 通过修改上传请求的 filename 参数绕过后缀检测。

  2. WordPress插件漏洞 某些插件未校验非Ajax上传路径,导致可直接上传PHP文件。


七、测试工具

  1. Burp Suite 拦截修改上传请求,测试绕过逻辑。

  2. Webshell管理工具 AntSword、Cknife、Behinder(需合法授权使用)。


八、学习资源

  1. OWASP文件上传防护指南: Unrestricted File Upload | OWASP Foundation

  2. Upload Labs靶场: GitHub搜索 "upload-labs" 练习绕过技巧

  3. 《Web安全攻防:渗透测试实战指南》第6章

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跨平台公式兼容性大模型提示词模板(飞书 + CSDN + Microsoft Word)

飞书云文档 CSDN MD编辑器 Microsoft Word 跨平台公式兼容方案&#xff1a; 一、背景痛点与解决方案 在技术文档创作中&#xff0c;数学公式的跨平台渲染一直存在三大痛点&#xff1a; 飞书云文档&#xff1a;原生KaTeX渲染与导出功能存在语法限制微软Word&#xff1a;Math…

【Linux】基于UDP/TCP套接字编程与守护进程

目录 一、网路套接字编程 &#xff08;一&#xff09;基础概念 1、源IP地址与目的IP地址 2、端口号 3、TCP与UDP 4、网络字节序 &#xff08;二&#xff09;套接字编程接口 1、socket 常见API 2、sockaddr结构 &#xff08;三&#xff09;UDP套接字 1、UDP服务器创建…

ue5 3dcesium中从本地配置文件读取路3dtilles的路径

关卡蓝图中获得3dtiles的引用 拉出设置url 设置路径 至于设置的路径从哪里来 可以使用varest读取文件里的接送字符串 path中配置地址 path变量的值为: Data/VillageStartMapConfig.json此地址代表content的地下的data文件夹里的config.json文件 {"FilePath": &quo…

渗透测试(WAF过滤information_schema库的绕过,sqllib-46关,海洋cms9版本的注入)

1.sqlin-lib 46关 打开网站配置文件发现 此网站的对ID进行了排序&#xff0c;我们可以知道&#xff0c;order by接不了union &#xff0c;那我们可以通过测试sort&#xff0c;rond等函数&#xff0c;观察网页的反馈来判断我们的盲注是否正确 我们发现 当参数有sort来排序时&…

CSS笔记一

一、语法 选择器{属性&#xff1a;属性值&#xff1b;属性&#xff1a;属性值} 二、书写分类 行内样式&#xff1a;直接通过style属性写在标签上 <p style"font-size80px">123456</p> 页内样式&#xff1a;在html页面创建style标签 外链样式&…

Flutter: TextEditingValue的实现

文章目录 TextEditingValue一、fromJSON二、text、selection、composing、empty三、isComposingRangeValid四、replaced TextEditingValue /// The current text, selection, and composing state for editing a run of text. immutable class TextEditingValue {const TextEd…

Web开发:ORM框架之使用Freesql的导航属性

一、什么时候用导航属性 看数据库表的对应关系&#xff0c;一对多的时候用比较好&#xff0c;不用多写一个联表实体&#xff0c;而且查询高效 二、为实体配置导航属性 1.给关系是一的父表实体加上&#xff1a; [FreeSql.DataAnnotations.Navigate(nameof(子表.子表关联字段))]…

RAG(检索增强生成)原理、实现与评测方法探讨

RAG是什么&#xff1f; 看一下RAG的英文全称&#xff1a;Retrieval-Augmented Generation&#xff0c;建索、增强、生成&#xff1b;一句话串起来就是通过检索增强模型的生成&#xff0c;是的&#xff0c;这就是RAG。 RAG怎么做&#xff1f; 目前比较通用的套路是这样的&#x…

【嵌入式Linux应用开发基础】网络编程(4):UDP协议

目录 一、UDP 协议概述 二、UDP 协议特点 三、UDP协议的字段格式 四、UDP协议的数据传输过程 五、嵌入式UDP编程核心API 六、UDP 在嵌入式 Linux 中的编程实现 6.1 UDP 服务器代码示例 6.2 UDP 客户端代码示例 七、UDP 协议的应用场景 八、UDP 协议的优缺点 8.1 优点…

视频字幕识别和翻译

下载的视频很多不是汉语的&#xff0c;我们需要用剪映将语音识别出来作为字幕压制到视频中去。 剪映6.0以后语音识别需要收费&#xff0c;但是低版本还是没有问题。 如果想要非汉语字幕转成中文&#xff0c;剪映低版本不提供这样功能。但是&#xff0c;用剪映导出识别字幕&am…

小迪安全-24天-文件管理,显示上传,黑白名单,访问控制

上节课回顾&#xff0c;token问题 没有更新token值&#xff0c;造成了复用 加上这段代码就好了&#xff0c;就不会复用了 文件管理-文件上传 upload.html文件&#xff0c;找ai生成就行 uoload.php接受文件上传的信息 这里在写个临时文件存储换个地方 因为上面临时文件存在c盘…

单入单出队列性能优化(Lock-Free)

摘要&#xff1a;文中首先介绍了有锁线程安全循环队列的基本实现&#xff0c;然后探讨了使用原子变量实现 Lock-Free 队列的优势&#xff0c;能够减少线程之间的数据竞争。接着&#xff0c;介绍了数据对齐的策略&#xff0c;以降低伪共享的概率&#xff0c;随后引入了索引缓存来…

java项目之网络游戏交易系统源码(ssm+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的网络游戏交易系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 本网络游戏交易系统分为管理员…

PyTorch 源码学习:GPU 内存管理之深入分析 CUDACachingAllocator

因引入 expandable_segments 机制&#xff0c;PyTorch 2.1.0 版本发生了较大变化。本文关注的是 PyTorch 原生的 GPU 内存管理机制&#xff0c;故研究的 PyTorch 版本为 2.0.0。代码地址&#xff1a; c10/cuda/CUDACachingAllocator.hc10/cuda/CUDACachingAllocator.cpp 更多内…

【PromptCoder】使用 package.json 生成 cursorrules

【PromptCoder】使用 package.json 生成 cursorrules 在当今快节奏的开发世界中&#xff0c;效率和准确性至关重要。开发者们不断寻找能够优化工作流程、帮助他们更快编写高质量代码的工具。Cursor 作为一款 AI 驱动的代码编辑器&#xff0c;正在彻底改变我们的编程方式。但如…

学习路程五 向量数据库Milvus操作

前序 前面安装好了docker且成功拉取Milvus镜像&#xff0c;启动。通过python成功连接上了数据。接下来就继续更多Milvus的操作 在开始之前&#xff0c;先来简单了解一下向量数据库内一些东西的基本概念 概念描述数据库&#xff08;Database&#xff09;类似与MySQL的database…

SpringBoot 热部署

1、添加 DevTools 依赖 <!-- 热部署依赖 --> <dependency> <groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId> </dependency>2、在IDEA的菜单栏中依次选择“File”→“Settings”&#x…

SOC-ATF 安全启动BL1流程分析(1)

一、ATF 源码下载链接 1. ARM Trusted Firmware (ATF) 官方 GitHub 仓库 GitHub 地址: https://github.com/ARM-software/arm-trusted-firmware 这是 ATF 的官方源码仓库&#xff0c;包含最新的代码、文档和示例。 下载方式&#xff1a; 使用 Git 克隆仓库&#xff1a; git…

汽车无钥匙进入一键启动操作正确步骤

汽车智能无钥匙进入和一键启动的技术在近年来比较成熟&#xff0c;不同车型的操作步骤可能略有不同&#xff0c;但基本的流程应该是通用的&#xff0c;不会因为时间变化而有大的改变。 移动管家汽车一键启动无钥匙进入系统通常是通过携带钥匙靠近车辆&#xff0c;然后触摸门把…

excel单、双字节字符转换函数(中英文输入法符号转换)

在Excel中通常使用函数WIDECHAR和ASC来实现单、双字节字符之间的转换。其中 WIDECHAR函数将所有的字符转换为双字节&#xff0c;ASC函数将所有的字符转换为单字节 首先来解释一下单双字节的含义。单字节一般对应英文输入法的输入&#xff0c;如英文字母&#xff0c;英文输入法…