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 应用程序在处理文件包含功能时,由于对用户输入的文件路径缺乏严格验证和过滤,导致攻击者可通过篡改参数指定恶意文件路径。攻击者能利用该文件包含来读取服务器敏感文件,或包含恶意脚本文件执行任意代码,从而获取服务器权限、篡改数据、植入后门等,严重威胁系统安全。

三、文件包含与图片马

通过文件包含访问图片马,可以使服务器执行包含恶意脚本的代码,具体步骤如下所示。

  1. 制作图片马:选择一张正常的图片,利用工具将恶意脚本代码嵌入到图片中。例如,对于 PHP 的图片马,可以在图片文件test15.jpg末尾添加一段 PHP 恶意代码,如<?php phpinfo();?>,这段代码会获取服务器的php版本信息。
  2. 上传图片马:通过网站的文件上传功能或其他途径,将制作好的图片马上传到目标服务器。如果服务器存在文件包含风险,且对上传文件的验证不严格,图片马就有可能成功上传。
  3. 利用文件包含访问图片马:攻击者通过构造特殊的 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

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

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

相关文章

基于区块链的茅台酒溯源系统:设计方案、应用实例及未来展望

一、项目背景与需求 茅台酒&#xff0c;作为中国白酒的瑰宝&#xff0c;以其深厚的历史底蕴和独特的酿造工艺享誉全球。然而&#xff0c;市场上假冒伪劣产品的泛滥&#xff0c;不仅严重损害了消费者的权益&#xff0c;也对茅台酒的品牌声誉造成了巨大冲击。为了解决这一问题&a…

openCV1.1 Mat对象

imread(“D:\souse\duoxile.jpg”, IMREAD_COLOR); 功能: 从指定路径读取图像文件并解码为OpenCV的Mat对象 第一个参数: 文件路径 类型: const string&描述: 要读取的图像文件的绝对或相对路径示例: “D:\souse\duoxile.jpg” 或 “./images/test.png”第二个参数: 读取模…

java day14

接昨天&#xff0c;响应 响应 就是我们在处理请求的时候&#xff0c;里面的return 其实方法里面写的return的返回平常的什么字符串啊什么等等&#xff1b;这些东西都是直接返回&#xff1b;如果是一个对象的话&#xff0c;我们会按json的格式返回&#xff1b; 这些都依赖于一…

【软件设计师】计算机网络考点整理

以下是软件设计师考试中 ​​计算机网络​​ 的核心考点总结&#xff0c;帮助您高效备考&#xff1a; ​​一、网络体系结构与协议​​ ​​OSI七层模型 & TCP/IP四层模型​​ 各层功能&#xff08;物理层-数据链路层-网络层-传输层-会话层-表示层-应用层&#xff09;对应协…

基于深度学习的工件检测系统设计与实现

在工业自动化领域&#xff0c;工件检测一直是提高生产效率和产品质量的关键环节。传统的人工检测方法不仅效率低下&#xff0c;而且容易受到主观因素的影响&#xff0c;导致误判率较高。随着深度学习技术的飞速发展&#xff0c;基于图像识别的自动检测系统逐渐成为研究热点。今…

IIS入门指南:原理、部署与实战

引言&#xff1a;Web服务的基石 在Windows Server机房中&#xff0c;超过35%的企业级网站运行在IIS&#xff08;Internet Information Services&#xff09;之上。作为微软生态的核心Web服务器&#xff0c;IIS不仅支撑着ASP.NET应用的运行&#xff0c;更是Windows Server系统管…

Linux周测(一)

提示&#xff1a;学习一周了&#xff0c;来检验一下成果吧 文章目录 技术部分&#xff0c;满分100分。 1.如何在Linux系统中查看当前登录的所有用户信息&#xff1f; w或者who或者last 2.请写出在Linux系统中创建一个新用户“testuser”的命令&#xff0c;并指定其家目录为“/h…

构建下一代AI智能体:基于Spring AI的多轮对话应用

构建下一代AI智能体&#xff1a;基于Spring AI的多轮对话应用 前言 大模型时代&#xff0c;AI应用开发已不再是遥不可及的技术。通过合理设计的Prompt工程和对话架构&#xff0c;开发者可以快速构建具备持续记忆能力的AI智能体。本文将重点介绍如何基于Spring AI框架打造可持…

查看mysql配置文件my.cnf的位置

3.删除mysql相关文件 想要完全卸载mysql&#xff0c;不仅要卸载应用&#xff0c;配置文件及相关文件也需要一一清除&#xff0c;还原环境配置&#xff0c;减少一些麻烦。 sudo rm -rf /usr/local/mysql sudo rm -rf /etc/my.cnf sudo rm -rf /var/db/mysql sudo rm -rf /var/…

