文件上传漏洞
一些web应用程序中允许上传图片,文本或者其他资源到指定的位置。 文件上传漏洞就是利用网页代码中的文件上传路径变量过滤不严将可执行的文件上传到一个到服务器中,再通过URL去访问以执行恶意代码。
一般来说服务提供者会客户端和服务段做检测和防护:
- JavaScript检测(客户端)
在前端写JS代码,通过白名单或黑名单形式检测。 - MINE类型检测
MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。
常见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截断进行攻击绕过 - 文件扩展名检测
一般是通过白名单或黑名单的方式进行后缀名检测有以下几种绕过方式
- 大小写绕过
- 名单列表绕过
- 00截断绕过
- 通过文件包含漏洞绕过
- .htaccess 文件攻击
.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
- 文件加载检测
-
对渲染/加载测试的攻击方式是代码注入绕过
使用winhex在不破坏文件本身的渲染情况下找一个空白区进行填充代码,一般会是图片的注释区 -
对二次渲染的攻击方式是攻击文件加载器自身
如果要对文件加载器进行攻击,常见的就是溢出攻击;上传自己的恶意文件后,服务器上的文件加载器会主动进行加载测试,加载测试时被溢出攻击执行 shellcode,比如 access/mdb 溢出
例题
攻防世界-高手进阶区-upload1
题目如下
题目很明确,是上传文件,先来看看源代码有没有前端检测
很明显,这里做了前端校验,我们可以通过禁用js的方式或通过burpsuite来进行绕过。
禁用js一般在浏览器的设置里面,如chrome浏览器
- 或者是通过禁用JS的插件,如在火狐里面的插件
- 禁用以后尝试上传一句话木马
- 按照图片里的步骤操作过以后上传成功
- 回显路径,通过路径访问该文件地址,发现成功打印出luck
- 使用蚁剑进行连接
连接后在上级目录中找到了flag.php
双击打开,得到flag