文件上传-绕过文件类型
目录
原理
当我们上传文件的时候,不仅前端要检验我们文件的后缀名,后端也会检测我们的文件类型。通常后端会获取到我们上
小伙伴们大家好!本期为大家带来的文件上传漏洞之绕过文件类型。 目录 原理 当我们上传文件的时候,不仅前端要检验我们文件的后缀名,后端也会检测我们的文件类型。通常后端会获取到我们上传文件的type属性即我们用burpsuite抓包时经常看到的content-type,它的值与后端获取到的文件type属性是一样的。既然我们可以抓到包,我们就可以修改包,我们通过抓包将数据包中的content-type改成后端代码可以接受的即可,这样就顺利绕过了后端文件类型的检验。 Content-Type 一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。 例如我们上传php文件抓取数据包Content-Type的值为application/octet-stream,而上传png图片抓取数据包Content-Type的值为image/png。 PHP代码如何获取上传文件的类型 前端form表单提交文件数据的时候,后端PHP代码使用$_FILES['file']['type'](这里的中括号里的“file”是form表单提交文件的name值)来获取上传文件的类型。 例如有以下php代码:
可以看出来显示了文件的类型。如果上传的是png图片的话则是image/png。 实战演示 我这里呢是自己写的php+html代码,使用phpstudy集成环境搭建的站点,如果小伙伴们也想搭建的话可以看我之前的一篇讲解MySQL基础+PHP操作MySQL的文章——这里有讲解搭建phpstudy的详细内容。 源码: 2.html
file02.php
1、测试网站的功能是否正常 首先我们还是测试站点是否真正的能够实现文件上传功能,我们先来上传一个png图片试一下。 文件上传成功,我们访问以下看是否能够显示出图片。 文件上传成功并被存储,站点功能正常。 2、尝试上传webshell 这里我们尝试上传一个名为2.php的一句话木马webshell。 点击确定之后发现有前端验证,我们直接鼠标右键点击检查,找到前端验证的代码,并将其删除掉。 接下来再尝试上传2.php 开始上传。 上传之后发现返回了一句请上传png格式的文件。 代表后端可能验证了文件的类型。 我们抓包修改一下content-type再试一下。 修改完Content-Type之后点击forward。返回浏览器看页面的响应情况。 这样我们就成功的将我们的webshell成功的上传到了站点。 3、使用连接工具连接webshell 成功上传webshell之后,接下来我们就要使用webshell连接工具来连接我们的webshell后门。我这里使用的是中国蚁剑,大家使用其他的连接工具菜刀哥斯拉都一样的。 连接成功直接添加数据即可。 这样我们就成功的拿下了这个站点。 总结 后端文件类型的检验主要就是后端代码获取文件的type属性,而数据包中的Content-Type值又是与之对应PHP文件上传,所以我们只需抓取数据包,将数据包中的Content-Type值修改为后端可接收的类型接口绕过。 (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |