【网络安全】文件上传黑白名单及数组绕过技巧

不安全的文件上传(Unsafe FileUpload)

不安全的文件上传是指Web应用程序在处理用户上传的文件时,没有采取足够的安全措施,导致攻击者可能利用这些漏洞上传恶意文件,进而对服务器或用户造成危害。

目录

一、文件上传基础

1.什么是文件上传

2.文件上传漏洞产生原因

3.文件上传漏洞危害

4.可能存在漏洞的位置

5.文件上传检测方式

6.文件上传绕过

二、绕过客户端检测

三、绕过服务端检测

1.服务端代码检测

2.常见MIME类型

3.绕过MIME类型检测

4.黑名单

5.白名单

1. %00截断

2. Ox00截断

6.绕过文件内容检测

文件幻数检测:

文件加载检测:

四、WEB解析漏洞简介

1.apache解析漏洞

2.IIS 6.0解析漏洞

3.IIS 7.0解析漏洞

4.Nginx解析漏洞


一、文件上传基础
1.什么是文件上传

 将客户端数据以文件形式封装,通过网络协议发送到服务器端,在服务器解析数据,最终在服务端硬盘上作为真实的文件保存

2.文件上传漏洞产生原因

3.文件上传漏洞危害

上传文件的时候,如果对服务器端脚本语言未对上传的文件进行严格的验证和过滤,就容易造成上传任意文件的情况。

4.可能存在漏洞的位置

图片、头像、文档上传等功能往往都可能存在上传文件验证不严格的安全缺陷。

5.文件上传检测方式
  1. 客户端JavaScript检测:检查文件扩展名是否符合客户端设定的规则。例如,用户尝试上传.jpg格式的文件,客户端javascript会检查这个文件的扩展名是否为.jpg,若不是则不允许上传;
  2. 服务端MIME类型检测:检查文件的MIME类型是否符合服务器的期望。MIME类型是一种用于定义文件的类型和格式的标准,如text/plain表示纯文本文件、application/pdf表示PDF格式的文件等,MIME帮助浏览器识别接收到的数据应该以什么方式处理,服务器在发送文件给客户端时,会在HTTP响应的Content-Type头部字段中指定MIME类型,客户端根据这个信息来决定如何渲染或处理这个文件。同样,在文件上传时,服务器也可以通过检查文件的MIME类型来验证文件的格式是否符合预期;
  3. 服务端目录路径检测:检查上传的文件路径是否尝试访问服务器上的敏感目录。例如用户尝试上传文件到/uploads/secret/目录。服务器检查这个路径是否在允许的上传路径列表中,如果不在,服务器会阻止这次上传,防止用户访问敏感目录;
  4. 服务端文件扩展名检测:检查文件的扩展名是否在服务器允许的列表中;
  5. 服务端文件内容检测:检查文件内容是否合法,是否含有恶意代码。

6.文件上传绕过
  1. 信息收集:攻击者首先收集目标网站的相关信息,包括服务器配置、上传接口、文件类型限制等。
  2. 漏洞分析:分析目标网站的安全措施,寻找可能存在的漏洞,例如文件类型限制不严格、文件名过滤不彻底等。
  3. 构造恶意文件:根据分析结果,攻击者构造恶意文件,例如将恶意代码隐藏在图片文件中,或者将可执行文件伪装成允许上传的文件类型。
  4. 利用漏洞:利用找到的漏洞,尝试上传恶意文件。这可能包括修改HTTP请求头、使用特殊的文件名或文件扩展名等。
  5. 绕过安全措施:绕过服务器的安全措施,如通过修改文件扩展名、利用服务器解析漏洞等。
  6. 执行恶意代码:一旦恶意文件成功上传,攻击者可能会尝试执行该文件,以实现进一步的攻击,如获取服务器控制权、窃取数据等。

