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图…...
反弹shell
shell了解 shell其xxxx是交互,点鼠标敲键盘与计算机进行交互,还有常见的shell(cmd,powershell) shell反弹 当远程连接shell(windows远程桌面,linux有SSH之类),从外面远…...
【动手学深度学习】1.3. 各种机器学习问题
目录 1.3. 各种机器学习问题1)监督学习(supervisedlearning)(1)回归(regression)(2)分类(classification)(3)标记问题&…...
OS进程调度
tss Q1:你是如何保证两个进程不能同时访问共享资源的? ✅ 推荐回答: 我实现了基于结构体的互斥锁,使用 mutex_lock() 来加锁资源。如果已有任务持有锁,则当前任务会被阻塞并加入等待队列,直到被唤醒。解锁…...
MCP和 AI agent 有什么区别和联系
MCP 是什么? MCP(Model Context Protocol,模型上下文协议)是一种开源通信协议,旨在为大型语言模型(LLM)与外部数据源、工具或服务之间建立标准化、安全且灵活的双向连接。它类似于“AI 的 USB-…...
用Recommenders,实现个性化推荐
文章目录 引言一、Recommenders简介二、选择Recommenders的原因三、智能推荐系统的设计与实现四、总结 引言 在这个信息如洪流般涌来的时代,你是否常常在茫茫的信息海洋中迷失方向,为找不到自己心仪的内容而苦恼?今天咱们就来聊聊基于Micros…...
MCP-1:MCP组件与工作流程
MCP-1:MCP组件与工作流程 1.什么是MCP2.MCP架构组件2.1.MCP Hosts2.2.MCP Client2.3.MCP Server3.交互流程3.1.用户提问3.2.LLM 推理选择MCP Server(大模型规划)3.3.调用 MCP Tool3.4.返回结果3.5.数据清洗3.6.反馈信息给用户1.什么是MCP MCP(Model Context Proto…...
NVIDIA GPU 性能调优与诊断完全指南
本文为多 GPU 用户(如 3*RTX A4000 系统)提供一份全面的调优与诊断手册,涵盖功率限制、风扇控制、频率锁定、缓存清理、GPU 重置与性能测试工具等操作命令,适合开发者与研究人员在部署前进行系统级优化与验证。 📌 目录…...
从运维告警到业务决策:可观测性正在重新定义企业数据基础设施
可观测性(Observability)与传统监控(Monitoring)的核心差异,本质上是一种数据维度的主动暴露与被动采集的范式转变。传统监控就像在黑暗森林中设置有限的探照灯,运维人员必须预先假设可能的故障路径&#x…...
配电网运行状态综合评估方法研究
1评估指标体系的构建 [1]冷华,童莹,李欣然,等.配电网运行状态综合评估方法研究[J].电力系统保护与控制,2017,45(01):53-59. 1.1评估范围 图1为配电系统组成示意图,其中A、B、C分别表示高、中、低压配电系统。高压配变(也称主变)将35kV或110kV的电压降到10kV&#…...
Linux中I/O复用机制epoll
1. 为什么会出现 epoll? 在早期的网络编程中,select 是一个非常常用的 I/O 复用机制,用于在多个文件描述符(如套接字)上进行 I/O 操作的检测。select 会将多个文件描述符传入,轮询检查它们的状态ÿ…...
数据库表关系详解
一、一对多关系 特征:表A的一条记录对应表B的多条记录,表B的一条记录仅对应表A的一条记录 示例: 学生表(子表) | id | name | class_id | |-----|------|----------| |1001| 张三 | 111 | |1002| 张四 | 222 | 班级表…...
Agentic Loop与MCP:大模型能力扩展技术解析
一、什么是MCP MCP(Model Context Protocol)是一种用于大语言模型与外部工具交互的协议框架。它允许大语言模型能够调用各种外部工具来扩展其能力边界,如访问文件系统、搜索引擎、数据库等。 MCP的核心价值 能力扩展:使大语言模…...
贪心算法 Part04
总结下重叠区间问题 LC 452. 用最少数量的箭引爆气球 和 LC 435. 无重叠区间 本质上是一样的。 LC 452. 用最少数量的箭引爆气球 是求n个区间当中 , 区间的种类数量 k。此处可以理解为,重叠在一起的区间属于同一品种,没有重叠的区间当然…...
Spring事务简单操作
什么是事务? 事务是一组操作的集合,是一个不可分割的操作 事务会把所有的操作作为⼀个整体, ⼀起向数据库提交或者是撤销操作请求. 所以这组操作要么同时 成功, 要么同时失败. 事务的操作 分为三步: 1. 开启事start transaction/ begin …...
04算法学习_209.长度最小的子数组
04算法学习_209.长度最小的子数组题目描述:个人代码:学习思路:第一种写法:题解关键点: 第二种写法:题解关键点: 个人学习时疑惑点解答: 04算法学习_209.长度最小的子数组 力扣题目链…...
./build/mkfs.jffs2: Command not found
参考文章:https://blog.csdn.net/FLM19990626/article/details/132070195 sudo apt-get install lib32stdc6 sudo apt-get install lib32z1 sudo apt-get install mtd-utils sudo apt-get install man-db sudo apt-get install liblzo2-dev:i386sudo ldconfig...
从零基础到最佳实践:Vue.js 系列(4/10):《Vue Router 路由管理:深入探索与实战应用》
引言 在现代前端开发中,单页应用(SPA)凭借其流畅的用户体验和高性能成为主流。Vue Router 作为 Vue.js 的官方路由管理工具,为开发者提供了强大的路由管理能力,帮助实现页面导航、权限控制和动态内容加载。本文将从基…...
深入解析C++静态成员变量与函数
当然可以!下面是对这段 C 代码的逐行详细注释说明和解释,帮助你理解静态成员变量和静态成员函数的使用。 🧱 类定义部分:MyClass cpp 深色版本 #include <iostream> 说明:包含标准输入输出流库,用于…...
基于JDBC的信息管理系统,那么什么是JDBC呢?什么又是DAO类?
1.JDBC JDBC 即 Java Database Connectivity,是 Java 语言中用于与数据库进行交互的一套 API。它提供了一种标准的方式,让 Java 程序能够连接到各种不同类型的数据库,并执行 SQL 语句来实现对数据库的查询、插入、更新和删除等操作。 主要功…...
Java虚拟机 -虚拟机栈
虚拟机栈详解 虚拟机栈概述案例常见的跟虚拟栈异常相关的异常StackOverflowError异常OutOfMemoryError异常 栈的基本存储单位局部变量表IDEA Jclasslib Bytecode Viewer插件slot 操作数栈方法调用(待后续补充) 虚拟机栈 上一篇文章,我们简单…...
【AI News | 20250521】每日AI进展
AI Repos 1、OpenHands OpenHands(前身为OpenDevin)是一个由AI驱动的软件开发代理平台,它能够像人类开发者一样修改代码、运行命令、浏览网页、调用API,甚至从StackOverflow复制代码片段。用户可以通过OpenHands Cloud轻松上手&a…...
RAG 挑战赛冠军方案解析:从数据解析到多路由器检索的工程实践,推荐阅读!
多路由器 动态知识库:RAG 冠军方案的核心技术揭秘 源码地址:https://github.com/IlyaRice/RAG-Challenge-2/tree/main 公司年报智能问答比赛任务简介 比赛的任务是基于公司年度报告构建一个问答系统。简单来说,比赛当天的流程如下ÿ…...
Java基础 Day17
一、递归 方法直接或者间接调用本身 将大问题, 层层转化为一个与原问题相似的、规模更小的问题来解决 二、异常 程序在编译或执行过程中,出现的非正常的情况 (错误) 语法错误不是异常 1、阅读异常信息 从下往上看:发生异常的位置、异常名称、发生异…...
系分论文《论软件系统安全分析和应用》
系统分析师论文范文系列 【摘要】 2023年3月,我司承接了某知名电商企业“智能化供应链管理系统”的开发任务,我作为系统分析师负责全面的安全分析与设计工作。该系统以提升电商供应链效率为核心,整合仓储、物流、支付等模块,并需应…...
蓝耘Ubantu服务器测试最新 PP-StructureV3 教程
一、服务器配置 二、安装Anaconda3 进入云服务器后删除minconda文件夹 官网: https://repo.anaconda.com/archive/ 在里面找到自己系统的安装包,然后右击复制链接安装。 一定要选择Anaconda,因为很多依赖问题用Minconda容易报错。 wget https://repo…...
File文件
路径: 相对路径:以 当前工作目录(或指定的基准目录)为起点,描述目标文件或目录的位置,不包含根目录信息,仅表示与基准目录的相对位置关系。绝对路径:从文件系统的 根目录 开始&…...
Wireshark抓包分析小程序接口请求教程
## 1. 准备工作 ### 1.1 安装Wireshark - 访问Wireshark官网 (https://www.wireshark.org/) 下载最新版本 - 按照安装向导完成安装 - 确保安装时选择安装WinPcap或Npcap(用于网络数据包捕获) ### 1.2 配置环境 - 确保电脑已连接网络 - 如果使用手机…...
C++之模板进阶(探索C++模板:非类型参数与特化技巧)
本节目标: 1.非类型模板参数 2.类模板的特化 3.类模板特化的应用之类型萃取 4.模板的分离编译 非类型模板参数 模板参数分 类型形参与非类型形参 类型形参:出现在模板参数列表中,跟在class或者typename之类的参数类型名称 非类型形…...
【项目记录】准备工作及查询部门
1 开发规范 1.1 前后端分离开发 现在的企业项目开发有2种开发模式:前后台混合开发和前后台分离开发。 前后台混合开发,顾名思义就是前台后台代码混在一起开发 这种开发模式有如下缺点: 1. 沟通成本高:后台人员发现前端有问题&a…...
chromedp -—— 基于 go 的自动化操作浏览器库
chromedp chromedp 是一个用于 Chrome 浏览器的自动化测试工具,基于 Go 语言开发,专门用于控制和操作 Chrome 浏览器实例。 chromedp 安装 go get -u github.com/chromedp/chromedp基于chromedp 实现的的简易学习通刷课系统 目前实现的功能ÿ…...
企业级调度器LVS
访问效果 涉及内容:浏览拆分、 DNS 解析、反向代理、负载均衡、数据库等 1 集群 1.1 集群类型简介 对于⼀个业务项⽬集群来说,根据业务中的特性和特点,它主要有三种分类: 高扩展 (LB) :单个主机负载不足的时候…...
MySQL中的重要常见知识点(入门到入土!)
基础篇 基础语法 添加数据 -- 完整语法 INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);-- 示例 insert into employee(id,workno,name,gender,age,idcard,entrydate) values(1,1,Itcast,男,10,123456789012345678,2000-01-01) 修改数据 -- 完整语法 UPDA…...
29.第二阶段x64游戏实战-技能冷却
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:28.第二阶段x64游戏实战-代码实现遍历技能 找技能冷却要通过一个技能cd长点的&…...
第19天-Python自动化生成PPT图文教程(基于python-pptx)
环境准备 pip install python-pptx Pillow 基础示例:批量插入图片 from pptx import Presentation from pptx.util import Inches import os from PIL import Image def create_image_slides(): # 初始化演示文稿 prs = Presentation() # 获取当前目录所…...
基于STM32的骑行语音播报系统
目录 一、前言 二、项目功能说明 三、主要元器件 四、原理图与PCB 五、手机APP 六、完整资料 一、前言 项目成品图片: 哔哩哔哩视频链接: 咸鱼商品链接: 基于STM32的骑行语音播报系统 二、项目功能说明 基础功能: 1&…...
springboot链接nacos测试
代码资料链接:https://download.csdn.net/download/ly1h1/90881498 场景说明:本次测试是springboot项目,可以链接上ncaos,将对应命名空间下的配置信息读取出俩,然后可以在接口进行返回显示。 0.环境配置 1.代码结构 …...
【初识】内网渗透——基础概念,基本工具使用
目录 一、域,工作组,域控制器,活动目录相关概念: 域环境: 工作组: 域控制器DC: 活动目录AD: 二、内网的基本场景: 三、内网渗透基本测试方案: #案例1一基本信…...
AI练习:混合圆
方法一:在圆内 1.画圆 选择椭圆工具,按住Shift键绘制正圆; CtrlC复制,CtrlF原地粘贴,按住Shift键缩小圆,移动位置; 再CtrlC,CtrlF,再按住Shift键缩小圆,移…...
心知天气 API 获取天气预报 2025/5/21
心知天气 API 获取天气预报 2025/5/21 URL格式: https://api.seniverse.com/v3/weather/now.json?key填你的秘钥&locationbeijing(这里填城市 可以用拼音)&languagezh-Hans&unitc 返回格式如下:...
PCB设计教程【入门篇】——电路分析基础-元件数据手册
前言 本教程基于B站Expert电子实验室的PCB设计教学的整理,为个人学习记录,旨在帮助PCB设计新手入门。所有内容仅作学习交流使用,无任何商业目的。若涉及侵权,请随时联系,将会立即处理 目录 前言 一、数据手册的重要…...
java上机测试错题回顾(1)
平时不能摸鱼太多,这样导致到最后不能摸鱼...... 看了看日历原来是6.12就结课了,啊哈哈,真没几天准备了,期末月你要来了吗? 1 参数传递,值传递~! 题目 以下代码的输出结果为( &a…...
HTTP相关内容
应用层 自定义应用层协议,协议:约定 1.约定好通信传输的信息 2.约定好数据的组织格式(xml, json(重点), protobuf) 也可以基于现成的应用层协议,来进行开发 协议的种类非常多(HTTP 协议属于翘楚,1.手机,2 网站) 跟正确的说,咱们现在使用的是 HTTPS 这个协议,HTTP和HTTPS …...
【笔记】排查并解决Error in LLM call after 3 attempts: (status code: 502)
#工作记录 一、问题描述 在部署运行部署对冲基金分析工具 ai-hedge-fund 时,不断出现以下报错,导致项目运行异常: Error in LLM call after 3 attempts: (status code: 502) Error in LLM call after 3 attempts: [WinError 10054] 远程主…...
基于python的机器学习(七)—— 数据特征选择
目录 一、特征选择概念 二、特征选择的方法 2.1 过滤式特征选择 2.1.1 方差分析 2.1.2 相关系数 2.1.3 卡方检验 2.2 包裹式特征选择 2.2.1 递归特征消除 2.3 嵌入式特征选择 2.3.1 决策树特征重要性 一、特征选择概念 特征选择是机器学习非常重要的一个步骤&#x…...
从电商角度设计大模型的 Prompt
从电商角度设计大模型的 Prompt,有一个关键核心思路:围绕具体业务场景明确任务目标输出格式,帮助模型为运营、客服、营销、数据分析等工作提效。以下是电商场景下 Prompt 设计的完整指南,包含通用思路、模块范例、实战案例等内容。…...
从零基础到最佳实践:Vue.js 系列(5/10):《状态管理》
引言 你是不是正在用 Vue.js 开发一个很酷的应用,然后发现组件之间的数据传递变得越来越混乱?比如,一个按钮的状态要传到好几层组件,或者多个页面需要共享同一个用户信息。这时候,状态管理就登场了!在 Vue…...
git checkout HEAD
git checkout HEAD 主要用于将工作目录和暂存区的内容重置为当前 HEAD 指向的提交状态,常用于撤销未提交的修改15。具体行为如下: 一、核心作用 恢复工作区文件 将指定文件或全部文件恢复到 HEAD 指向的提交状态,丢弃工作区中未暂存的修改…...
git工具使用
安装Git 在开始使用Git之前,需要在本地计算机上安装Git工具。Git支持Windows、macOS和Linux系统。可以从Git官方网站下载适合操作系统的安装包,并按照安装向导进行安装。 bash复制插入 # 在Linux上安装Git sudo apt-get install git# 在macOS上安装Git…...
极大似然估计与机器学习
复习概统的时候突然发现好像极大似然估计MLE与机器学习的数据驱动非常相似,都是采样样本然后估计模型参数。貌似,后知后觉的才意识到极大似然估计就是机器学习有效的数学保证 下面以拟合线性分布的最小二乘与分类问题为例推到以下如何从似然函数推导出M…...