upload-labs通关笔记-第15关 文件上传之getimagesize绕过(图片马)
目录
一、图片马
二、文件包含
三、文件包含与图片马
四、图片马制作方法
五、源码分析
六、制作图片马
1、创建脚本并命名为test.php
2、准备制作图片马的三类图片
3、 使用copy命令制作图片马
七、渗透实战
1、GIF图片马渗透
(1)上传gif图片马
(2)打开文件包含渗透网址
(3)文件包含利用
2、JPG图片马渗透
3、PNG图片马渗透
本文通过《upload-labs靶场通关笔记系列》来进行upload-labs靶场的渗透实战,本文讲解upload-labs靶场第15关图片马之getimagesize绕过渗透实战。
一、图片马
- 定义:图片马是一种将恶意脚本代码隐藏在图片文件中的特殊文件,它结合了图片的外观和脚本的执行能力,通常利用文件包含访问图片马来实现攻击。
- 制作原理:一般是利用图片文件格式的特性,将恶意脚本代码添加到图片文件的末尾或其他可利用的位置。由于图片文件在结构上有一些冗余部分或者对额外数据有一定的容忍度,所以可以在不影响图片正常显示的情况下嵌入恶意代码。例如,在一些图片文件格式中,文件头部分定义了图片的格式、尺寸等信息,而文件尾部可能存在一些未使用的空间,攻击者就可以将恶意脚本代码写入这些空间。
二、文件包含
文件包含风险是指 Web 应用程序在处理文件包含功能时,由于对用户输入的文件路径缺乏严格验证和过滤,导致攻击者可通过篡改参数指定恶意文件路径。攻击者能利用该文件包含来读取服务器敏感文件,或包含恶意脚本文件执行任意代码,从而获取服务器权限、篡改数据、植入后门等,严重威胁系统安全。
三、文件包含与图片马
通过文件包含访问图片马,可以使服务器执行包含恶意脚本的代码,具体步骤如下所示。
- 制作图片马:选择一张正常的图片,利用工具将恶意脚本代码嵌入到图片中。例如,对于 PHP 的图片马,可以在图片文件test15.jpg末尾添加一段 PHP 恶意代码,如<?php phpinfo();?>,这段代码会获取服务器的php版本信息。
- 上传图片马:通过网站的文件上传功能或其他途径,将制作好的图片马上传到目标服务器。如果服务器存在文件包含风险,且对上传文件的验证不严格,图片马就有可能成功上传。
- 利用文件包含访问图片马:攻击者通过构造特殊的 URL,利用文件包含让服务器包含并执行图片马中的恶意代码。例如,假设存在文件包含问题的页面是include.php,通过访问include.php?file=upload/test15.jpg,其中upload是图片马上传的目录,其中test15.jpg是图片马文件名,服务器就会执行图片马中的恶意代码,攻击者会获取服务器的php版本信息。
四、图片马制作方法
使用copy
命令制作图片马的方法如下所示,首先打开cmd命令提示符,进入到图片文件test.jpg和脚本文件info.php所在的目录,然后执行以下命令即可生成test15.jpg图片马。
copy /b test.jpg + info.php test15.jpg
/b
参数的作用是让copy
命令以二进制模式进行文件合并,这样能保证图片文件的二进制数据不被破坏。- test.jpg是正常的图片文件。
- info.php是包含恶意代码的脚本文件。
- test15.jpg是最终生成的图片马文件。
五、源码分析
打开upload-labs靶场的第15关,源码如下所示。
本小节通过getimagesize这个函数是用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息,也就是说本节通过getimagesize()函数返回的图像类型信息,来判断上传的文件是否为可以上传的文件。故而本实验中,由于需要通过获取图像的真实大小信息,故而本例中上传的图片需要包含真是的图片信息,无法像上一小节只在脚本的首部添加图片的特征,需要通过使用图片和脚本结合的方式,使用copy命令来构造图片马,这样构造出来的图片脚本是可以通过getimagesize函数成功获取到大小的。
六、制作图片马
1、创建脚本并命名为test.php
脚本内容为显示服务器php服务信息,命名为test.php,具体内容如下所示。
<?php
phpinfo();
?>
2、准备制作图片马的三类图片
准备好三类较为简单的jpg、png和gif后缀的图片(a.jpg、b.gif、c.png),以及上一步制作的test.php脚本,具体如下所示。
3、 使用copy命令制作图片马
以本实验为例,三种后缀的图片马命令如下所示,其中/b 表示一个二进制文件, + 表示将多个文件合并成一个文件, /a 表示一个ASCII文本文件。
copy a.jpg/b + test.php /a test14.jpg
copyb.gif /b + test.php /a test14.gif
copy c.png /b + test.php /a test14.png
执行copy制作图片马的效果如下所示。
于是制作好的图片马分别为test15.gif,test15.jpg,test15.png,具体如下所示。
七、渗透实战
1、GIF图片马渗透
(1)上传gif图片马
如下所示上传成功,右键获取图片URL地址。
通过复制图片地址获取到URL地址如下所示。
http://127.0.0.1/upload-labs/upload/5920211119074549.gif
(2)打开文件包含渗透网址
点击如下红框的文件包含URL链接即可进入文件包含的网页,具体如下所示。
进入文件包含主界面,url地址为:http://127.0.0.1/upload-labs/include.php,如下所示。
(3)文件包含利用
在文件包含页面访问图片马地址具体如下所示。
http://127.0.0.1/upload-labs/include.php?file=图片马的相对路径
图片马路径具体如下所示。
http://127.0.0.1/upload-labs/upload/5920211119074549.gif
所以文件包含访问图片马的URL应该如下所示。
http://127.0.0.1/upload-labs/include.php?file=upload/5920211119074549.gif
其中5920211119074549.gif是我们文件上传后的文件名,访问URL后出现大片乱码,如下所示。
向下拖动鼠标滚轮,效果如下所示,浏览器显示php的版本号7.3.30,此时证明我们成功绕过 getimagesize()的过滤信息。
2、JPG图片马渗透
由于.jpg文件.png文件的绕过与以上.gif文件绕过的方式相似,此处就不再重复列举,只提供最后的结果作为比较。test15.jpg上传界面如下所示。
test15.jpg上传成功画面如下所示。
右键获取图片马的URL地址,使用文件包含方法对其进行渗透,会显示php版本号,如下所示渗透成功。
url:http://127.0.0.1/upload-labs/include.php?file=upload/2220211119075425.jpg
3、PNG图片马渗透
test15.png图片马上传界面如下所示。
test14.png上传成功画面如下所示,可见绕过了服务器的getimagesize检查。
右键获取test15.png上传成功的URL地址,使用文件包含方法对其进行渗透,完整的利用URL地址如下所示,访问后成功显示php版本信息页面,渗透成功。
url: http://127.0.0.1/upload-labs/include.php?file=upload/2520211119075910.png
相关文章:

