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

upload-labs通关笔记-第17关文件上传之二次渲染gif格式

 系列目录

upload-labs通关笔记-第1关 文件上传之前端绕过(3种渗透方法)

upload-labs通关笔记-第2关 文件上传之MIME绕过-CSDN博客

upload-labs通关笔记-第3关 文件上传之黑名单绕过-CSDN博客

upload-labs通关笔记-第4关 文件上传之.htacess绕过-CSDN博客

upload-labs通关笔记-第5关 文件上传之.ini绕过-CSDN博客

upload-labs通关笔记-第6关 文件上传之大小写绕过-CSDN博客

upload-labs通关笔记-第7关 文件上传之空格绕过-CSDN博客

upload-labs通关笔记-第8关 文件上传之点绕过-CSDN博客

upload-labs通关笔记-第9关 文件上传之::$data绕过-CSDN博客

upload-labs通关笔记-第10关 文件上传之点多重过滤(空格点绕过)

upload-labs通关笔记-第11关 文件上传之双写绕过-CSDN博客

upload-labs通关笔记-第12关 文件上传之白名单GET法绕过

upload-labs通关笔记-第13关 文件上传之白名单POST法绕过

upload-labs通关笔记-第14关 文件上传之图片马文件头绕过

upload-labs通关笔记-第15关 文件上传之图片马getimagesize绕过

upload-labs通关笔记-第16关 文件上传之图片马exif_imagetype绕过

upload-labs通关笔记-第17关文件上传之二次渲染-CSDN博客

upload-labs通关笔记-第18关文件上传之条件竞争-CSDN博客

upload-labs通关笔记-第19关文件上传之条件竞争-CSDN博客

upload-labs通关笔记-第20关 文件上传之杠点绕过-CSDN博客

upload-labs通关笔记-第21关 文件上传之数组绕过-CSDN博客

目录

一、二次渲染

二、代码审计

三、渗透思路

四、实战渗透

1、制作gif图片马

2、上传图片马并下载

3、对比渲染前后图片

4、重新上传修改后的图片马

5、获取上传图片马的URL

6、利用文件包含访问图片马


本文通过《upload-labs通关笔记-第17关二次渲染之gif格式图片》系列,制作gif图片马来绕过二次渲染进行渗透实战。在文件上传安全中,当攻击者上传一个看似正常的图片,但其中隐藏了恶意代码。当服务器对图片进行重新二次渲染(如调整大小、压缩等操作)并重新生成新的图片文件,可以消除文件中可能隐藏的恶意代码,可以防范文件上传风险。

一、二次渲染

文件上传的二次渲染是预防利用图片马攻击的文件上传风险方法,其原理是通过Web服务器端的相关函数对用户上传的图片进行重新二次渲染生成新的突破,破坏掉原始图片文件中可能隐藏的恶意代码,从而有效防范了图片马等常见文件上传攻击手段。二次渲染的处理逻辑分为3个步骤,具体如下所示。

  • 接收用户上传的图片

  • 使用Web服务器端图像处理库对原始图片二次渲染重新生成文件

  • 只保存新生成的文件,丢弃原始上传的图片文件

二次渲染处理图片具有如下优点。

  • 清除恶意代码:二次渲染利用图像处理库对上传的图片进行重新生成,能够有效识别并丢弃图片中隐藏的非图像数据,如恶意脚本、病毒代码等。这使得攻击者难以通过在图片中嵌入恶意代码来执行攻击,大大降低了服务器遭受攻击的风险。
  • 规范图像格式:在二次渲染过程中,图片会被强制转换为标准的图像格式,纠正可能存在的格式错误或异常。这有助于防止攻击者利用畸形图像文件来绕过文件类型检查或触发服务器端的渗透攻击。

二、代码审计

