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

No.23 笔记 | WEB安全 - 任意文件漏洞 part 5

本文全面且深入地探讨了文件上传漏洞相关知识。从基础概念出发,清晰地阐述了文件上传漏洞的定义及其产生的本质原因,同时列出了该漏洞成立的必要条件。详细说明了文件上传漏洞可能对服务器控制权、网站安全以及业务运营带来的严重危害。
文中还深入解析了前端验证与服务器端验证机制,包括具体的验证方法与代码示例。进一步介绍了常见的绕过技术和高级攻击手段,如条件竞争、二次渲染绕过等,并针对这些攻击给出了切实可行的防护建议。
最后,通过将文件上传过程类比为快递公司处理包裹,以形象生动的方式解释了防护措施的重要性,包括多重检查、隔离存储等,是网络安全从业者和相关技术人员防范文件上传漏洞的重要参考资料。

1. 基础概念

1.1 什么是文件上传漏洞?

  • 定义:由于服务器端对上传文件的验证不严格,导致攻击者可以上传恶意文件并执行
  • 本质:服务器端安全控制不足的问题

1.2 漏洞成立的必要条件

  1. 服务器存在文件上传功能
  2. 验证机制存在缺陷
  3. 上传的文件能被解析执行
  4. 攻击者可以访问上传的文件

2. 漏洞危害

2.1 服务器控制权沦陷

  • 执行任意命令
  • 获取系统权限
  • 访问敏感信息
  • 控制数据库

2.2 网站安全威胁

  • 篡改网站内容
  • 植入恶意代码
  • 传播木马病毒
  • 构建后门程序

2.3 业务影响

  • 服务中断
  • 数据泄露
  • 财务损失
  • 声誉受损

3. 验证机制详解

3.1 前端验证

JavaScript验证

// 常见的前端验证代码示例 
function checkFile(file) { // 检查文件类型 if (!file.type.match('image.*')) { alert('只能上传图片文件!'); return false; } // 检查文件大小 if (file.size > 5242880) { alert('文件不能大于5MB!'); return false; } return true; 
} 

3.2 服务器端验证

1. 文件扩展名验证

  • 黑名单方式:
$blacklist = array('php', 'php3', 'php4', 'php5', 'phtml', 
'pht', 'jsp', 'jspa', 'jspx', 'asp', 'aspx', 'asa', 'cer', 
'cdx'); 
  • 白名单方式:
$whitelist = array('jpg', 'jpeg', 'png', 'gif'); 

2. MIME类型验证

// MIME类型检查示例 
$allowed_types = array('image/jpeg', 'image/png', 'image/gif'); 
if (!in_array($_FILES['upload']['type'], $allowed_types)) { die('不允许的文件类型'); 
} 

3. 文件内容验证

// 检查文件头部特征 
$image_info = getimagesize($_FILES['upload']['tmp_name']); 
if ($image_info === false) { die('非法的图片文件'); 
} 

4. 常见绕过技术

4.1 前端绕过
  • 禁用 JavaScript。
  • 使用抓包工具(如 Burp Suite)。
  • 直接构造 POST 请求。
4.2 扩展名绕过
  • 大小写变换:.pHp,.PhP,.PHP。
  • 特殊扩展名:.php3,.php4,.php5,.phtml。
  • 双扩展名:test.jpg.php,test.php.jpg。
4.3 MIME 类型绕过
  • 修改 Content - Type 头。
  • 常见图片 MIME 类型:image/jpeg,image/png,image/gif。

5. 高级攻击技术

5.1 条件竞争

攻击原理

  1. 上传合法文件
  2. 在验证过程中快速替换为恶意文件
  3. 利用时间差完成攻击

防护建议

  • 使用原子操作
  • 加锁机制
  • 临时文件处理

5.2 二次渲染绕过

常见技术

  1. 图片马制作
  2. 绕过二次渲染
  3. 保持payload完整性

6. 防护措施

6.1 基本防护

  1. 完善的文件验证
  2. 文件重命名
  3. 限制文件大小
  4. 设置上传目录权限

6.2 进阶防护

  1. 使用Web应用防火墙(WAF)
  2. 实施文件隔离
  3. 采用CDN存储
  4. 定期安全扫描

6.3 最佳实践

  1. 采用白名单验证
  2. 多重验证机制
  3. 文件存储分离
  4. 权限最小化原则

文件上传漏洞:一个快递包裹的故事 📦

想象你正在经营一家快递公司。你的工作就是接收包裹并送到目的地。这就像网站接收用户上传的文件一样。

1. 为什么会有危险?🤔

想象一下:

  • 如果有人寄了一个装有炸弹的包裹,但外表看起来很普通
  • 快递员没仔细检查就收下了
  • 结果包裹送到目的地后造成了破坏

这就是文件上传漏洞的本质:

  • 攻击者上传看似普通但实际包含恶意代码的文件
  • 服务器没有严格检查就接收并执行了这些文件
  • 结果服务器被攻击者控制了