二、绕过客户端检测

  • 禁用JavaScript:用户可以在浏览器设置中禁用JavaScript,或者使用特定的浏览器插件来实现这一目的。
  • 使用浏览器插件:例如,使用火狐浏览器的NoScript插件,可以控制哪些网站可以执行JavaScript代码。
  • 浏览器设置:在浏览器的高级设置中,可以找到禁用JavaScript的选项。例如,在Internet Explorer中,可以通过“Internet选项”中的“安全”设置来禁用JavaScript。
  • 使用开发者工具:在浏览器的开发者工具中,可以临时禁用页面上的JavaScript代码,从而绕过客户端的检测。
  • 修改本地文件:用户可以下载含有检测代码的页面,然后在本地修改JavaScript代码,移除或修改检测逻辑,再上传修改后的文件。
  • 使用代理或中间件:使用代理服务器或中间件来拦截和修改客户端请求,从而绕过JavaScript检测。
  • 使用其他工具:有些工具或软件可以帮助用户禁用或修改JavaScript代码,从而绕过客户端的检测。

三、绕过服务端检测
1.服务端代码检测

服务端的代码通常检测三个点:MIME类型、文件后缀、文件内容。

2.常见MIME类型

3.绕过MIME类型检测

检测文件上传过程中http包的Content-Type字段的值,来判断上传文件是否合法

4.黑名单

黑名单的本质为——“在即不合法”,文件名在黑名单中为不合法。

  1. 后缀大小写绕过(Php):在对后缀的判断中,如果只是对字符串进行单独的比较来判断是不是限制文件,可以采用后缀名大小写绕过形式;
  2. 空格绕过(php ):如果黑名单没有对后缀名进行去空处理,可以通过在后缀名后加空进行绕过;
  3. 点绕过(php.):如果黑名单没有对后缀名进行去点处理,利用Windows系统的文件名特性,会自动去掉后缀名最后的 . ,通过在文件名后加 . 进行绕过;
  4. ::$DATA绕过:利用Windows下NTFS文件系统的一个特性,可以在后缀名后加::$DATA绕过对黑名单的检测;
  5. 配合Apache解析漏洞:Apache解析有一个特点,解析文件时是从右往左判断,如果为不可识别解析再往左判断,即如 aa.php.owf.rar 文件,Apache不可识别解析‘.owf’和‘.rar’这两种后缀,会解析成.php文件
  6. htaccess文件:配合名单列表绕过,上传一个自定义的.htaccess,就可以轻松绕过各种检测。htaccess文件(分布式配置文件),全称Hypertext Access(超文本入口)提供了针对目录改变配置的方法,即在一个特定的文档目录中放置一个或多个指令的文件,以作用于此目录及其所有子目录,作为用户,所能使用的命令受到限制。

5.白名单

白名单策略:文件扩展名不再白名单中为不合法。

白名单往往比黑名单更加有效,以为黑名单只是限制了部分非法字符,难免有漏网之鱼,但白名单的逻辑为“只要不在名单上全为非法”。

这两种策略是网络安全领域中常见的文件上传漏洞利用技术,主要用于绕过服务器的文件类型检查机制。

1. %00截断

**原理**:
- `%00`是URL编码中的一个特殊字符,表示字节值为0x00的字节(即空字符)。
- 在HTTP请求中,`%00`可以被用来截断URL参数,使得URL解析器在遇到`%00`时停止解析后续的内容

**利用方式**:
- 攻击者在文件名中加入`%00`,例如上传一个名为`test.php%00.jpg`的文件。
- 当服务器接收到这个文件名时,URL解码器会将其解码为`test.php\x00.jpg`。
- 如果服务器的文件名验证函数在解码后处理文件名,它可能会忽略`\x00`之后的字符,只处理`test.php`部分。
- 这样,攻击者上传的文件名看起来是`test.php`,但实际上是`test.php\x00.jpg`,可能被服务器错误地处理为PHP文件。

**影响**:
- 这种技术可以绕过一些简单的文件扩展名检查,使得服务器错误地将非PHP文件解析为PHP文件,从而执行恶意代码。

2. Ox00截断

**原理**:
- `0x00`是十六进制表示法中的一个特殊字符,表示字节值为0的字节。
- 在文件系统中,文件名通常以`0x00`结尾,表示文件名的结束。

**利用方式**:
- 攻击者在文件名中加入`0x00`,例如上传一个名为`test.php\x00`的文件。
- 当服务器读取文件名时,如果遇到`0x00`,可能会认为文件名已经结束
- 这样,服务器可能会将文件名错误地识别为`test.php`,而忽略`\x00`之后的任何内容。

