web漏洞之文件上传

一、概述

1.1描述

  文件上传漏洞是指程序员在进行开发时没有对用户上传的文件进行严格过滤和审查,从而导致用户可以上传服务器可以执行的脚本程序,通过脚本程序getshell达到控制服务器的目的。注:文件上传本质是让用户上传符合开发人员设计的文件内容,但是由于过滤审查不严,导致出现了文件上传这个漏洞。

1.2常见上传位置

       1.网站上传文件/附件的位置都可能产生

       2.头像上传点

       3.图片插入点

       4.扫描目录文件,看是否存在类似upload.php等文件

二、攻击方法

       文件上传的攻击方法比较简单粗暴,遇到文件上传点直接上传脚本文件即可,如果出现问题,可以通过下面的绕过方法进行绕过。

  这里我们以DVWA的文件上传(高难度)做实例:

2.1分析源码的过滤规则

  通过分析我们发现High级别的代码要求上传文件名形式必须是“.jpg”、“.jpeg” 、“.png”之一,同时,getimagesize()函数更是限制了上传文件的文件头必须为图像类型。

 

2.2准备工作

  首先准备一张图片,和一个脚本代码

 

2.3制作脚本

  接下来我们通过windows的copy命令来制作图片马

 

2.4上传文件

 

 

三、绕过方法

3.1客户端校验绕过

       3.1.1对于前端校验可以通过抓包修改文件后缀的方式来进行绕过。

       3.1.2使用浏览器的一些插件来删除或者修改前端校验的代码。

3.2文件扩展名绕过

       3.2.1文件后缀名大小写绕过,例如:**.Asp、**.jSP

       3.2.2针对黑名单,我们可以找黑名单的漏网之鱼,比如asa和cer这些文件后缀是否可以上传

       3.2.3 0x00截断绕过,由于00代表结束符,所以会把00后面的所有字符都截断,条件:PHP版本小于5.3.4,PHP的magic_quotes_gpc为OFF状态.比如**.php%00.jpg或**.php(0x00).jpg服务器会解析为**.php

       3.2.4windows中对于文件名后缀不能有点(.)或空格,否则会去掉,所以可以通过添加空格和点(.)来绕过,例如:**.jsp+或**.php.

       3.2.5可以利用文件包含漏洞来进行远程文件的包含执行。

       3.2.6利用服务器的中间件解析漏洞来上传文件(这个后续后专门讨论中间件解析漏洞)

3.3文件内容检测绕过

       通过对文件头进行修改,比如对上传文件的要求为jpg文件,我们可以在上传的文件首行加入jpg文件的标记头。也可以利用利用一些命令生成符合要求的恶意脚本,比如图片马。

3.4文件类型限制绕过

       可以通过抓包来修改文件上传类型,比如我们上传jpg文件,Content-Type的值是:image/jpeg,若服务端通过Content-Type来判断上传文件的类型,那么当我们上传PHP文件就可以通过修改符合的Content-Type值来绕过。

3.5CMS、编辑器漏洞绕过

  3.5.1CMS漏洞:比如说JCMS等存在的漏洞,可以针对不同CMS存在的上传漏洞进行

  3.5.2绕过。编辑器漏洞:比如FCK,ewebeditor等,可以针对编辑器的漏洞进行绕过。

3.6 .htaccess文件攻击

       上传当前目录.htaccess 文件然后修改为以下内容:AddType application/x-http-php .jpg,这样我们再上传一句话或者其他脚本以jpg结尾的,服务器会自动当做PHP解析

3.7WAF绕过

       针对waf主要是通过去探测waf的一些过滤规则,针对它的过滤规则进行绕过,自己可以在本地搭环境使用同版本waf进行查看规则库。

四、防御方法

       4.1文件扩展名服务端设置白名单校验。

  4.2对于某些文件可以进行文件大小的限制。

  4.3对于文件内容进行服务端校验。

  4.4对于上传文件进行重命名。

  4.5隐藏用户上传的文件路径。

  4.6限制文件存储目录的执行权限,避免用户上传的文件可以getshell。

五、危害

       针对上传功能的Dos攻击

  使上传文件在服务器上作为脚本执行,进一步可能获取shell

  越权下载文件,例如被源码被盗、脱库等等

原文地址:https://www.cnblogs.com/bin1121/p/12564808.html