【从基础到模型网络】深度学习-语义分割-基础

语义分割在深度学习与人工智能领域占据重要地位。它是计算机视觉的核心任务之一&#xff0c;能够将图像像素级地划分为不同语义类别&#xff0c;为理解图像内容提供关键支持。在自动驾驶中&#xff0c;可精准识别道路、车辆、行人等元素&#xff0c;保障行车安全&#xff1b;在…

C++:array容器

array容器是序列容器&#xff0c;它的特点是&#xff1a;静态&#xff0c;固定数目。可以看作更安全的数组。 它还有一些成员函数&#xff0c;如begin&#xff08;&#xff09;&#xff1a;返回指向容器中第一个元素的随机访问迭代器。 #include<iostream>//数组容器 #…

2025年度消费新潜力白皮书470+份汇总解读|附PDF下载

原文链接&#xff1a;https://tecdat.cn/?p42178 过去一年&#xff0c;消费市场在政策驱动与技术迭代中呈现结构性变革。社零总额达487,895亿元&#xff0c;实物商品网零额占比27%&#xff0c;线上渠道成为增长引擎。本报告从食品饮料、美妆护肤、家电数码、服饰户外四大核心领…

[Web服务器对决] Nginx vs. Apache vs. LiteSpeed:2025年性能、功能与适用场景深度对比

更多服务器知识&#xff0c;尽在hostol.com 当你准备为你的网站或应用程序选择一款 Web 服务器软件时&#xff0c;就像是为你的“超级跑车”选择一款合适的“引擎”——它将直接决定你的“座驾”能跑多快、多稳、以及能适应什么样的“路况”&#xff08;工作负载&#xff09;。…

一款适配国内的视频软件,畅享大屏与局域网播放

软件介绍 今天要给大家安利一款超强视频播放软件——MXPlayer。它的解码实力堪称一绝&#xff0c;市面上不管是常见的 MP4、MKV 格式&#xff0c;还是对播放设备要求极高的超高清 4K、HDR 视频&#xff0c;甚至那些鲜为人知的冷门格式&#xff0c;它统统都能流畅播放&#xff…

[CSS3]百分比布局

移动端特点 PC和手机 PC端网页和移动端网页的有什么不同? PC屏幕大&#xff0c;网页固定版心手机屏幕小&#xff0c;网页宽度多数为100% 谷歌模拟器 使用谷歌模拟器可以在电脑里面调试移动端的网页 屏幕尺寸 了解屏幕尺寸概念 屏幕尺寸: 指的是屏幕对角线的长度&#xff…

【低代码】如何使用明道云调用 Flask 视图函数并传参(POST 方法实践)

在自动化办公或业务流程管理中,明道云提供了强大的 HTTP 请求节点,可以直接调用第三方 API,包括我们常见的 Flask 服务端接口。本文将详细介绍如何使用明道云通过 POST 方法调用 Flask 视图函数并传参,包括配置要点与 Python 后端的参数接收方法。 一、场景介绍 我们希望…

在 Azure OpenAI 上使用 Elastic 优化支出和内容审核

作者&#xff1a;来自 Elastic Muthukumar Paramasivam&#xff0c;Bahubali Shetti 及 Daniela Tzvetkova 我们为 Azure OpenAI 正式发布包添加了更多功能&#xff0c;现在提供内容过滤监控和计费见解的增强&#xff01; 在之前的博客中&#xff0c;我们展示了如何使用 Elasti…

iOS解码实现

import Foundation import VideoToolboxclass KFVideoDecoderInputPacket {var sampleBuffer: CMSampleBuffer? }class KFVideoDecoder {// MARK: - 常量private let kDecoderRetrySessionMaxCount 5private let kDecoderDecodeFrameFailedMaxCount 20// MARK: - 回调var pi…

Redis应用--缓存

目录 一、什么是缓存 1.1 二八定律 二、使用Redis作为缓存 三、缓存的更新策略 3.1 定期更新 3.2 实时生成 四、缓存预热、缓存穿透、缓存雪崩和缓存击穿 4.1 缓存预热 4.2 缓存穿透 4.3 缓存雪崩 4.4 缓存击穿 一、什么是缓存 缓存(cache)是计算机的一个经典的概念…

Unity 喷烟喷气特效:喷快消失慢

快速喷气缓慢消失同时播放3*3序列帧动画。常用在火车烟囱特效、气体释放、摔倒、等效果中&#xff0c;可变种应用场景较多。 下列为Particle System参数&#xff1a; Color over Lifetime参数&#xff1a; UnityEditor.GradientWrapperJSON:{"gradient":{"ser…