22、文件上传漏洞——文件上传检测与绕过

一、文件上传漏洞原理

  上传文件时,如果服务器端未对客户端上传的文件进行严格的验证和过滤。就容易造成可以上传任意文件的情况,包括上传脚本文件(asp、php、jsp等格式的文件)。

二、客户端检测及绕过(JS检测与绕过)

  客户端(Client):或称为用户端(前端),与服务器相对应。由于客户端对于文件上传漏洞的防御是通过JS代码实现的,所以客户端检测与绕过也称为JS检测与绕过。

  由于后端PHP代码没有对文件做任何检测,所以只要绕过前端JS的校验就可以上传WebShell。绕过方法:

  • 删除浏览器事件;
  • 禁用JS;
  • 利用BurpSuite抓包修改文件后缀名。

三、服务端检测

3.1 后缀名检测与绕过

(1)黑名单绕过

  1. 名单列表绕过
      有些中间件允许解析其他文件后缀名,如asa、cer之类的或在httpd.conf配置文件中,配置如下代码,则能解析php、php3、phtml文件,所以上传一个后缀名为php3、phptml的文件即可。
    在这里插入图片描述
  2. Windows特性
      一些特殊的文件名命名方式在windows下是不被允许的,利用BurpSuite抓包修改后缀名,绕过验证后上传文件,windows会自动去掉后面添加的,但要注意Unix/Linux系统没有这个特性。比如:
  • 末尾的点(.) 如1.php.
  • 空格( ),如1.php
  • :: D A T A ,如 ‘ 1. p h p : : DATA,如`1.php:: DATA,如‘1.php::DATA`

(2)白名单绕过
白名单绕过需要配合文件包含漏洞或者解析漏洞。

(3).htaccess文件攻击

  .htaccess文件是Apache服务器中的分布式配置文件(IIS中不存在该文件),该配置文件会覆盖Apache服务器的全局配置,作用于当前目录及其子目录。

  • 如果一个web应用允许上传.htaccess文件,那就意味着攻击者可以更改Apche的配置。

  在httpd.conf配置文件中,AllowOverride参数就是指明Apache服务器是否去找**.htacess**文件作为配置文件,如果设置为none,那么服务器将忽略.htacess文件;如果设置为All,那么所有在.htaccess文件里有的指令都将被重写,即允许.htaccess文件覆盖掉Apache 的配置。

(4)APahce解析机制
  Apche解析机制:从右往左开始解析文件后缀,若后缀名不可识别,则继续判断直到遇到可解析的后缀为止。

3.2 MIME类型检测与绕过

  MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。常见的MIME 类型如下:

文件拓展名Mime-Type
.jsapplication/x-javascript
.htmltest/html
.jpgimage/jpeg
.pngimage/png
.pdfapplication/pdf

3.3 文件内容检测与绕过

检测原理
  利用getimagesize()函数获取图片的宽高等信息,如果上传的不是图片,那么则获取不到信息。服务端主要检测文件幻数:

类型文件幻数
JPGFF D8 FF E0 00 10 4A 46 49 46
GIF47 49 46 38 39 61 (GIF89a)
PNG89 50 4E 47

绕过方式
  在脚本文件开头补充图片对应的头部值,或在图片后写入脚本代码
在这里插入图片描述

3.4 00截断检测与绕过

检测原理
  截断漏洞出现的核心就是chr(0),这个字符不为空 (Null),也不是空字符 (" "),更不是空格。当程序在输出含有 chr(0)变量时,chr(0)后面的数据会被停止,换句话说,就是误把它当成结束符,后面的数据直接忽略,这就导致了漏洞产生。由于00代表结束符,PHP会把00后面的所有字符删除。

截断条件
  PHP版本小于5.3.4、magic_quotes_gpc 为OFF状态。

3.5 条件竞争检测与绕过

检测原理
  一些网站文件检测逻辑是先允许上传任意文件,然后检查文件内容是否包含可执行脚本,如果包含则删除。
绕过方法
  利用成功上传到删除文件的时间差,上传一个.php文件,在未删除之前立即访问,则会自动生成一个新php文件,新文件不会被删除。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值