前端JS绕过、MIME类型绕过

时间:2023-01-03 15:55:58

文件上传漏洞 — 前端JS绕过、MIME类型绕过

文件上传漏洞的相关讲解基于upload-labs靶场,搭建教程见​​文件上传漏洞靶机搭建教程​

前端JS绕过

浏览器访问​​http://127.0.0.1/Pass-01/index.php进入靶机`pass01`漏洞练习页面:​

前端JS绕过、MIME类型绕过

  • webshell:就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,主要用于​​网站管理​​、​​服务器管理​​、​​权限管理​​等操作。使用方法简单,只需上传一个代码文件,通过网址访问,便可进行很多日常操作,极大地方便了使用者对网站和服务器的管理。正因如此,也有小部分人将代码修改后当作后门程序使用,以达到控制网站服务器的目的。

解决方法

发现pass01就是典型的前端JS进行的文件检校,所以针对前端的JS绕过方式有二种:

方法一

直接在浏览器中禁用JS脚本,让JS脚本不发挥作用

前端JS绕过、MIME类型绕过

前端JS绕过、MIME类型绕过

禁用Js脚本后就可以进行.php的上传操作:

前端JS绕过、MIME类型绕过

方法二

通过Burp Suit 进行抓包改后缀名,绕过前端的JS检校。

  1. 上传允许的后缀名文件
  2. 通过Burp Suit修改后缀名称

前端JS绕过、MIME类型绕过

MIME类型绕过

浏览器访问​​http://127.0.0.1/Pass-02/index.php进入靶机`pass02`漏洞练习页面:​

前端JS绕过、MIME类型绕过

通过上传shell.php文件发现**​​提示:文件类型不正确,请重新上传!​​**,可以判断该pass是检查的文件的MIME类型。

关于什么是MIME类型,本文提供一个开发者手册地址:​​https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types​

  • 媒体类型(通常称为 Multipurpose Internet Mail ExtensionsMIME 类型 )是一种标准,用来表示文档、文件或字节流的性质和格式。它在​​IETF RFC 6838​​中进行了定义和标准化。

语法

通用结构

type/subtype

  • MIME的组成结构非常简单;由类型与子类型两个字符串中间用'/'分隔而组成。不允许空格存在。type 表示可以被分多个子类的独立类别。subtype 表示细分后的每个类型。
  • MIME类型对大小写不敏感,但是传统写法都是小写。

类型举例

text/plain text/html image/jpeg image/png audio/mpeg audio/ogg audio/* video/mp4 application/* application/json application/javascript application/ecmascript application/octet-stream …

解决方法

方法一:

利用Burp Suit修改成允许的MIME类型进行文件上传

采用image/jpeg、image/png的MIME类型:

上传**​​.php​​**后缀的文件,修改请求包内容内的​​Content-Type​​,将​​application/octet-stream​​修改为​​image/png​​或者​​image/jpeg​​即可上传成功。

前端JS绕过、MIME类型绕过

方法二:

在本地电脑将.php后缀文件修改成.jpg文件

通过Burp Suit修改后缀名称:

上传**​​.jpg​​**后缀的文件,修改请求包内容内的文件名称,将​​.jpg​​修改为​​.php​​即可上传成功。

前端JS绕过、MIME类型绕过