文件上传漏洞 — 前端JS绕过、MIME类型绕过
文件上传漏洞的相关讲解基于upload-labs靶场,搭建教程见
文件上传漏洞靶机搭建教程
前端JS绕过
浏览器访问http://127.0.0.1/Pass-01/index.php进入靶机`pass01`漏洞练习页面:
- webshell:就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,主要用于
网站管理
、服务器管理
、权限管理
等操作。使用方法简单,只需上传一个代码文件,通过网址访问,便可进行很多日常操作,极大地方便了使用者对网站和服务器的管理。正因如此,也有小部分人将代码修改后当作后门程序使用,以达到控制网站服务器的目的。
解决方法
发现pass01就是典型的前端JS进行的文件检校,所以针对前端的JS绕过方式有二种:
方法一
直接在浏览器中禁用JS脚本,让JS脚本不发挥作用
禁用Js脚本后就可以进行.php的上传操作:
方法二
通过Burp Suit 进行抓包改后缀名,绕过前端的JS检校。
- 上传允许的后缀名文件
- 通过Burp Suit修改后缀名称
MIME类型绕过
浏览器访问http://127.0.0.1/Pass-02/index.php进入靶机`pass02`漏洞练习页面:
通过上传shell.php文件发现**提示:文件类型不正确,请重新上传!
**,可以判断该pass是检查的文件的MIME类型。
关于什么是MIME类型,本文提供一个开发者手册地址:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types
- 媒体类型(通常称为 Multipurpose Internet Mail Extensions 或 MIME 类型 )是一种标准,用来表示文档、文件或字节流的性质和格式。它在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
即可上传成功。
方法二:
在本地电脑将.php后缀文件修改成.jpg文件
通过Burp Suit修改后缀名称:
上传**
.jpg
**后缀的文件,修改请求包内容内的文件名称,将.jpg
修改为.php
即可上传成功。