2. 现实生活中的例子 🌟

场景一:照片上传

假设你在社交网站上传头像:

实际操作: 
1. 选择一张可爱猫咪照片 
2. 点击上传按钮 
3. 网站显示你的新头像 

但黑客可能会:

黑客操作: 
1. 准备一个"照片.php"文件 
2. 文件看起来是张照片 
3. 实际内容是能控制服务器的代码 

3. 防护措施:安检系统 🔍

就像机场安检一样,文件上传也需要多重检查:

第一道防线:前台检查

// 就像安检员问你:"你的包裹里是什么?" 
if (文件类型 != 图片) { 拒绝接收(); } 

第二道防线:后台深度检查

// 像X光机扫描包裹 
检查文件实际内容(); 检查文件类型(); 检查文件大小(); 

4. 实际攻击案例解析 🎯

案例:图片马

想象你收到一个"特殊"的明信片:

  • 表面看:是张普通的风景照
  • 实际上:照片里藏着一串密码

5. 防护建议:像安保系统一样 🛡️

  1. 多重检查
  • 门卫检查(前端)
  • 安检仪(MIME类型)
  • 开箱检查(内容分析)
  1. 隔离存储
  • 就像危险品要单独存放
  • 上传文件放在特殊目录
  • 限制文件执行权限

6. 实战演示:快递验收流程 📝

正常流程:

  1. 查看包裹外观(文件扩展名)
  2. 过X光机(文件内容检查)
  3. 确认收件人(权限验证)
  4. 放入对应仓库(存储隔离)

攻击者可能的绕过方式:

  1. 虚假标签(改扩展名)
  2. 夹带私货(隐藏代码)
  3. 趁人不备(条件竞争)

7. 关键防护点 🔐

想象你是一个严格的安检员:

  1. 白名单制度
  • 只收特定类型的包裹
  • 比如只允许jpg、png格式
  1. 深度检查
  • 不光看外表
  • 还要检查内部内容
  1. 隔离存储
  • 危险品专门存放
  • 普通物品单独存放

8. 实用小贴士 💡

永远不信任用户输入

就像不轻易相信陌生人的包裹

使用多重验证

就像重要物品需要多重确认

定期检查系统

就像定期安全演习

相关文章:

No.23 笔记 | WEB安全 - 任意文件漏洞 part 5

本文全面且深入地探讨了文件上传漏洞相关知识。从基础概念出发,清晰地阐述了文件上传漏洞的定义及其产生的本质原因,同时列出了该漏洞成立的必要条件。详细说明了文件上传漏洞可能对服务器控制权、网站安全以及业务运营带来的严重危害。 文中还深入解析了…...

EasyPlayer.js网页播放器,支持FLV、HLS、WebSocket、WebRTC、H.264/H.265、MP4、ts各种音视频流播放

EasyPlayer.js功能: 1、支持解码H.264视频(Baseline, Main, High Profile全支持,支持解码B帧视频) 2、支持解码H.265视频(flv id 12) 3、支持解码AAC音频(LC,HE,HEv2 Profile全支持) 4、支持解码MP3音频以及Speex音频格式 5、可…...

WPF数据绑定的五大模式

WPF(Windows Presentation Foundation)是微软推出的一种用于构建Windows用户界面的UI框架。它支持数据绑定,允许开发者将UI元素与数据源绑定,从而实现数据和界面的自动同步。WPF数据绑定有几种不同的模式, 以下是五种…...

从零到一:大学新生编程入门攻略与成长指南

文章目录 每日一句正能量前言编程语言选择:为大学新生量身定制Python:简单而强大的选择JavaScript:Web开发的基石Java:面向对象的经典C#:微软的全能选手 学习资源推荐:编程学习的宝藏在线课程教程和文档书籍…...

详细分析Pytorch中的transpose基本知识(附Demo)| 对比 permute

目录 前言1. 基本知识2. Demo 前言 原先的permute推荐阅读:详细分析Pytorch中的permute基本知识(附Demo) 1. 基本知识 transpose 是 PyTorch 中用于交换张量维度的函数,特别是用于二维张量(矩阵)的转置操…...

初识WebGL

思路&#xff1a; 构建<canvas>画布节点&#xff0c;获取其的实例。使用getWebGLContext() 拿到画布上下文。拿到上下文用clearColor() 设置背景颜色。最后清空canvas画布,是为了清除颜色缓冲区。 html结构&#xff1a; <!DOCTYPE html> <html lang"en&…...

【力扣】Go语言回溯算法详细实现与方法论提炼

文章目录 一、引言二、回溯算法的核心概念三、组合问题1. LeetCode 77. 组合2. LeetCode 216. 组合总和III3. LeetCode 17. 电话号码的字母组合4. LeetCode 39. 组合总和5. LeetCode 40. 组合总和 II小结 四、分割问题6. LeetCode 131. 分割回文串7. LeetCode 93. 复原IP地址小…...

「C/C++」C/C++ 之 第三方库使用规范

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…...

