上传漏洞定义
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。
产生的原因
一些web应用程序中允许上传图片,文本或者其他资源到指定的位置,文件上传漏洞就是利用这些可以上传的地方将恶意代码植入到服务器中,再通过url去访问以执行代码.
造成文件上传漏洞的原因是:
1.服务器配置不当
2.开源编辑器上传漏洞
3.本地文件上传限制被绕过
4.过滤不严或被绕过
5.文件解析漏洞导致文件执行
6.文件路径截断
客服端绕过
(1)客户端校验:
判断方式:在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包
(2)绕过方法:
1.通过火狐插件NOscript插件或者禁用IE中JS脚本
2.通过firbug插件元素审核修改代码(如删除onsubm:t=”return checkFile()”事件)
3.通过firbug元素审核javascirpt脚本中添加上传文件类型。
** 4.通过利用burp抓包改包,先上传一个gif类型的木马,然后通过burp将其改为asp/php/jsp后缀名即可**
服务端绕过
黑名单扩展名绕过
黑名单检测:一般有个专门的 blacklist 文件,里面会包含常见的危险脚本文件。
绕过方法:
(1)找黑名单扩展名的漏网之鱼 - 比如 iis6.0中的asa 和 cer
(2)可能存在大小写绕过漏洞 - 比如 aSp(iis6.0中可以) 和 pHp(只能在小于php5.3.39中的linux中) 之中
(3)能被WEB容器解析的文件其他扩展名列表:
jsp, jspx ,jspf
asp asa cer cdx,htr,xml,html
aspx,ashx,asmx,asax,ascx
配合操作系统文件命名规则绕过
在windows系统下,如果文件名以“.”或者空格作为结尾,系统会自动删除“.”与空格,利用此特性也可以绕过黑名单验证。
apache中可以利用点结尾和空格绕过,asp和aspx中可以用空格绕过
单双重后缀名绕过
上传时将Burpsuite截的数据包中文件名backlion.php(backlion.asa)改为backlion.pphphph(backlion.asasaa),那么过滤了第一个"php"字符串"后,开头的’p’和结尾的’hp’就组合又形成了php
服务端MIME文件类型(Content-Type)绕过
上传对文件类型做了限制,可通过burpsuit将其他类文件类型修改为如:Content-Type:image/gif和image/jpeg等运行的文件类型
配合文件包含漏洞绕过
绕过方式一:运行上传文件包含脚本木马和一句话内容马
前提:校验规则只校验当文件后缀名为asp/php/jsp的文件内容是否为木马。
(a)先上传一个内容为木马的txt后缀文件,因为后缀名的关系没有检验内容;
(b)然后再上传一个.php的文件,内容为<?php Include(“上传的txt文件路径”);?>
此时,这个php文件就会去引用txt文件的内容,从而绕过校验,下面列举包含的语法:
PHP
<?php Include("上传的txt文件路径");?>
ASP
<!--#include file="上传的txt文件路径" -->
JSP
<jsp:inclde page="上传的txt文件路径"/>
or
<%@include file="上传的txt文件路径"%>
修改 url 的参数绕过
将/uploadfile.asp?uppath=PicPath&upname=&uptext=form1.PicPath中的参数uptext的值改为form1.PicPath.asp即可绕过。
可以看出对参数 PicPath 进行了修改,这种漏洞主要是存在文件名或者路径过滤不严
白名单绕过
配合Web容器的解析漏洞:
IIS中的目录解析漏洞和分号解析漏洞: 将一句话木马的文件名backlion.php,改成backlion.php.abc(奇怪的不被解析的后缀名都行)。首先,服务器验证文件扩展名的时候,验证的是.abc,只要该扩展名符合服务器端黑白名单规则,即可上传。
nginx空字节漏洞 xxx.jpg%00.php 这样的文件名会被解析为php代码运行
apache的解析漏洞,上传如a.php.rar、a.php.gif 类型的文件名,可以避免对于php文件的过滤机制,但是由于apache在解析文件名的时候是从右向左读,如果遇到不能识别的扩展名则跳过,rar等扩展名是apache不能识别的,因此就会直接将类型识别为php,从而达到了注入php代码的目的
%00截断上传绕过
通过抓包截断将backlion.asp.jpg后面的一个.换成%00在上传的时候即backlion.asp%00.jpg,当文件系统读到%00时,会认为文件已经结束,从而将backlion.asp.jpg的内容写入到backlion.asp中,从而达到攻击的目的。
.htaccess 文件重写绕过
配合黑名单列表绕过,上传一个自定义的.htaccess和一句话图片木马,就可以轻松绕过各种检测,该文件仅在Apache平台上存在,.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能IIS平台上不存在该文件,该文件默认开启,启用和关闭在httpd.conf文件中配置。
<FilesMatch "backlion.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
保存为.htaccess文件。该文件的意思是,只要遇到文件名中包含有” backlion.jpg”字符串的任意文件,统一被当作php执行。如果这个” backlion.jpg”的内容是一句话木马,即可利用中国菜刀进行连接
文件头内容检测绕过
修改文件头信息
漏洞修复
- 重新配置好服务器。
- 在服务器后端对上传的文件进行过滤。
- 设置文件上传的目录设置为不可执行。
- 使用随机数改写文件名和文件路径。
- 单独设置文件服务器的域名。
文件上传&文件包含
前端检查
抓包绕过,修改MIME
后端检查
- 利用WEB服务器解析错误,后缀绕过
- %00文件截断
- 黑名单绕过
- 文件格式检查绕过
文件上传防御
- 文件类型判断(后缀白名单与MIME类型判断结合)
- 文件重命名
- 文件上传目录设置为不可执行