进入upload-labs靶场的第17关二次渲染关卡,查看源码分析其功能。先校验上传文件的扩展名及 MIME 类型,仅开放 JPEG、PNG、GIF 三种图片格式上传权限。随后通过imagecreatefromjpeg /png /gif函数启动二次渲染流程,在此过程中会破坏隐藏在文件里的 PHP 代码、恶意脚本等使之被修改,重新生成纯净的图片文件。系统仅保留经渲染后的 “干净” 图片,同时删除用户原始上传文件。本关卡只针对gif类型的图片进行二次渲染绕过,故而对gif格式的源码进行详细注释,具体如下所示。

详细的注释如下所示。

<?php
// 检查上传文件的扩展名是否为 "gif" 并且文件的 MIME 类型是否为 "image/gif"
// $fileext 代表上传文件的扩展名,$filetype 代表文件的 MIME 类型
if(($fileext == "gif") && ($filetype=="image/gif")){// 尝试将上传的临时文件从临时存储路径移动到目标存储路径// $tmpname 是上传文件在服务器临时存储的路径,$target_path 是目标存储路径if(move_uploaded_file($tmpname,$target_path)){// 使用上传的图片生成新的图片// imagecreatefromgif 是 PHP 的 GD 库函数,用于从 GIF 格式的图片文件创建一个新的图像资源// $target_path 为存储图片的目标路径$im = imagecreatefromgif($target_path);// 检查是否成功创建图像资源if($im == false){// 如果创建失败,说明该文件可能不是合法的 GIF 格式图片// 将提示信息 $msg 设置为相应内容$msg = "该文件不是gif格式的图片!";// 尝试删除之前移动到目标路径的文件// @ 符号用于抑制可能出现的警告信息@unlink($target_path);}else{// 如果成功创建图像资源,为新生成的图片指定一个文件名// srand(time()) 用于初始化随机数生成器,以当前时间作为种子,确保每次生成的随机数不同srand(time());// 生成一个随机整数,并将其转换为字符串,作为新图片的文件名$newfilename = strval(rand()).".gif";// 拼接新图片在目标目录中的完整路径// UPLOAD_PATH 是预定义的上传文件保存目录$img_path = UPLOAD_PATH.'/'.$newfilename;// 将之前创建的图像资源以 GIF 格式保存到指定的新路径// imagegif 是 PHP 的 GD 库函数,用于将图像资源保存为 GIF 格式的文件imagegif($im,$img_path);// 尝试删除之前移动到目标路径的原始上传文件@unlink($target_path);// 将 $is_upload 标记为 true,表示文件上传并处理成功$is_upload = true;}} else {// 如果文件移动失败,将提示信息 $msg 设置为上传出错$msg = "上传出错!";}
}else{// 如果上传文件的扩展名不是 "gif" 或者 MIME 类型不是 "image/gif"// 将提示信息 $msg 设置为只允许上传特定后缀的图片文件$msg = "只允许上传后缀为.jpg|.png|.gif的图片文件!";
}
?>

通过代码审计可知本关卡采用文件后缀、MIME法且通过imagecreatefromgif函数进行二次渲染处理,具体分析如下。

(1)双重验证

  • 检查文件扩展名(匹配.gif)
  • 验证MIME类型(匹配image/gif)

(2)二次渲染

  • 使用imagecreatefromgif()和imagegif()对图像进行二次处理
  • 这种方法能有效消除gif文件中可能隐藏的恶意代码
  • 生成全新的图像文件,不保留原始文件的元数据

(3)随机文件名

  • 使用time()和rand()生成不易被猜测的随机文件名
  • 防止文件名冲突和预测攻击

三、渗透思路

