文件上传漏洞绕过方法和防御方法

上传流程概述

一个文件以http协议上传的时候,将以post请求发送至web服务器。服务器接受并同意后,用户与web服务器建立连接,并且传输数据
而一般文件上传过程中检测部分由

  • A 客户端javascript检测 (检测文件扩展名)
  • B 服务端MIME类型检测 (检测Content—Type)
  • C 服务端目录路径检测(检测和path相关参数)
  • D 服务端文件扩展名检测 (检测文件扩展名)
  • E 服务端内容检测 (检测是否含有恶意代码)

客户端检测绕过检测(js检测)

这一类型特征就是你会收到一个javascript的弹窗(不允许上传)

绕过方式

1. 利用谷歌游览器设置里禁用js

2. 通过brup等代理工具

即可上传成功

服务端检测绕过(MIME检测)

服务端主要检查文件头部的content-type字段信息
仅仅对文件名后缀进行判断并不能有效阻止恶意文件的上传(比如某服务器只允许上传jpg文件格式),不允许上传后缀为php等文件,但是把后缀为php改为jpg上传到服务器,某些情况下也能执行上传文件,因此对文件格式(content-type)检测十分必要,也就是服务端MIME类型检测。

绕过方式

通过brup等代理工具

通过brup代理工具抓包修改提交http头部的content-type字段信息,或者使用挂马图片(mime限制的文件类型挂马)等

服务端检测绕过(扩展名检测)

采用一个黑名单或者白名单,对上传的文件的扩展名进行检测,符合条件才允许上传

绕过方式

文件名大小写绕过

如果,在代码层没有进行大小写统一,用AsP,pHp类似的文件名绕过黑名单

名单列表绕过

后缀名检测

后缀黑名单检测:找查blacklist(黑名单列表)的漏网之鱼,例如

大小写:如果检测的时候不忽略大小写,那么可以改变后缀名的大小写绕过

扩展名:列表中如果忽略了某些后缀

 能被解析的文件扩展名列表:

 jsp jspx jspf

asp asa cer aspx

php php php3 php4 pht

exe exee

后缀白名单检测:白名单检测还是会比黑名单强一点,常见的绕过方法有%00截断,还有服务器的解析漏洞

利用黑名单里没有的,并且能够成功执行的命名,进行绕过,例如php3,php4之类的
白名单,截断绕过

特殊文件名绕过

在windows下有些文件名是不被允许的,将http包里将文件名改为test.asp.或test.asp_(此处下划线为空格)这种命名方式在windows系统自动去掉点和空格

%00截断绕过

存在这类漏洞,那么后缀名的检测都可以绕过,此时我们可以如下命名一个上传文件进行绕过,文件名如下:

test.php%00.jpg

.htaccess 文件攻击

在apache里,这个文件作为一个配置文件,可以用来控制所在目录的访问权限以及解析设置。即是,可以通过设置可以将该目录下的所有文件作为php文件来解析,即可绕过

方式
利用某些写文件函数复写.htaccess文件,即可任意定义解析名单
通过一个.htaccess 文件调用 php 的解析器去解析一个文件名中只要包含”haha”这个字符串的
任意文件,所以无论文件名是什么样子,只要包含”haha”这个字符串,都可以被以 php 的方
式来解析,是不是相当邪恶,一个自定义的.htaccess 文件就可以以各种各样的方式去绕过很
多上传验证机制
建立一个.htaccess文件内容如下

<FilesMatch "haha">
SetHandler application/x-httpd-php
</FilesMatch>

服务端检测绕过(文件内容检测)

文件头检测

在木马内容的前面插入对应的文件头内容,例如:GIF89a ,更保险的方法是在可上传的文件中插入木马代码,然后修改后缀

方式

常见图片一句话形式

GIF89a
(...some binary data for image...)
&lt;?php phpinfo(); ?&gt;
(... skipping the rest of binary data ...)

文件加载检测

这个检测应该是最难绕过的,一般是调用API函数去进行文件加载测试,更有甚者二次渲染

方式

对渲染/加载测试攻击 代码注入绕过
对二次渲染攻击 攻击加载器

代码注入,和文件头的处理方式大致相同不过有了一个限定,你不能破坏这张图片,只能把你要的代码添加在空白区。保持文件结构的完整

二次渲染
单独列出来这个方式有点特殊
我们如果还是上传一个过加载检测的图片

然后再从服务器上下载回本地

并且图片里多了CREATOR: gd-jpeg v1.0 (using IJG JPEG v62)
说明使用GD php 的gd库

这里是某后台的调用GD库二次渲染的代码

 function image_gd_open($file, $extension)
{
$extension = str_replace('jpg', 'jpeg', $extension);
$open_func = 'imageCreateFrom'. $extension; //函数名变成 imageCreateFrompng 之类
if (!function_exists($open_func))
{
return FALSE;
}
return $open_func($file); //变成 imagecreatefrompng('/tmp/php0lbTOn')
}

