文件上传漏洞

文件上传漏洞

1. 文件上传功能

文件上传功能是大部分WEB应用的必备功能,站点常见文件上传点有:用户头像上传、社交类网站允许用户上传照片、服务类网站需要用户上传证明材料的电子档、电商类网站允许用户上传图片展示商品情况等。然而,看似普通的文件上传功能如果缺法安全防护措施,就存在巨大的安全风险。

2. 文件上传漏洞

文件上传漏洞是指攻击者上传了一个可执行的文件到服务器并执行。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。通常是因web应用程序没有对上传的文件进行安全判断或者判断条件不够严谨,导致恶意攻击者可以上传木马脚本文件到服务器中,从而执行恶意代码。

3. 文件上传漏洞利用

3.1 文件上传流程

通常文件上传过程为客户端以文件表单的方式向服务器提交上传的文件数据,服务器接受请求包,接受上传的文件生成临时文件,对临时文件进行安全性检测,读取临时文件信息,判断文件是否合规,通过文件安全性检测后,才会将文件保存到服务器.

3.2 文件上传漏洞利用流程

文件上传漏洞利用通常分为两个部分:webshell文件上传和webshell文件连接。第一部分:Webshell文件上传部分,需要利用网站文件上传功能点,绕过站点的安全性检测上传websehll文件到服务器中,还需要确认文件的存放路径,文件名是否有被服务器重名命以及文件能否正确被服务端脚本语言解析。第二部分:webshell文件连接,使用浏览器打开webshell文件或者使用工具连接webshell文件,扩展功能。

4. 常见的文件上传漏洞成因

1.服务器配置不当
在不需要上传文件的情况下可导致任意文件上传,参考HTTP请求方法PUT

2.本地文件上传被绕过
只在客户端浏览器上做了文件限制而没有在远程的服务器上做限制,只需要修改上传时发送的数据包就可以轻松绕过上传限制

3.过滤不严或被绕过
有些网站使用上传黑名单过滤掉一些可执行文件脚本的后缀,但是黑名单不全或者被绕过,也可导致恶意文件上传。如果使用白名单,仅允许名单内所包含的文件格式上传会更加安全。

4解析漏洞导致文件执行
前端修改文件后缀,绕过针对后缀名的黑白名限制,当修改后缀的文件可以被当成服务端语言脚本解析。例如:php5、php3、phtml等后缀可以被服务端脚本语言解析。

5.路径截断
路径解读与系统解析文件有关,例如:window操作在读取文件时,当碰到%00时,就不会再解析空格后面的内容。以“1.php%00.txt”为例,当解析到%00时,该文件后缀.txt不会被解析,则该文件会被当成php脚本进行处理。

5. 常见的上传限制和绕过

通过文件上传流程可以得知,前端上传的文件需要通过安全检测才能保存到服务器,随着开发人员安全意识的提高,通常在文件上传点对上传的文件进行严格的检测,常见的文件上传限制根据文件上传前后可以分为客户端校验和服务端校验。
文件上传漏洞_第1张图片

5.1客户端校验

客户端验证是一种发生在输入被实际发送至服务器之前进行的验证。这类验证大都都是通过JavaScript,VBScript或HTML5来完成的,通过黑名单或者表名单的方式对文件后缀进行校验。

5.2 客户端校验绕过

针对客户端校验文件后缀的限制,绕过限制的方式有:
①禁用前端校验脚本语言,或修改脚本,使得脚本无法运行
②修改文件后缀符合客户端上传条件,然后使用burpsuite抓包,改为脚本语言后缀。

5.3 服务端校验-MIME类型检测

MIME:多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
在服务端读取上传文件的MIME类型,对MIME类型做限定,检测文件类型。

5.4 服务端校验-MIME类型限制绕过

标准的文件上传组件中会自动上传文件的MIME类型,但是由于MIME类型是从客户端传递的,修改也不影响文件正常运行,因此通过Burp Suite拦截和修改Content-Type字段的MIME类型就绕过服务端的MIME检测,附上常见的MIME类型。

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

5.5 服务端检测-文件扩展名检测

文件扩展名即为文件后缀名,服务端读取文件的后缀名,对后缀名进行限定,常见的限定方式为黑名单限制和白名单限制。黑名单限制不允许文件后缀名在名单的文件上传,白名单限制只允许在名单内文件后缀的文件上传。

5.6 服务端检测-文件扩展名黑白名单绕过

①文件名大小写绕过,例如:xx.Php xx.AsP
②特殊文件名绕过,例如:windows文件名后缀不能有.或空格
③0x00截断绕过,例如:xx.php(0x00).jpg
④服务器解析漏洞,例如php3、php5,phtml等特殊扩展名会被当做php文件解析。
⑤文件包含漏洞,利用文件包含使得文件被作为脚本语言文件执行。
⑥.htaccess文件攻击,更改文件解析类型

5.7 服务端检测-文件内容检测

针对文件内容进行,例如检测文件头部,很多文件都使用幻数来标记文件格式,幻数通常可以用来标记文件格式还有协议的格式。例如jpg图片文件的幻数为FFD8FFD9 00104A464946

5.8服务端检测-文件内容限制绕过

使用工具在不破坏文件本身渲染的情况下,通常选择图片的注释部分,写入shell代码。
文件上传漏洞_第2张图片

文件上传漏洞修复

1 前端JS代码过滤
前端通过JS代码做第一次过滤,可以起到一定的防范作用。虽然可以被burp人工绕过,但仍然可以减少一些攻击行为,以及过滤掉正常用户的误上传操作,减轻后台服务器的压力。

2 后端设置黑白名单
通过设置黑名单或者白名单的方式,对上传文件的后缀做严格的检查。但黑名单可能出现遗漏的情况,也可能被大小写等方式绕过,因此白名单一般更安全。

3 上传文件大小限制
避免攻击者上传过大的恶意脚本,防止由于内存、磁盘耗尽而造成的拒绝服务攻击。

4 限制相关功能目录的执行权限
只要Web容器无法解析该目录下的文件,即使攻击者上传了恶意脚本文件,服务器本身也不会受到影响。当前一些网站,在文件上传之后,会将文件放到独立的存储上,做静态文件处理,一方面方便使用缓存加速,降低性能损耗,另一方面也杜绝了脚本被执行的可能性。

5 上传文件文件名重写
只要攻击者无法获取他们上传的脚本的文件名,使攻击者无法访问到上传的恶意脚本了。

6 隐藏上传文件路径
不对用户显示上传文件的存放路径,使攻击者无法访问到上传的恶意脚本了。

你可能感兴趣的:(网络安全,文件上传漏洞,web安全)