打开靶场的第17关卡,将16关生成的3个图片马传入后,发现图片马中的恶意代码均被破坏,同样的渗透方法无法成功。如何保证将恶意代码插入到图片中后,这个图片传到服务器后在二次渲染后仍然能保留呢?也就是说如何保证既能保证图片被处理,同时恶意代码也不被破坏呢。文件上传中的二次渲染的过程可能会移除或更改文件的某些内容部分。为了成功绕过二次渲染,需要理解图片文件的结构以及服务器处理图片的方式。那么我们根据3种图片格式(gif,png和jpg)分别使用不同的方法渗透,具体如下所示。

  • GIF绕过:原始图片0,使用copy命令生成包含PHP代码的GIF图片马1,上传后GIF图片马1后,网站对图片马1进行二次渲染生成图片2,使用十六进制编辑器比较上传前后的文件差异(图片马1和图片2),找到未改变的部分将PHP代码插入到图片马1的该位置上,再次上传修改后的图片马1即可成功。
  • PNG绕过:PNG图片由多个数据块组成,涉及到校验和的修改,容易破坏图片结构,可以通过特定脚本生成绕过渲染的图片马
  • JPG绕过:由于JPG图片容易损坏,需要选择合适的图片进行操作。可以使用专门的脚本来处理JPG图片,将PHP代码注入到图片中,然后上传。如果处理成功,上传的图片将包含未被二次渲染移除的PHP代码

本小节针对gif格式进行处理,也就是通过十六进制编辑器处理即可。

四、实战渗透

1、制作gif图片马

(1)构建脚本命名info.php

<?php
phpinfo();
?>

(2)准备好GIF类型的图片test.gif,本关卡复用16关的图片

进入到图片文件test.gif,test.jpg,test.png和脚本文件info.php所在的目录

(3)制作图片马

然后执行以下命令即可生成test16.jpg,test16.gif,test16.png三种类型的图片马。

copy /b test.gif + info.php test17.gif

如下所示,test17.gif的尾部包含脚本内容。 

2、上传图片马并下载

上传图片马test17.gif并获取图片的地址,如下所示。

  

 右键图像区域,选择“将图像另存为”,将图片保存,使用Editor打开刚保存好的gif文件(30962.gif),用16进制编辑器打开30962.gif,如下所示,图片马已经消失。

3、对比渲染前后图片

点击“工具”—>“比较文件”,把刚保存好的30962.gif和合成的原始图片马test17.gif进比较

比较后,点击“匹配”,蓝色部分就是没有被渲染的地方

在原始图片马数据test17.gif没有变化的地方插入如下code并保存。

<?php
phpinfo();
?>

切记需要在原始图片马test17.gif上修改,不是从靶场上下载下来的图片上修改。

4、重新上传修改后的图片马

如下所示上传test17.gif成功。

5、获取上传图片马的URL

http://127.0.0.1/upload-labs/upload/31726.gif

6、利用文件包含访问图片马

 文件包含渗透主页如下所示。

http://127.0.0.1/upload-labs/include.php

构造文件包含访问图片马的URL,具体如下所示。

http://127.0.0.1/upload-labs/include.php?file=upload/31726.gif

访问脚本,鼠标滚轮向下滑获取到php版本信息,具体如下所示。

相关文章:

upload-labs通关笔记-第17关文件上传之二次渲染gif格式

系列目录 upload-labs通关笔记-第1关 文件上传之前端绕过&#xff08;3种渗透方法&#xff09; upload-labs通关笔记-第2关 文件上传之MIME绕过-CSDN博客 upload-labs通关笔记-第3关 文件上传之黑名单绕过-CSDN博客 upload-labs通关笔记-第4关 文件上传之.htacess绕过-CSDN…...

计算机网络学习20250525

应用层协议原理 创建一个网络应用,编写应用程序,这些应用程序运行在不同的端系统上,通过网络彼此通信 不需要在网络核心设备(路由器,交换机)上写应用程序网络应用程序工作在网络层以下将应用程序限制在端系统上促进应用程序迅速研发和部署,将复杂问题放到网络边缘网络应…...

STM32中的SPI通信协议

IIC和SPI的对比 IIC是半双工的通信&#xff0c;无法同时收发信息&#xff1b;SPI是全双工通讯&#xff0c;可以同时收发信息&#xff1b;IIC的通讯协议较复杂&#xff0c;而SPI通讯协议较简单&#xff1b;IIC需要通过地址选择从机&#xff0c;而SPI只主要一个引脚即可选中从机…...