将你上传的文件中属于图片部分的数据抓取出来,再使用自己的API或者函数重新将这张图片生成出来保存在服务端

解析漏洞攻击

直接攻击

直接能上传一个php文件绕过客户端js检测或者服务端MIME检测

配合攻击

先将代码以任意文件形式上传到服务器,通过php文件包含
web服务器解析漏洞.htaccess解析等
相互配合达成解析为目标文件类型的攻击

常见的解析漏洞

1,Apache 解析漏洞

解析:test.php.jkl 并没.jkl后缀的文件,而Apache的某些版本中会直接当成php来解析
描述:若一个文件名abc.x1.x2.x3,Apache会从x3开始解析,如果x3不是一个能解析的扩展名,就往前解析x2以此往复,直到能遇到一个能解析的文件名为止
对应版本:

WampServer2.0 All Version (WampServer2.0i / Apache 2.2.11) [Success]
WampServer2.1 All Version (WampServer2.1e-x32 / Apache 2.2.17) [Success]
Wamp5 All Version (Wamp5_1.7.4 / Apache 2.2.6) [Success]
AppServ 2.4 All Version (AppServ - 2.4.9 / Apache 2.0.59) [Success]
AppServ 2.5 All Version (AppServ - 2.5.10 / Apache 2.2.8) [Success]
AppServ 2.6 All Version (AppServ - 2.6.0 / Apache 2.2.8) [Success]

2,IIS 解析漏洞

IIS6.0 在解析文件时存在以下两个解析漏洞 .

①当建立 .asa 、.asp 格式的文件夹时 , 其目录下的任意文件豆浆被 IIS 当作 asp 文件 来解析 .

② 在 IIS6.0 下 , 分 号 后面 的 扩 展 名 不 会 被 解 析 , 也 就 是 说 当 文 件 为 *.asp;.jpg

时,IIS6.0 同样会以 ASP脚本来执行 .

3,Nginx <8.03 空字节代码执行漏洞

影响版本 :0.5,0.6,0.7<=0.7.65 0.8<=0.8.37

Nginx 在图片中嵌入 PHP代码 , 然后通过访问 xxx.jpg%00.php 可以执行其中的代码 .

注意
任意文件名/任意文件名.php这个漏洞是因为php-cgi

4,PHP CGI 解析漏洞

在 PHP的配置文件中有一个关键的选项 : cgi.fi: x_pathinfo. 这个选项在某些版本是

默认开启的 , 在开启时访问 url, 比如 :http://www.xxx.com/x.txt/x.php,x.php 是不存在的 文件 , 所以 php 将会向前递归解析 , 于是就造成了解析漏洞 . 由于这种漏洞常见于 IIS7.0 、 IIS7.5 、 Nginx 等 Web服务器 , 所以经常会被误认为是这些 Web服务器的解析漏洞 .

文件上传漏洞的防御方法

  1. 检查文件上传路径 ( 避免 0x00 截断、 IIS6.0 文件夹解析漏洞、目录遍历 )

  2. 文件扩展名检测 ( 避免服务器以非图片的文件格式解析文件 ),验证文件扩展名 通常有两种方式 : 黑名单和白名单 .

  3. 文件 MIME验证 ( 比如 GIF 图片 MIME为 image/gif,CSS 文件的 MIME为 text/css 等 ) 3. 文件内容检测 ( 避免图片中插入 webshell)

  4. 图片二次渲染 ( 最变态的上传漏洞防御方式 , 基本上完全避免了文件上传漏洞 )

  5. 文件重命名 ( 如随机字符串或时间戳等方式 , 防止攻击者得到 webshell 的路径 )

  6. 隐藏上传路径

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 文件上传漏洞的常见绕过方法主要包括前端JS检测、构造特殊的、畸形的数据包以干扰WAF对数据包的检测、利用文件内容的免杀和超大文件等方式进行突破、针对文件名过滤的WAF绕过突破思路等。\[1\]\[2\]\[3\]其中,前端JS检测是一种常用的防御方式,通过在前端对上传文件进行检测,限制文件类型和文件后缀,以防止恶意文件的上传。然而,攻击者可以通过构造特殊的、畸形的数据包来绕过WAF的检测,干扰WAF对数据包的解析,使其无法提取文件名称或将其误认为非文件上传的数据包,从而绕过WAF的防御。此外,攻击者还可以利用免杀和超大文件等方式来绕过WAF对文件内容的检测。针对文件名过滤的WAF绕过突破思路主要包括获取HTTP Request数据包包头中的boundary值、解析数据包获取上传文件的文件名,然后根据文件名进行黑名单或白名单的匹配。综上所述,文件上传漏洞绕过方法多种多样,需要综合使用多种防御措施来提高安全性。 #### 引用[.reference_title] - *1* [文件上传漏洞常用绕过方式](https://blog.csdn.net/qq_62078839/article/details/124026691)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [文件上传漏洞WAF绕过方法](https://blog.csdn.net/weixin_40228200/article/details/127200643)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值