了解服务端MIME类型检测
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。
服务端MIME检测类型是通过检查http包的Content-Type字段中的值来判断上传文件是否合法的,例如对图片的检查是看上传过程中http包的Content-Type是否为image/jpeg,如果是就可以成功上传。相关源代码:
红色区域中的if语句只对Content-Type和图片的大小做了判断。
常见的MIME类型:
1.text/plain(纯文本)
2.text/html(HTML文档)
3.text/javascript(js代码)
4.application/xhtml+xml(XHTML文档)
5.image/gif(GIF图像)
6.image/jpeg(JPEG图像)
7.image/png(PNG图像)
8.video/mpeg(MPEG动画)
9.application/octet-stream(二进制数据)
10.application/pdf(PDF文档)
实验过程
首先在桌面上新建一个1.txt,写入“hello_world”。因为目标主机只允许上传jpg文件,那么下载就要绕过这个限制,上传一个txt文件上去。
打开http://10.1.1.59:81,输入用户名:admin 密码:password,点击Upload。
设置好浏览器代理后,我们选择我们刚才创建的txt文件进行上传。此时burpsuite已经截获到了数据包,我们右击选择“send to reprater”。
切换到Repeater中将Content-Type后的text/plain修改为image/jpeg。
点击go,从右侧可以看到已经上传成功,在右下方输入1.txt进行搜索刚才上传的图片。
关闭代理,打开搜索到的路径。
加固方案
如果防范文件上传漏洞的利用,需要对上传的代码中过滤非法的后缀名,只允许白名单中的文件格式进行上传,对上传目录进行脚本权限限制,还有一个就是文件上传包含漏洞,可以包含程序文件然后直接上传,如果还是被上传webshell木马脚本后门的话可以向网站漏洞修复公司SINE安全寻求技术支持。