从版本控制到协同开发:深度解析 Git、SVN 及现代工具链

前言&#xff1a;在当今软件开发的浪潮中&#xff0c;版本控制与协同开发无疑扮演着举足轻重的角色。从最初的单兵作战到如今大规模团队的高效协作&#xff0c;一套成熟且得力的版本控制系统以及围绕其构建的现代工具链&#xff0c;已然成为推动软件项目稳步前行的关键引擎。今…...

redis Pub/Sub 简介 -16 (PUBLISH、SUBSCRIBE、PSUBSCRIBE)

Redis Pub/Sub 简介&#xff1a;PUBLISH、SUBSCRIBE、PSUBSCRIBE Redis Pub/Sub 是一种强大的消息传递范例&#xff0c;可在应用程序的不同部分之间实现实时通信。它是构建可扩展和响应式系统的基石&#xff0c;允许组件在没有直接依赖的情况下进行交互。本章将全面介绍 Redis…...

《黄帝内经》数学建模与形式化表征方式的重构

黄帝内经的数学概括&#xff1a;《黄帝内经》数学建模与形式化表征方式的重构 摘要&#xff1a;《黄帝内经》通过现代数学理论如动力系统、代数拓扑和随机过程&#xff0c;被重构为一个形式化的人体健康模型。该模型包括阴阳动力学的微分几何、五行代数的李群结构、经络拓扑与同…...

PyTorch Image Models (timm) 技术指南

timm PyTorch Image Models (timm) 技术指南功能概述 一、引言二、timm 库概述三、安装 timm 库四、模型加载与推理示例4.1 通用推理流程4.2 具体模型示例4.2.1 ResNeXt50-32x4d4.2.2 EfficientNet-V2 Small 模型4.2.3 DeiT-3 large 模型4.2.4 RepViT-M2 模型4.2.5 ResNet-RS-1…...

基于Scikit-learn与Flask的医疗AI糖尿病预测系统开发实战

引言 在精准医疗时代&#xff0c;人工智能技术正在重塑临床决策流程。本文将深入解析如何基于MIMIC-III医疗大数据集&#xff0c;使用Python生态构建符合医疗AI开发规范的糖尿病预测系统。项目涵盖从数据治理到模型部署的全流程&#xff0c;最终交付符合DICOM标准的临床决策支…...

掌握聚合函数:COUNT,MAX,MIN,SUM,AVG,GROUP BY和HAVING子句的用法,Where和HAVING的区别

对于Java后端开发来说&#xff0c;必须要掌握常用的聚合函数&#xff1a;COUNT&#xff0c;MAX&#xff0c;MIN&#xff0c;SUM&#xff0c;AVG&#xff0c;掌握GROUP BY和HAVING子句的用法&#xff0c;掌握Where和HAVING的区别&#xff1a; ✅ 一、常用聚合函数&#xff08;聚…...

【Node.js】高级主题

个人主页&#xff1a;Guiat 归属专栏&#xff1a;node.js 文章目录 1. Node.js 高级主题概览1.1 高级主题架构图 2. 事件循环与异步编程深度解析2.1 事件循环机制详解事件循环阶段详解 2.2 异步编程模式演进高级异步模式实现 3. 内存管理与性能优化3.1 V8 内存管理机制内存监控…...

【Linux】定时任务 Crontab 与时间同步服务器

目录 一、用户定时任务的创建与使用 1.1 用户定时任务的使用技巧 1.2 管理员对用户定时任务的管理 1.3 用户黑白名单的管理 一、用户定时任务的创建与使用 1.1 用户定时任务的使用技巧 第一步&#xff1a;查看服务基本信息 systemctl status crond.service //查看周期性…...

【TCP/IP协议族详解】

目录 第1层 链路/网络接口层—帧&#xff08;Frame&#xff09; 1. 链路层功能 2. 常见协议 2.1. ARP&#xff08;地址解析协议&#xff09; 3. 常见设备 第2层 网络层—数据包&#xff08;Packet&#xff09; 1. 网络层功能 2. 常见协议 2.1. ICMP&#xff08;互联网…...

蓝桥杯电子赛_零基础利用按键实现不同数字的显现

目录 一、前提 二、代码配置 bsp_key.c文件 main.c文件 main.c文件的详细讲解 功能实现 注意事项 一、前提 按键这一板块主要是以记忆为主&#xff0c;我直接给大家讲解代码去实现我要配置的功能。本次我要做的项目是板子上的按键有S4~S19&#xff0c;我希望任意一个按键…...

Docker架构详解

一,Docker的四大要素&#xff1a;Dockerfile、镜像(image)、容器(container)、仓库(repository) 1.dockerfile&#xff1a;在dockerfile文件中写构建docker的命令,通过dockerbuild构建image 2.镜像&#xff1a;就是一个只读的模板&#xff0c;镜像可以用来创建docker容器&…...

Rust 学习笔记:关于生命周期的练习题

Rust 学习笔记&#xff1a;关于生命周期的练习题 Rust 学习笔记&#xff1a;关于生命周期的练习题生命周期旨在防止哪种编程错误&#xff1f;以下代码能否通过编译&#xff1f;若能&#xff0c;输出是&#xff1f;如果一个引用的生命周期是 static&#xff0c;这意味着什么&…...

Spring AI 模块架构与功能解析

Spring AI 是 Spring 生态系统中的一个新兴模块&#xff0c;专注于简化人工智能和机器学习技术在 Spring 应用程序中的集成。本文将详细介绍 Spring AI 的核心组件、功能模块及其之间的关系&#xff0c;帮助具有技术基础的读者快速了解和应用 Spring AI。 Spring AI 的核心概念…...

单元测试学习笔记

单元测试是软件测试的基础层级&#xff0c;主要针对代码的最小可测试单元进行验证。单元测试可以帮助快速定位问题边界&#xff0c;提升代码可维护性&#xff0c;支持安全的重构操作。 测试对象&#xff1a; 独立函数/方法纯工具类&#xff08;如数据处理函数&#xff09;UI组…...

多模态大语言模型arxiv论文略读(九十)

Hybrid RAG-empowered Multi-modal LLM for Secure Data Management in Internet of Medical Things: A Diffusion-based Contract Approach ➡️ 论文标题&#xff1a;Hybrid RAG-empowered Multi-modal LLM for Secure Data Management in Internet of Medical Things: A Di…...

(1-6-1)Java 集合

目录 0.知识概述&#xff1a; 1.集合 1.1 集合继承关系类图 1.2 集合遍历的三种方式 1.3 集合排序 1.3.1 Collections实现 1.3.2 自定义排序类 2 List 集合概述 2.1 ArrayList &#xff08;1&#xff09;特点 &#xff08;2&#xff09;常用方法 2.2 LinkedList 3…...

spring5-配外部文件-spEL-工厂bean-FactoryBean-注解配bean

spring配外部文件 我们先在Spring里配置一个数据源 1.导c3p0包,这里我们先学一下hibernate持久化框架&#xff0c;以后用mybites. <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.2.…...

[安全清单] Linux 服务器安全基线:一份可以照着做的加固 Checklist

更多服务器知识&#xff0c;尽在hostol.com 嘿&#xff0c;各位服务器的“守护者”们&#xff01;当你拿到一台崭新的Linux服务器&#xff0c;或者接手一台正在运行的服务器时&#xff0c;脑子里是不是会闪过一丝丝关于安全的担忧&#xff1f;“我的服务器安全吗&#xff1f;”…...

企业级单元测试流程