**影响**:
- 这种技术同样可以绕过文件扩展名检查,使得服务器错误地将非PHP文件解析为PHP文件。
- 需要注意的是,这种技术依赖于服务器在读取文件名时的处理方式,并不是所有服务器都会受到影响。

6.绕过文件内容检测

一般是通过检测文件内容来判断上传文件是否合法。

文件幻数检测:

文件格式幻数(Magic Number),可以用来标记文件或者协议的格式,很多文件都有幻数标志来表明该文件的格式。

文件加载检测:

一般是调用API或函数去进行文件加载测试,我们常见的是图像渲染测试,严格的进行二次渲染;对渲染/加载测试的攻击方式是代码注入绕过,对二次渲染的攻击方式是攻击文件加载器自身。

简单来说:幻数就像是“身份证”,在文件开头部分有一些特定的字节序列,这些序列是文件类型的标志,比如JPEG图片文件通常以FF 08开头等。而文件幻数检测就是检查文件开头这些特定字节序列来判断文件是不是我们想要的类型;

加载就像是把文件放进一个“模拟器”里,看他能不能正常运行或者显示出来。文件加载检测就是把文件当作某种类型的文件来处理,看他是否能正常工作,比如,如果一个文件被当作图片来加载,我们就尝试用图片查看器打开它,看他是否能正常工作。

四、WEB解析漏洞简介
1.apache解析漏洞

2.IIS 6.0解析漏洞

 

3.IIS 7.0解析漏洞

4.Nginx解析漏洞

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/51650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1. mqant——入门篇

0. 介绍 mqant技术架构和开发流程的学习笔记。 https://github.com/liangdas/mqantIntroduction mqant 的文档库 mqant是一个微服务框架。目标是简化分布式系统开发。 mqant的核心是简单易用,关注业务场景,因此会针对特定场景研究一些特定组件和解决方案,方便开发者使用。 …

二分类、多分类、多标签分类的评价指标

前言 在机器学习和深度学习中,常见的分类任务可以分为:二分类(Binary Classification); 多分类(Multi-class Classification); 多标签分类(Multi-label Classification); 序列分类 (Sequence Classification); 图分类…

Notcoin 即将空投:你需要知道什么

Notcoin 于 2024 年 1 月推出,是 Telegram 上的一款边玩边赚游戏,用户可以通过点击硬币图标获得 Notcoin 代币 (NOT) 形式的奖励。NOT 建立在开放网络区块链(称为“TON 区块链”)上,由 Open Builders 创始人 Sasha Plo…

IOS-05 Swift循环控制语句

