Web安全 - 文件上传漏洞
File Upload
一、原理
一些web应用程序中允许上传图片,文本或者其他资源到指定的位置。
文件上传漏洞就是利用网页代码中的文件上传路径变量过滤不严将可执行的文件上传到一个到服务器中,再通过URL去访问以执行恶意代码。
二、检测与绕过
客户端检测(Javascript检测)
在网页上写一段Javascript脚本,校验上传文件的后缀名,有白名单形式也有黑名单形式。
绕过方法:
1.直接禁用Javascript实现绕过。
2.先改成允许上传的文件类型,然后用Burpsuite改成脚本文件类型,即可绕过。
服务端检测(MINE类型检测)
MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。
绕过:用Burpsuite抓到请求包,更改Content-Type为允许的类型。
常见MIMETYPE
audio/mpeg -> .mp3 application/msword -> .doc application/octet-stream -> .exe application/pdf -> .pdf application/x-javascript -> .js application/x-rar -> .rar application/zip -> .zip image/gif -> .gif image/jpeg -> .jpg / .jpeg image/png -> .png text/plain -> .txt text/html -> .html video/mp4 -> .mp4
服务端检测(目录路径检测)
对目录路径的检测不够严谨而导致可以用00截断进行攻击
绕过:/123.php%00.gif/123.gif -> /123.php
服务端检测(文件扩展名检测)
1.文件名大小写绕过,如: *.aSP *.AsP
2.名单列表绕过,如:*.asa *.cer
3.特殊文件名绕过 //windows文件名最后不能有.或空格,可设为 *.php. 或 *.php+
4.0x00截断绕过 //如:*.php(0x00).jpg 或 *.php%00.jpg
5.文件包含漏洞
6.服务器解析漏洞
7..htaccess
文件攻击<FileMatch "a.jpg"> SetHandler application/x-httpd-php </FilesMatch>
.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
服务端检测(文件内容检测)
文件幻数检测(文件开头)
幻数 magic number,它可以用来标记文件或者协议的格式,很多文件都有幻数标志来表明该文件的格式。
.jpg FF D8 FF E0 00 10 4A 46 49 46 .gif 47 49 46 38 39 61 .png 89 50 4E 47
文件加载检测
1.对渲染/加载测试的攻击方式是代码注入绕过
使用winhex在不破坏文件本身的渲染情况下找一个空白区进行填充代码,一般会是图片的注释区
2.对二次渲染的攻击方式是攻击文件加载器自身
如果要对文件加载器进行攻击,常见的就是溢出攻击;上传自己的恶意文件后,服务器上的文件加载器会主动进行加载测试,加载测试时被溢出攻击执行 shellcode,比如 access/mdb 溢出
三、防御
- 文件扩展名服务端白名单校验。
- 文件内容服务端校验。
- 上传文件重命名。
- 隐藏上传文件路径。
- 限制相关目录的执行权限,防范webshell攻击。