Web安全漏洞——文件上传(fileupload)

1.原理

文件上传漏洞是指用户上传了一个可执行脚本文件,并通过此文件获得了执行服务器端命令的能力。要完成这个攻击,要满足一下几个条件:

  1. 上传的文件能够被Web容器解释执行,所以文件上传后所在的目录要是Web容器所覆盖到的路径。
  2. 用户能够从Web上访问这个文件。
  3. 用户上传的文件如果被安全检查、格式化、图片压缩等功能改变了内容,则可能导致攻击不成功

文件包含漏洞(file include)(有次面试问我文件包含,我回答的文件上传…)
严格来说,文件包含是代码注入的一种。代码注入就是注入一段用户能控制的脚本代码,并让服务器端执行。“代码注入”的典型代表就是文件包含。文件包含可能会出现在jsp、php、asp语言中。php常用的四种四种文件包含函数:include()、requrie()、include_once()、requrie_once()。使用这些函数包含一个文件时,php内核并不会在意该被包含的文件是什么类型,该文件将作为php代码执行。可分为本地文件包含远程文件包含

2.分类

1、上传文件是PHP、JSP、ASP等脚本代码,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行;
2、上传文件是FLASH的策略文件crossdomain.xml,导致可以控制Flash在该域下的行为(其他通过类似方式控制策略文件的情况类似);
3、上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行植入到pc中。
4、上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。

还有些不常见的用法,比如将上传文件作为一个入口,溢出服务器的后台处理程序,如图片解析模块;或者上传一个合法的文本文件,其中包含了php脚本,再通过本地文件包含漏洞执行此脚本。

3.防御

  1. 文件上传的目录设置为不可执行
  2. 文件类型检查
  3. 使用随机数改写文件名和文件路径
  4. 单独设置文件服务器的域名

4.Web容器文件解析漏洞

解析漏洞主要是一些特殊文件被Web容器在某种情况下解释成脚本文件格式并得以执行而产生的漏洞
常见Web容器有IIS、Nginx、Apache、Tomcat等

iis 5.x/6.0解析漏洞
iis6.0解析漏洞主要有以下三种:
1. 目录解析漏洞 /xx.asp/xx.jpg
在网站下创建文件夹名字为.asp、.asa的文件夹,其目录内的任何扩展名的文件都被iis当做asp文件来解析并执行。因此只要攻击者可以通过该漏洞直接上传图片马,并且可以不需要改后缀名!
2. 文件解析 xx.asp;.jpg
在iis6.0下,分号后面的不被解析,所以xx.asp;.jpg被解析为asp脚本得以执行。
3. 文件类型解析 asa/cer/cdx
iis6.0 默认的可执行文件除了asp还包含这三种asa、cer、cdx。

Apache解析漏洞
Apache对文件的解析主要是从右到左开始判断并进行解析,如果判断为不能解析的类型,则继续向左进行解析,如xx.php.wer.xxxxx将被解析为PHP类型。
IIS 7.0/ Nginx <8.03畸形解析漏洞
在默认Fast-CGI开启状况下上传名字为xx.jpg,内容为:’);?>
然后访问xx.jpg/.php,在这个目录下就会生成一句话木马shell.php。

Nginx<8.03空字节代码执行漏洞
nginx如下版本:0.5., 0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37在使用PHP-FastCGI执行php的时候,URL里面在遇到%00空字节时与FastCGI处理不一致,导致可以在图片中嵌入PHP代码然后通过访问xxx.jpg%00.php来执行其中的代码。
另一种Nginx文件漏洞是从左到右进行解析,既可绕过对后缀名的限制,又可上传木马文件,因此可以上传XXX.jpg.php(可能是运气,也可能是代码本身问题,但在其他都不能成功的条件下可以试试)。如下:
Content-Disposition: form-data; name=“userfiles”; filename=“XXX.jpg.php”

htaccess文件解析
如果Apache中.htaccess可被执行并可被上传,那么可以尝试在.htaccess中写入:

SetHandler application/x-httpd-php
然后再上传shell.jpg的木马,这样shell.jpg就可被解析为PHP文件了。

操作系统特性解析
由于windows会将文件的后缀中的空格以及点进行过滤,如果遇到是黑名单校验的,如限制不允许上传PHP文件,而系统又是windows系统,那么我们可以上传xx.php ,或者xx.php.,通过这种方式就可以绕过黑名单检验的文件上传!

你可能感兴趣的:(web安全学习)