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

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.lryc.cn/news/2383570.html

相关文章:

  • idea无法识别Maven项目
  • 前端三剑客之HTML
  • linux中cpu内存浮动占用,C++文件占用cpu内存、定时任务不运行报错(root) PAM ERROR (Permission denied)
  • RabbitMQ的核心原理及应用
  • 实时监控服务器CPU、内存和磁盘使用率
  • linux国产机安装GCC
  • python训练营打卡第30天
  • 时间序列预测实战:用 LSTM 预测股票价格
  • STM32 | FreeRTOS 消息队列
  • 便捷的Office批量转PDF工具
  • pom.xml中的runtime
  • SpringMVC 通过ajax 实现文件的上传
  • opcUA 编译和建模入门教程(zhanzhi学习笔记)
  • 【关联git本地仓库,上传项目到github】
  • 初步认识HarmonyOS NEXT端云一体化开发
  • WebRTC技术EasyRTC音视频实时通话驱动智能摄像头迈向多场景应用
  • 分布式ID生成器:原理、对比与WorkerID实战
  • java 代码查重(三)常见的距离算法和相似度(相关系数)计算方法
  • LangChain4j入门AI(六)整合提示词(Prompt)
  • redis--redisJava客户端:Jedis详解
  • [CSS3]百分比布局
  • 【Java微服务组件】异步通信P2—Kafka与消息
  • R语言空间数据处理入门教程
  • 使用zap,对web应用/API接口 做安全检测
  • UE5.6新版本—— 动画光照系统重点更新
  • TypeScript 泛型讲解
  • 腾讯位置服务重构出行行业的技术底层逻辑
  • 面试相关的知识点
  • 如何用JAVA手写一个Tomcat
  • 使用 Qt QGraphicsView/QGraphicsScene 绘制色轮