upload-labs通关笔记-第15关 文件上传之getimagesize绕过(图片马)
目录 一、图片马 二、文件包含 三、文件包含与图片马 四、图片马制作方法 五、源码分析 六、制作图片马 1、创建脚本并命名为test.php 2、准备制作图片马的三类图片 3、 使用copy命令制作图片马 七、渗透实战 1、GIF图片马渗透 (1)上传gif图…...

idea无法识别Maven项目
把.mvn相关都删除了 导致Idea无法识别maven项目 或者 添加导入各个模块 最后把父模块也要导入...
前端三剑客之HTML
前端HTML 一、HTML简介 1.什么是html HTML的全称为超文本标记语言(HTML How To Make Love HyperText Markup Language ),是一种标记语言。它包括一系列标签,通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整…...

linux中cpu内存浮动占用,C++文件占用cpu内存、定时任务不运行报错(root) PAM ERROR (Permission denied)
文章目录 说明部署文件准备脚本准备部署g++和编译脚本使用说明和测试脚本批量部署脚本说明执行测试定时任务不运行报错(root) PAM ERROR (Permission denied)报错说明处理方案说明 我前面已经弄了几个版本的cpu和内存占用脚本了,但因为都是固定值,所以现在重新弄个用C++编写的…...
RabbitMQ的核心原理及应用
在分布式系统架构中,消息中间件是实现服务解耦、流量缓冲的关键组件。RabbitMQ 作为基于 AMQP 协议的开源消息代理,凭借高可靠性、灵活路由和跨平台特性,被广泛应用于企业级开发和微服务架构中。本文将系统梳理 RabbitMQ 的核心知识ÿ…...
实时监控服务器CPU、内存和磁盘使用率
实时监控服务器CPU、内存和磁盘使用率 监控内存使用率: free -g | awk NR2{printf "%.2f%%\t\t", $3*100/$2 }awk NR2{...} 取第二行(Mem 行)。 $3 为已用内存,$2 为总内存,$3*100/$2 即计算使用率。监控磁…...
linux国产机安装GCC
目录 1.包管理器安装 2.源码编译安装 linux安装GCC有两种方式,方法一,使用包管理器安装;方法二,源码安装。 1.包管理器安装 Ubuntu 基于 Debian 发行版,使用apt - get进行软件包管理;CentOS 基于 …...
python训练营打卡第30天
模块和库的导入 知识点回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 一、导入官方库 1.标准导入:导入整个库 import mathprint(&quo…...
时间序列预测实战:用 LSTM 预测股票价格
📈 时间序列预测实战:用 LSTM 预测股票价格(PyTorch 实现) 时间序列预测是深度学习在金融领域最常见的应用之一。本文将带你使用 PyTorch 搭建一个基于 LSTM 的模型,对股票收盘价进行预测,完整掌握从数据预处理到预测结果可视化的全流程。 🎯 一、项目目标 任务:基于…...

STM32 | FreeRTOS 消息队列
01 一、概述 队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断和任务间传递信息,实现了任务接收来自其他任务或中断的不固定长度的消息,任务能够从队列里面读取消息,当队列中的消…...

便捷的Office批量转PDF工具
软件介绍 本文介绍的软件是一款能实现Office批量转换的工具,名为五五Excel word批量转PDF。 软件小巧 这款五五Excel word批量转PDF软件大小不到2M。 操作步骤一 使用该软件时,只需把软件和需要转换的Word或Excel文件放在同一个文件夹里。 操作步骤…...
pom.xml中的runtime
在 Maven 的 pom.xml 文件中,<scope> 元素可以指定依赖项的作用范围,而 runtime 是其中的一个作用范围值。以下是 runtime 作用范围的含义: 定义:runtime 作用范围表示该依赖项在编译时不需要,但在运行时需要。…...
SpringMVC 通过ajax 实现文件的上传
使用form表单在springmvc 项目中上传文件,文件上传成功之后往往会跳转到其他的页面。但是有的时候,文件上传成功的同时,并不需要进行页面的跳转,可以通过ajax来实现文件的上传 下面我们来看看如何来实现: 方式1&…...

opcUA 编译和建模入门教程(zhanzhi学习笔记)
一、使用SIOME免费工具建模 从西门子官网下载软件SIOS,需要注册登录,下载安装版就行。下载后直接安装就可以用了,如图: 安装完成后打开,开始建模,如图左上角有新建模型的按钮。 新建了新工程后,…...

【关联git本地仓库,上传项目到github】
目录 1.下载git2.绑定用户3.git本地与远程仓库交互4.github项目创建5.上传本地项目到github6.完结撒花❀❀❀!!! 1.下载git git下载地址:https://git-scm.com/downloads 下载安装后创建快捷地址:(此处比较…...
初步认识HarmonyOS NEXT端云一体化开发
视频课程学习报名入口:HarmonyOS NEXT端云一体化开发 1、课程设计理念 本课程采用"四维能力成长模型"设计理念,通过“能看懂→能听懂→能上手→能实战”的渐进式学习路径,帮助零基础开发者实现从理论认知到商业级应用开发的跨越。该模型将学习过程划分为四个维度…...

WebRTC技术EasyRTC音视频实时通话驱动智能摄像头迈向多场景应用
一、方案背景 在物联网蓬勃发展的当下,智能摄像头广泛应用于安防、家居、工业等领域。但传统智能摄像头存在视频传输延迟高、设备兼容性差、网络波动时传输不稳定等问题,难以满足用户对实时流畅交互视频的需求。EasyRTC凭借低延迟、高可靠、跨平台特性…...
分布式ID生成器:原理、对比与WorkerID实战
一、为什么需要分布式ID? 在微服务架构下,单机自增ID无法满足跨服务唯一性需求,且存在: • 单点瓶颈:数据库自增ID依赖单表写入 • 全局唯一性:跨服务生成可能重复 • 扩展性差:分库分表后ID规…...

java 代码查重(三)常见的距离算法和相似度(相关系数)计算方法
目录 一、几种距离度量方法 【 海明距离 /汉明距离】 【 欧几里得距离(Euclidean Distance) 】 【 曼哈顿距离 】 【 切比雪夫距离 】 【 马氏距离 】 二、相似度算法 【 余弦相似度 】 【 皮尔森相关系数 】 【 Jaccard相似系数 /杰卡德距离】…...

LangChain4j入门AI(六)整合提示词(Prompt)
前言 提示词(Prompt)是用户输入给AI模型的一段文字或指令,用于引导模型生成特定类型的内容。通过提示词,用户可以告诉AI“做什么”、 “如何做”以及“输出格式”,从而在满足需求的同时最大程度减少无关信息的生成。有…...

redis--redisJava客户端:Jedis详解
在Redis官网中提供了各种语言的客户端,地址: https://redis.io/docs/latest/develop/clients/ Jedis 以Redis命令做方法名称,学习成本低,简单实用,但是对于Jedis实例是线程不安全的(即创建一个Jedis实例&a…...

[CSS3]百分比布局
移动端特点 PC和手机 PC端网页和移动端网页的有什么不同? PC屏幕大,网页固定版心手机屏幕小,网页宽度多数为100% 谷歌模拟器 使用谷歌模拟器可以在电脑里面调试移动端的网页 屏幕尺寸 了解屏幕尺寸概念 屏幕尺寸: 指的是屏幕对角线的长度ÿ…...

【Java微服务组件】异步通信P2—Kafka与消息
欢迎来到啾啾的博客🐱。 记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。 欢迎评论交流,感谢您的阅读😄。 目录 引言Kafka与消息生产者发送消息到Kafka批处理发送设计消息的幂等信息确保消息送达acks配置…...

R语言空间数据处理入门教程
我的课程《R语言空间数据处理入门教程》已重新恢复课程售卖,有需要的读者可以学习。 👇点击下方链接(文末“阅读原文”可直达),立即开启你的空间数据之旅: https://www.bilibili.com/cheese/play/ss13775…...

使用zap,对web应用/API接口 做安全检测
https://www.zaproxy.org/getting-started/ 检测方法 docker pull ghcr.io/zaproxy/zaproxy:stable# 执行baseline测试 docker run -t ghcr.io/zaproxy/zaproxy:stable zap-baseline.py \ -t https://baseline.yeshen.org# 执行api测试 docker run -t ghcr.io/zaproxy/zaproxy…...

UE5.6新版本—— 动画光照系统重点更新
UE5.6预览版已经可以下载,发布会在下个月的6.5号发布。 5.6界面UI设计 5.6 对引擎进行了大规模的重新设计,先看整体内容,主题UI设计 被调整了位置,左边大多数的选择,框选工具,吸附工具,挪到了左…...
TypeScript 泛型讲解
如果说 TypeScript 是一门对类型进行编程的语言,那么泛型就是这门语言里的(函数)参数。本章,我将会从多角度讲解 TypeScript 中无处不在的泛型,以及它在类型别名、对象类型、函数与 Class 中的使用方式。 一、泛型的核…...

腾讯位置服务重构出行行业的技术底层逻辑
位置智能:重构出行行业的技术底层逻辑 在智慧城市建设与交通出行需求爆发的双重驱动下,位置服务正从工具层跃升为出行行业的核心基础设施。腾讯位置服务以“连接物理世界与数字空间”为核心理念,通过构建高精度定位、实时数据融合、智能决策…...
面试相关的知识点
1 vllm 1.1常用概念 1 vllm:是一种大模型推理的框架,使用了张量并行原理,把大型矩阵分割成低秩矩阵,分散到不同的GPU上运行。 2 模型推理与训练:模型训练是指利用pytorch进行对大模型进行预训练。 模型推理是指用训…...

如何用JAVA手写一个Tomcat
一、初步理解Tomcat Tomcat是什么? Tomcat 是一个开源的 轻量级 Java Web 应用服务器,核心功能是 运行 Servlet/JSP。 Tomcat的核心功能? Servlet 容器:负责加载、实例化、调用和销毁 Servlet。 HTTP 服务器:监听端口…...