在 Swift 编程语言中,控制语句用于决定程序的执行流程,使我们能够根据不同的条件和情况来控制代码的执行顺序。下面我们将详细介绍几种常见的控制语句 一、for 循环 let names ["zhangsan","lisi"] for name in names{print(name…

DNS服务器搭建练习

练习要求: 3、搭建一个dns服务器,客户端可以使用该服务器解析域名www.haha.com为web服务器的 4、将客户端的ip地址中的域名解析服务器地址修改为第3题的dnt服务器的p,使用ping命令ping www.haha.com看能否ping通,用curl命令访问c…

FPGA开发——LED流水灯实现先从左往右流水,再从右往左流水

一、概述 我们在设计完一个方向的流水灯的设计时,总是会想实现让流水灯倒着流水回去的设计,这里我也是一样,实现这种设计的方法有很多种,其中就有直接使用case语句将所有可能包含进去编写,这种设计方法是最简单的&…

STM32通信协议 总集篇 (速记版)

名称引脚常用在双工时钟电平设备USARTTX、RX单片机和pc,单片机和单片机全双工异步单端点对点I2CSCL、SDA单片机和单片机半双工同步单端多设备SPISCLK、MOSI、MISO、CS单片机和单片机全双工同步单端多设备CANCAN_H、CAN_L智能汽车半双工异步差分多设备USBDP、DM半双工异步差分点…

[php7系列]--php7里的返回类型声明和标量类型声明及不要用isset判断数组是否定义某个KEY-最好使用array_key_exists

一、[php7系列]--php7里的返回类型声明和标量类型声明 php7里增加了返回类型声明和标题类型声明,可以理解为对一个方法的输入输出进行了类型验证,在PHP7之前,方法里的数组、对象参数是有类型声明的,但其它的整数、字符串等类型声明…

【海贼王航海日志:前端技术探索】HTML你学会了吗?(一)

目录 1 -> HTML概念 2 -> HTML结构 2.1 -> 认识HTML标签 2.2 -> HTML文件基本结构 2.3 -> 标签层次结构 3 -> 快速生成代码框架 4 -> HTML常见标签 4.1 -> 注释标签 4.2 -> 标题标签 4.3 -> 段落标签 4.4 -> 换行标签 4.5 ->…

ES(ElasticSearch)倒排索引

目录 正排与倒排索引 1.正排索引 作用: 优点: 缺点: 2.倒排索引 原理: 倒排索引的构建流程: 倒排索引的搜索流程: 优点: 缺点: 3. 应用场景 倒排索引中有几个非常重要的概念…

【二叉树的锯齿形层序遍历】python刷题记录

R2-树与二叉树篇 层序遍历双端队列deque # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def zigzagLevelOr…

【读代码】高斯掩模

目录 问题: 主要功能: 问题: 看不懂实现的功能 主要功能: 从输出张量中提取与边界框对应的区域,并计算该区域与高斯核之间的均方误差(MSE)损失 例子 假设我们有以下输入: boxe…

我的创作纪念日(一)——Giser?Noder?不如“Computer”

目录 Giser?Noder?不如“Computer” 一、根源:保持学习习惯的刚需 二、机缘:processOn的另类替代 三、日常:对技术栈丰富的思考 四、成就:保持心态健康的活着 五、憧憬:能一直心态健康的活…

前端实现【 批量任务调度管理器 】demo优化

一、前提介绍 我在前文实现过一个【批量任务调度管理器】的 demo,能实现简单的任务批量并发分组,过滤等操作。但是还有很多优化空间,所以查找一些优化的库, 主要想优化两个方面, 上篇提到的: 针对 3&…

CSS技巧专栏:一日一例 14-纯CSS实现模拟水波波动填充按钮特效

CSS技巧专栏:一日一例 14-纯CSS实现模拟水波波动填充按钮特效 大家好,今天介绍一个在网上很常见的模拟水波波动要灌满按钮的动画效果,效果下面图所示。 本例图片 案例分析 我们沿着Z轴从上到下数一下一共有几个层: 文字层:白色文字阴影的黑色文字,当鼠标移动上来时候…

黑马点评--给店铺类型查询添加缓存

controller/ShopTypeController.java /*** 店铺分类查询,用于展示首页头部店铺分类* return*/GetMapping("list")public Result queryTypeList() {return typeService.queryList();} service/IShopTypeService.java Result queryList(); service/impl/S…

fatal: Could not read from remote repository. 解决方法

问题描述: Git : fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists。 解决方法: 当在网上尝试大量方法仍然失败的时候,不妨试试这个方法。 在 github 上&…

探索 Redis 不同集群架构的性能与应用

1. 引言 Redis的集群配置成为了提高数据可靠性和服务可用性的关键。本文将带领大家了解Redis的四种主要集群架构,并重点分析哨兵模式和Redis Cluster架构和优势。 2. Redis的四种集群架构 2.1 单实例Redis 使用单个 Redis 实例提供服务。适用于小规模应用&#…

论文阅读:Deformable DETR: Deformable Transformers for End-to-End Object Detection

论文阅读:Deformable DETR: Deformable Transformers for End-to-End Object Detection Deformable DETR: 基于稀疏空间采样的注意力机制,让DCN与Transformer一起玩! - 知乎 (zhihu.com) 【Deformable DETR 论文源码解读】Deformable Trans…

The Llama 3 Herd of Models.Llama 3 模型第1,2,3部分全文

现代人工智能(AI)系统是由基础模型驱动的。本文提出了一套新的基础模型,称为Llama 3。它是一组语言模型,支持多语言、编码、推理和工具使用。我们最大的模型是一个密集的Transformer,具有405B个参数和多达128K个tokens的上下文窗口。本文对Llama 3进行了广泛的实证评价。我们…