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

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

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. 实用小贴士 💡

永远不信任用户输入

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

使用多重验证

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

定期检查系统

就像定期安全演习

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

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

相关文章

[mysql]子查询的概述和分类及单行子查询

子查询引入 查询的基本结构已经给大家了,子查询里面也是有一些新的内容,子查询其实就是在查询中嵌套另一个查询,叫嵌套查询可能大家更容易理解一点..,类似与FOR循环和FOR循环的嵌套,这一章是我们查询的最难的部分,大家 难度是查询的顶峰,多表查询和子查询是非常重要,SQL优化里…

EDA --软件开发之路

之前一直在一家做数据处理的公司,从事c开发,公司业务稳定,项目有忙有闲,时而看下c,数据库,linux相关书籍,后面跳槽到了家eda公司,开始了一段eda开发之路。 eda 是 electric design …

【移动应用开发】使用多媒体--通知/播放音频/视频

目录 一、具体步骤 二、运行截图 1. 开启通知权限 2. 播放音乐 3. 播放视频 三、源代码 1. activity_main.xml 2. activity_video_player.xml 3. activity_notification.xml 4. 一些配置 5. MainActivity 6. VideoPlayerActivity 7. NotificationActivity 8. And…

代码备份管理 —— Git实用操作

目 录 Git那些事版本控制系统git环境搭建运行bashbash命令行git账号全局设置本地仓库的存在远程仓库的存在git管理基本流程git仓库的文件夹常用git命令工作区变为git仓库add命令使用branch命令使用checkout命令使用commit命令使用仓库状态查询代码变更后提交删除或恢复文件管理…

windows下安装及使用labelme

1.进入Anaconda Prompt对话窗口 输入:conda create --namelabelme python3.6 # 创建一个叫labelme的环境 conda create --namelabelme python3.6 2.激活新建的环境,进入 输入:activate labelme #激活环境 activate labelme 3.安装pyqt5 …

集群渲染是一台节点输出吗?它是云渲染农场吗

集群渲染并非单一节点的输出,而是一种分布式计算技术,它通过多台计算机协同工作来加速3D渲染过程。这种技术常被视作云渲染农场的前身,两者在提高渲染效率方面有着相似之处。接下来,让我们深入了解集群渲染与云渲染农场之间的联系…

建筑行业内部知识库的重要性与实施策略

在当今瞬息万变的建筑行业中,企业面临着前所未有的竞争挑战。为了在市场中保持竞争力,建筑企业不仅需要拥有先进的技术和设备,还必须具备高效的知识管理能力。内部知识库,作为知识管理的核心工具,正逐渐成为建筑企业提…

【Fastjson反序列化漏洞:深入了解与防范】

一、Fastjson反序列化漏洞概述 Fastjson是一款高性能的Java语言JSON处理库,广泛应用于Web开发、数据交换等领域。然而,由于fastjson在解析JSON数据时存在安全漏洞,攻击者可以利用该漏洞执行任意代码,导致严重的安全威胁。 二、F…

数据结构 —— AVL树

目录 1. AVL的概念 2.AVL树的结构 3.AVL树的插入 3.1 平衡因子更新 4. 旋转 4.1 旋转的原则 4.2 右单旋 4.2.1 右单旋代码实现 4.3 左单旋 4.3.1 左单旋代码实现 4.4 左右双旋 4.4.1 左右双旋代码实现 4.5 右左双旋 ​编辑 4.5.1 右左双旋代码实现 5. AVL树的判断…

[GXYCTF 2019]Ping Ping Ping 题解(多种解题方式)

知识点: 命令执行 linux空格绕过 反引号绕过 变量绕过 base64编码绕过 打开页面提示 "听说php可以执行系统函数?我来康康" 然后输入框内提示输入 bjut.edu.cn 输入之后回显信息,是ping 这个网址的信息 输入127.0.0.1 因为提示是命令…

Python小游戏16——开心消消乐

运行结果显示 代码如下 import pygame import random # 初始化pygame pygame. init() # 定义一些常量 WIDTH 600 HEIGHT 600 NUM_GRID8 GRID_SIZE WIDTH // NUM_GRID FPS 30 # 定义颜色 WHITE (255, 255,255) BLACK(0,0,0) COL…

基于树莓派的安保巡逻机器人--(一、快速人脸录入与精准人脸识别)

目录 零、前言 一、人脸检测 二、人脸识别 1、采集人脸 2、训练人脸识别模型 3、人脸识别应用 零、前言 随着智能安防需求的增长,基于人工智能和物联网的安保系统逐渐成为趋势。树莓派因其低成本、高扩展性等特点,成为很多AI项目的理想平台。本文将为大…

HTB:BoardLight[WriteUP]

目录 连接至HTB服务器并启动靶机 1.How many TCP ports are listening on BoardLight? 2.What is the domain name used by the box? 3.What is the name of the application running on a virtual host of board.htb? 4.What version of Dolibarr is running on Board…

react18中redux-saga实战系统登录功能及阻塞与非阻塞的性能优化

redux-saga中的effect常用的几个是有区分出阻塞与非阻塞的,这里主要看下call和fork两者的区别。 实现效果 非阻塞的task执行,不用等到登录成功后请求的list接口完成,点击退出按钮可以立即退出 阻塞task的执行,必须等到登录成功…

【JavaEE】【多线程】进阶知识

目录 一、常见的锁策略1.1 悲观锁 vs 乐观锁1.2 重量级锁 vs 轻量级锁1.3 挂起等待锁 vs 自旋锁1.4 普通互斥锁 vs 读写锁1.5 可重入锁 vs 不可重入锁1.6 不公平锁 vs 公平锁 二、synchronized特性2.1 synchronized的锁策略2.2 synchronized加锁过程2.3 其它优化措施 三、CAS3.…

炫酷的登录框!(附源码)

大家想看什么前端效果请留言 预览效果 源码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>登录页…

RK3568平台开发系列讲解(内存篇)ioremap进行物理内存的映射

🚀返回专栏总目录 文章目录 一、使用案例:二、ioremap 函数的使用三、volatile 的使用一、使用案例: ioremapdevm_ioremap (你不用担心资源的释放)二、ioremap 函数的使用

中小企业设备资源优化:Spring Boot系统实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

基于SSM(spring+springmvc+mybatis)+MySQL开发的新闻推荐系统

基于内容的新闻推荐系统 一、环境搭建 开发框架&#xff1a;SSM(springspringmvcmybatis)开发语言&#xff1a;Java、HTML5、JavaScript开发工具&#xff1a;MyEclipse软件依赖&#xff1a;tomcat8、MySQL 1.1 新建工程 打开 myeclispe&#xff0c;新建一个 maven 工程&…

STM32 HAL ADC FIR 窗函数实现低通滤波

FIR 窗函数实现低通滤波 文章目录 FIR 窗函数实现低通滤波1.窗的分类与选择2.matlab设计3.代码编写4.结果欣赏与群延迟5.其他可能报错5.1.adc采集的数据没问题&#xff0c;vofa打印成-nan5.2.vofa打印的滤波数据为初始化的0 6.代码备忘 1.窗的分类与选择 2.matlab设计 主页命令…