六、元素应用CSS的习题

题目一&#xff1a; 使用CSS样式对页面元素加以修饰&#xff0c;制作“ 旅游攻略 ”网站。如下图所示 运行效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>旅游攻略</title><…...

正式入驻!上海斯歌BPM PaaS管理软件等产品入选华为云联营商品

近日&#xff0c;上海斯歌旗下BPM PaaS管理软件&#xff08;NBS&#xff09;等多款产品入选华为云云商店联营商品&#xff0c;上海斯歌正式成为华为云联营商品合作伙伴。用户登录华为云云商店即可采购上海斯歌的BPM PaaS产品及配套服务。通过联营模式&#xff0c;双方合作能够深…...

使用 Axios 上传大文件分片上传

背景 在上传大文件时&#xff0c;分片上传是一种常见且有效的策略。由于大文件在上传过程中可能会遇到内存溢出、网络不稳定等问题&#xff0c;分片上传可以显著提高上传的可靠性和效率。通过将大文件分割成多个小分片&#xff0c;不仅可以减少单次上传的数据量&#xff0c;降…...

Nginx+Lua脚本+Redis 实现自动封禁访问频率过高IP

1 、安装OpenResty 安装使用 OpenResty&#xff0c;这是一个集成了各种 Lua 模块的 Nginx 服务器&#xff0c;是一个以Nginx为核心同时包含很多第三方模块的Web应用服务器&#xff0c;使用Nginx的同时又能使用lua等模块实现复杂的控制。 &#xff08;1&#xff09;安装编译工具…...

PART 1 数据挖掘概论 — 数据挖掘方法论

目录 数据库知识发掘步骤 数据挖掘技术的产业标准 CRISP-DM SEMMA 数据库知识发掘步骤 数据库知识发掘(Knowledge Discovery in Database,KDD)是从数据库中的大量数据中发现不明显、之前未知、可能有用的知识。 知识发掘流程(Knowledge Discovery Process)包括属性选择…...

Centos安装ffmpeg的方法

推荐第一个,不要自己编译安装,太难了,坑多。 在 CentOS 上安装 FFmpeg 有几种方法,以下是两种常见的方法: ### 方法一:使用 RPM Fusion 仓库安装 1. **启用 RPM Fusion 仓库**: RPM Fusion 是一个第三方仓库,提供了许多 CentOS 官方仓库中没有的软件包。 ```bash…...

理解SQL中通配符的使用

前言 SQL 是一种标准化的结构化查询语言&#xff0c;涉及结构化查询时&#xff0c;高效地检索数据至关重要。而通配符是SQL中模式匹配的有效的方法。使用通配符可以更轻松地检索到所需的确切数据。通配符允许我们定义多功能查询条件。本文将 介绍SQL通配符的基础知识及用法。 …...

SpringBoot篇(简化操作的原理)

目录 一、代码位置 二、统一版本管理&#xff08;parent&#xff09; 三、提供 starter简化 Maven 配置 四、自动配置 Spring&#xff08;引导类&#xff09; 五、嵌入式 servlet 容器 一、代码位置 二、统一版本管理&#xff08;parent&#xff09; SpringBoot项目都会继…...

Cesium的模型(ModelVS)顶点着色器浅析

来自glTF和3D Tiles的模型会走ModelVS.glsl。这个文件不单独是把模型顶点转换为屏幕坐标&#xff0c;还包含了丰富的处理过程。 Cesium是根据定义的Define判断某个行为是否需要被执行&#xff0c;比如#define HAS_SILHOUETTE&#xff0c;说明需要计算模型外轮廓线。 Cesium的…...

机器人领域中的scaling law:通过复现斯坦福机器人UMI——探讨数据规模化定律(含UMI的复现关键)

前言 在24年10.26/10.27两天&#xff0c;我司七月在线举办的七月大模型机器人线下营时&#xff0c;我们带着大家一步步复现UMI&#xff0c;比如把杯子摆到杯盘上(其中1-2位学员朋友还亲自自身成功做到该任务) 此外&#xff0c;我还特地邀请了针对UMI做了改进工作的fastumi作者…...

C++之多态的深度剖析

目录 前言 1.多态的概念 2.多态的定义及实现 2.1多态的构成条件 2.1.1重要条件 2.1.2 虚函数 2.1.3 虚函数的重写/覆盖 2.1.4 选择题 2.1.5 虚函数其他知识 协变&#xff08;了解&#xff09; 析构函数的重写 override 和 final关键字 3. 重载&#xff0c;重写&…...

Microsoft Office PowerPoint制作科研论文用图

Microsoft Office PowerPoint制作科研论文用图 1. 获取高清图片2. 导入PPT3. 另存为“增强型windows元文件”emf格式4. 画图剪裁 1. 获取高清图片 这里指通过绘图软件画分辨率高的图片&#xff0c;我一般使用python画dpi600的图片。 2. 导入PPT 新建一个PPT&#xff08;注意&a…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...