文件上传-前端验证
前端验证一般是在网页上写一段Js脚本,用Js去检测校验上传文件的后缀名,有白名单也有黑名单。
案例:upload—labs靶场
第一关---前端验证
上传php文件,不给上传
网页右键查看页面元素,发现使用了js来写过滤代码,在表单进行了调用
只需要就表单中将调用js验证语句的代码删除即可
再次点击上传,成功上传,右键打开图片——php成功执行
前端验证非常不可靠,上传正常文件,数据包更改后缀就可以绕过,甚至关闭浏览器JS解析都可以尝试绕过
后端验证——MIME验证
Content-Type方式绕过
MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。MIME消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。常见的MIME类型如下:
文件扩展名 |
Mime-Type |
.js |
application/x-javascript |
.html |
text/html |
.jpg |
image/jpeg |
.png |
image/png |
|
application/pdf |
在HTTP协议中,使用Content-Type字段表示文件的MIME类型。
这种服务器检测和前端检测没什么太大区别,只是检查一下文件的上传格式,虽然无法通过删除浏览器事件来绕过,但是依旧可以使用BURP抓包,修改绕过。
案例:upload—labs
第二关—后端MIME验证
上传php,提示文件类型不正确
根据提示,可以判断是MIME验证,上传时目标服务器检测Content-Type字段,直接burpsuite抓包,更改Content-Type为支持上传的类型
显示的Content-Type为application/octet-stream,而服务器上会检测此字段是否为jpeg等符合标准的文件类型,所以我们可以直接修改Content-Type字段的值为image/jpeg
更改之后上传,成功上传
案例:upload--labs
第四关--- .htacces文件绕过
打开第四关查看提示,发现没有过滤.htacces文件
那么我们就可以先上传一个内容为:
<FilesMatch "php.jpg">
SetHandler application/x-httpd-php
的.htacces文件,让服务器把指定的文件当做PHP文件来执行
然后我们将一句话木马:<?php phpinfo();?>写进php.jpg中
将.htaccess文件上传,再将php.jpg上传,打开图片地址,图片内容成功被当作php执行
原文始发于微信公众号(小黑子安全):文件上传绕过-前端绕过+.htacces绕过
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论