目录
(图片来源于网络)
一、什么是文件上传漏洞
二、漏洞产生的原因
三、常见校验上传文件的方法
通常情况下,如果白名单能满足需求,就尽量使用白名单,因为白名单更加的安全,而黑名单容易被意想不到的方法进行绕过。
-
HTTP协议规定了上传资源的时候会在请求头Header中添加一项MIMETYPE,即Content-Type,用来标识上传资源内容的类型,这个动作一般由浏览器来完成,常见的MIMETYPE类型如下:
- text/plain,纯文本
- text/html,HTML文档
- text/javascript,JS代码
- application/x-www-urlencoded,POST方法提交的表单
- application/msword,MicrosoftWord文件
- application/变成语言,该种编程语言的代码
- application/pdf,PDF文档
- application/octet-stream,二进制数据
- application/xhtml+xml,XHTML文档
- image/gif+jpeg+png,各种类型的图片
- vedio/mpeg,动画
- multipart/form-data,POST提交时伴随文件上传的表单
-
后端在处理上传请求的时候,可以获取header种的Content-Type类型,来判断上传的文件是否符合要求。当然这种方式也很容易被绕过,使用BP工具,拦截浏览器请求,修改Content-Type类型就行了,虽然这种方法不保险,但是加上一层防护也还是必
- JPG,JPE,JPEG对应
FF D8 FF E0 00
”JPGGraphicFile” - GIF对应
47 49 46 38 39 61
”GIF89A” - PNG对应
89 50 4E 47
- ZIP对应
50 4B 03 04
”ZipCompressed” - RAR对应
52 61 72 21
- DOC/XLS/PPT对应
D0 CF 11 E0 A1 B1 1A E1
-
doc;.xls;.xlt;.ppt;.apr,”MSCompoundDocumentv1orLotusApproachAPRfile”(D0CF11E0A1B11AE1)
后端可以检查文件头的前几位字节,就可以判断是否为合法的文件类型,但是这种方式也不是完全保险的,并不能替代检查文件后缀的方式,因为黑客完全可以构造一个脚本文件,其文件头伪装成正常的上传文件类型。
- 一次渲染(代码注入)
- 二次渲染
四、绕过方法
1.前端绕过
- 通过浏览器F12很简单的修改文件后缀名就可以完成绕过检查。
- 木马修改后缀名后上传,通过改包工具修改上传。
- 如果是JS脚本检测,在本地浏览器客户端禁用JS即可。可使用火狐浏览器的NoScript插件、IE中禁用掉JS等方式实现绕过。
2. 校验请求头content-type字段绕过
3. 文件头检查文件
4.二次渲染绕过
5.文件加载检测:
-
后缀名检测
后缀黑名单检测:找查blacklist(黑名单列表)的漏网之鱼,例如
-
大小写:如果检测的时候不忽略大小写,那么可以改变后缀名的大小写绕过
-
扩展名:列表中如果忽略了某些后缀
-
能被解析的文件扩展名列表:
-
jsp jspx jspf
-
asp asa cer aspx
-
php php php3 php4 pht
-
exe exee
-
-
后缀白名单检测:白名单检测还是会比黑名单强一点,常见的绕过方法有%00截断,还有服务器的解析漏洞
-
%00截断漏洞:如果存在这类漏洞,那么后缀名的检测都可以绕过,此时我们可以如下命名一个上传文件
test.php%00.jpg
-
解析漏洞:这类漏洞是本身服务器的中间件产生的,例如apache,nginx都被爆出过存在解析漏洞,存在解析漏洞的话,上传的安全性几乎就完全失去了,下面再详细分析。文件上传漏洞 )
五、文件防御
文件上传漏洞防御
- 首先,上传的文件能够被Web容器解释执行。所以文件上传后所在的目录要是Web容器所覆盖到的路径。
- 其次,用户能够从Web上访问这个文件。如果文件上传了,但用户无法通过Web访问,或者无法得到Web容器解释这个脚本,那么也不能称之为漏洞。
- 最后,用户上传的文件若被安全检查、格式化、图片压缩等功能改变了内容,则也可能导致攻击不成功。
防范文件上传漏洞常见的几种方法:
作者还是小白菜鸟阶段,文章总结有些不全,望见解,后续会逐渐完善
更多知识点详情请见:
文件上传漏洞 (上传知识点、题型总结大全-upload靶场全解)_Fasthand_的博客-CSDN博客_uaf漏洞