前言
此文章只用于学习和反思巩固文件上传漏洞知识,禁止用于做非法攻击。注意靶场是可以练习的平台,不能随意去尚未授权的网站做渗透测试!!!
一、回顾上一关知识点
上一关是一个js前端验证的文件上传,我们可以通过禁用js代码,或者是修改删除页面代码,又或者是bp抓包修改来达到js前端验证绕过。让我们看看这一关是怎么通关
二、第二关要了解的知识点
1、什么是白名单
白名单就是设置用户能通过的名单。与之相反,黑名单就是设置用户禁止通过的名单。白名单相对安全一点。
2、什么是MIME
MIME (Multipurpose Internet Mail Extensions)
是描述消息内容类型的标准,用来表示文档、文件或字节流的性质和格式。MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。
浏览器通常使用 MIME 类型(而不是文件扩展名)来确定如何处理URL,因此 We b服务器在响应头中添加正确的 MIME
类型非常重要。如果配置不正确,浏览器可能会无法解析文件内容,网站将无法正常工作,并且下载的文件也会被错误处理。
在这一关我们只要知道MIME是一个文件类型,通常在数据包Content-Type中可找到。这一关是通过验证MIME文件类型来判断文件是否能上传。
三、靶场第二关思路
- 1、分析源代码
- 2、通过bp修改MIME类型达到绕过
- 3、检查文件是否成功上传
1、分析源代码
其中发现关键代码
if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif'))
这一个代码的意思是判断文件上传的类型MIME如果是image/jpeg,image/png,image/gif的话,文件就能成功上传,否则上传失败。这就是典型的白名单MIME验证。
2、通过bp修改MIME类型达到绕过
(如图所示)现在我们知道这是一个白名单MIME验证,不是文件后缀名验证。那么我们是否可以上传一个php后门文件然后通过bp截包修改MIME然后再放包达到绕过呢?我们可以来试一试
这里我上传是带有phpinfo的php文件。
找到Content-Type,也就是MIME。把它修改为image/jpeg,image/png,image/gif任意一种。这里我修改为image/jpeg类型(如图所示)然后放包。
发现上传成功了
3、检查文件是否成功上传
我们看看服务器是否成功上传了此文件,同时也去访问此文件地址,看看php文件是否成功被解析。(如图所示)
发现是成功解析了php文件,如果是上传后门就可以直接连接菜刀了。
总结
这一关是基于白名单MIME验证的绕过,虽然说白名单相对安全。但是只验证MIME类型是不安全的,它可以通过抓包修改达到绕过。此文章是小白自己为了巩固文件上传漏洞而写的,大佬路过请多指教!