文件上传-前端验证
前端验证一般是在网页上写一段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执行
其他绕过方法可见:文件上传绕过2_xiaoheizi安全的博客-CSDN博客