今天的主要内容是分享业务逻辑漏洞探索之上传漏洞,本篇文章字数在2000字之内,阅读用时大约7分钟。php
注:本文中提供的例子均来自网络已公开测试的例子,仅供参考。shell
许多网站都容许用户自行上传照片、电子档材料,若是上传功能没有作好防御措施,就会存在巨大的安全风险。若是Web应用在文件上传过程当中没有对文件的安全性进行有效的校验,攻击者能够经过上传Webshell等恶意文件对服务器进行攻击,这种状况下认为系统存在文件上传漏洞。数据库
如下是部分上传漏洞的场景,如图所示:浏览器
1、无任何过滤安全
如今大部分的研发人员只要有一点安全意识基本上都会对上传功能进行必定的限制,但也不排除仍有网站的上传功能没有任何的防御。对于没有任何防御措施的上传功能,就能够任意上传恶意文件。举个例子:服务器
一、某站点对文件上传无任何的防御。网络
二、找到对应的文件上传功能。jsp
三、直接上传一个恶意文件,不用修改后缀名。编辑器
四、文件上传成功后会返回上传的相对路径。函数
五、全上传路径后访问上传的Webshell,就能够对服务器进行控制。
2、客户端校验绕过
客户端检测最典型的方式就是JavaScript检测,因为JavaScript在客户端执行的特色,能够经过修改客户端代码或先上传符合要求的文件再在上传过程使用BURP等工具篡改文件等方式来绕过。举个例子:
一、某系统存在上传漏洞。
二、将shell文件后缀改成容许上传的文件进行上传,再经过burp进行拦截改后缀,可顺利上传成功。
三、访问shell能够控制整个服务器,获取服务器权限。
3、服务端校验绕过
no.1MIME绕过
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。标准的文件上传组件中会自动上传文件的MIME类型,可是因为MIME类型是从客户端传递的,修改也不影响文件正常运行,所以经过BURP拦截和修改MIME类型能够轻易绕过此类检测。举个例子:
一、某系统使用abcedit编辑器存在mime绕过上传漏洞。
二、上传功能要求只能上传图片格式文件,咱们上传txt文件,使用抓包工具进行拦截。
三、将Content-Type改成gif的mime格式。
四、成功上传txt绕过mime的限制。
no.2文件内容绕过
针对文件头和文件内容检测一般有两种方式,白名单的方式是检测上传的文件中是否有白名单类型文件的文件头等内容特征信息,知足要求方能上传。黑名单是检测一些Webshell的特征,若是包含相关特征就不容许上传。针对白名单检测,能够在知足要求的文件后插入木马脚本语句来绕过。而黑名单则能够经过对关键函数的各种混淆变化来绕过。举个例子:
一、某系统存在上传漏洞,找到相关上传功能。
二、在正常的一张图片中加入一句话木马,制做成图片马,而后将图片马进行上传。
三、发现文件绕过内容检测上传成功,而且能连上shell,可控制整台服务器。
四、能够进一步控制内网。
no.3扩展名绕过
正常状况下若是用户上传的网页木马文件不是以响应的脚本文件扩展名上传的,则没法正常运行,达不到控制网站服务器的目的。然而,若是对文件扩展名检测的实现方式不当的话仍然存在风险。文件扩展名检测一般分为黑名单检测和白名单检测两种,针对黑名单绕过方式有使用不常见的扩展名、大小写绕过及特殊字符结尾等,针对白名单绕过方式可使用截断绕过、解析漏洞等进行绕过。举个例子:
A. 特殊扩展名
在文件后缀名后加上一个空格和一个小数点,发现能够绕过上传的限制。
能够执行任意命令。
B. 截断漏洞
4、修复建议
此次的总结就到这啦,若是你也有上传漏洞的绕过姿式能够留言给咱们。对于上传漏洞的话,仍是要和程序猿小哥哥提点小建议:
一、对上传文件的扩展名和文件报头信息在服务端与白名单对比,不符合白名单的不予保存。
二、上传过程不该传递目录或文件路径,使用预先设置路径列表中的匹配索引值,严禁泄露文件绝对路径。
三、对文件进行重命名,使用随机性好的文件目录和文件名进行保存。
四、上传文件的临时目录和保存目录不容许执行权限。
五、有条件时可将保存在内容服务器或者数据库中。