企业级的单元测试流程不仅是简单编写测试用例&#xff0c;而是一整套系统化、自动化、可维护、可度量的工程实践&#xff0c;贯穿从代码编写到上线部署的全生命周期。下面是一个尽可能完善的 企业级单元测试流程设计方案&#xff0c;适用于 Java 生态&#xff08;JUnit Mockit…...

安卓开发用到的设计模式(2)结构型模式

安卓开发用到的设计模式&#xff08;2&#xff09;结构型模式 文章目录 安卓开发用到的设计模式&#xff08;2&#xff09;结构型模式1. 适配器模式&#xff08;Adapter Pattern&#xff09;2. 装饰器模式&#xff08;Decorator Pattern&#xff09;3. 代理模式&#xff08;Pro…...

JavaWeb:SpringBoot配置优先级详解

3种配置 打包插件 命令行 优先级 SpringBoot的配置优先级决定了不同配置源之间的覆盖关系&#xff0c;遵循高优先级配置覆盖低优先级的原则。以下是详细的优先级排序及配置方法说明&#xff1a; 一、配置优先级从高到低排序 1.命令行参数 优先级最高&#xff0c;通过keyvalu…...

故障率预测:基于LSTM的GPU集群硬件健康监测系统(附Prometheus监控模板)

一、GPU集群健康监测的挑战与价值 在大规模深度学习训练场景下&#xff0c;GPU集群的硬件故障率显著高于传统计算设备。根据2023年MLCommons统计&#xff0c;配备8卡A100的服务器平均故障间隔时间&#xff08;MTBF&#xff09;仅为1426小时&#xff0c;其中显存故障占比达38%&…...

【b站计算机拓荒者】【2025】微信小程序开发教程 - chapter3 项目实践 -1 项目功能描述

1 项目功能描述 # 智慧社区-小程序-1 欢迎页-加载后端&#xff1a;动态变化-2 首页-轮播图&#xff1a;动态-公共栏&#xff1a;动态-信息采集&#xff0c;社区活动&#xff0c;人脸检测&#xff0c;语音识别&#xff0c;心率检测&#xff0c;积分商城-3 信息采集页面-采集人数…...

FFmpeg 安装包全攻略:gpl、lgpl、shared、master 区别详解

这些 FFmpeg 安装包有很多版本和变种&#xff0c;主要区别在于以下几个方面&#xff1a; ✅ 一、从名称中看出的关键参数&#xff1a; 1. 版本号 master&#xff1a;开发版&#xff0c;最新功能&#xff0c;但可能不稳定。n6.1 / n7.1&#xff1a;正式版本&#xff0c;更稳定…...

AI浪潮下,媒体内容运营的五重变奏

算法驱动的个性化推荐 在信息爆炸的时代,用户面临着海量的内容选择,如何让用户快速找到感兴趣的人工智能内容,成为媒体运营的关键。算法驱动的个性化推荐模式应运而生,它通过分析用户的行为数据,如浏览历史、点赞、评论、搜索关键词等,构建用户兴趣画像 ,再依据画像为用…...

WindTerm 以 SSH 协议的方式通过安恒明御堡垒机间接访问服务器

1. 配置堡垒机秘钥 创建公私钥ssh-keygen -t rsa -b 4096执行完该命令后按照提示一路回车就能够创建出公私钥注意&#xff1a;在创建过程中会让你指定秘钥的存储位置以及对应的密码&#xff0c;最好自行指定一下 id_rsa 是私钥id_rsa.pub 是公钥 在堡垒机中指定创建好的私钥 …...

通过现代数学语言重构《道德经》核心概念体系,形成一个兼具形式化与启发性的理论框架

以下是对《道德经》的数学转述尝试&#xff0c;通过现代数学语言重构其核心概念&#xff0c;形成一个兼具形式化与启发性的理论框架&#xff1a; 0. 基础公理体系 定义&#xff1a; 《道德经》是一个动态宇宙模型 U(D,V,Φ)&#xff0c;其中&#xff1a; D 为“道”的无限维…...