一、介绍
文件上传漏洞是Web应用程序中有一个安全漏洞点,攻击者可以利用这一漏洞上传一个包含恶意代码的文件到服务器上,然后通过执行该文件来攻击服务器端应用程序。
二、漏洞原理
系统对用户上传的文件过滤不严,导致用户可以上传恶意文件,并且能够执行其中的恶意代码。
三、文件上传常见验证
1、后缀名:黑名单、白名单
2、文件类型:MIME信息
3、文件头:内容头信息
四、文件上传漏洞成功的条件
1、文件能够上传成功
2、上传的文件能够被解析
3、知道所上传文件的路径
五、常见的绕过方法
1)、前端验证绕过
上传jpg格式的webshell,抓包,将文件名后缀改为php
2)、其它后缀绕过
适用场景:黑名单限制,可利用其它后缀进行绕过
上传jpg格式的一句话木马,抓包,修改文件名后缀为:php3
注意:这里要成功,首先服务器配置就要允许解析php3的后缀,具体设置自查
3)、利用.htaccess文件绕过
适用场景:存在.htaccess文件,或者可以上传.htaccess文件
.htaccess可以当成一个配置文件,作用为把其它格式的文件内容当成php来解析
上传.htaccess文件
上传jpg格式的一句话木马
访问:
4)、大小写绕过
使用场景:对于windows系统来说,使用大写的php后缀,会被转成小写的php
上传jpg格式的一句话木马,抓包,修改文件名后缀
5)、空格绕过
适用场景:利用windows系统特性,会将文件名后缀的空格自动去掉
上传jpg格式的一句话木马,修改文件名后缀格式为 php【空格】
6)、加点绕过
适用场景:对于windows系统来说,可以自动过滤文件名后缀的点
上传jpg格式的一句话木马,抓包,修改文件名后缀为php.
7)、::DATA绕过
适用场景:windows系统,文件名+“::$DATA"会把它之后的数据当成文件流处理,不会检测后缀名,且保持”::DATA"之前的文件名
上传jpg格式的一句话木马,抓包,修改文件名后缀格式为php::DATA
8)、点加空格绕过
上传jpg格式的一句话木马,修改文件名后缀为php. .
这里不做演示
9)、双写绕过
适用场景:后端对文件后缀的检测,只检测一次
上传jpg格式的一句话木马,抓包,修改文件名后缀为pphphp
10)、00截断原理
原理:00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都是以\0(即0x00)作为字符串的结尾。操作系统在识别字符串时,当读取到\0字符时,就认为读取到了一个字符串的结束符号。
上传jpg格式的一句话木马,抓包,修改文件名后缀为php%00
11)、图片马绕过
图片马制作:
copy 1.png/b+2.php/a shell.png
/b用二进制的方式打开 /a ascii编码打开
适用场景:存在文件包含漏洞
12)、条件竞争绕过
利用代码:
<?php
$file=fopen('shell.php','w+');
fwrite($file,'<?php @eval($_POST[x]);?>');
fclose($file);
?>
当访问该文件时,就会生成一个shell.php的一句话木马
13)、二次渲染
原理:
在我们上传文件后,网站会对图片进行二次处理(格式、尺寸要求等),服务器会把里面的内容进行替换更新,处理完成后,根据我们原有的图片生成一个新的图片并放到网站对应的标签进行显示。
利用:
将一句话木马插入到网站二次处理后的图片中,也就是把一句话插入图片在二次渲染后会保留的那部分数据里,确保不会在二次处理时删除掉。这样二次渲染后的图片中就存在了一句话,在配合文件包含漏洞获取webshell。
六、解析漏洞
1)、IIS解析漏洞
iis6.0
文件夹
image/qq.jpg
image.asp/qq.jpg
qq.jpg就会被当作asp解析
文件
image.jpg
image.asp;.jpg或xxx.asp;xxx.jpg
此文件会被当作asp执行
2)、apache解析漏洞
x.php.xxx.yyy
识别最后的yyy,如果不识别的向前解析,知道识别
3)、Nginx解析漏洞
在文件1.jpg/xxx.php ,1.jpg会被当成php执行
七、文件上传漏洞防御
1、使用白名单
2、设置上传目录为不可执行目录
3、生成随机的文件名和目录名