当前位置: 首页 > news >正文

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

不安全的文件上传(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解析漏洞

 

相关文章:

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

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

4.2、存储管理-页式存储

页式存储和段氏存储会考 页式存储几乎必考,段氏存储可能会考 页式存储 页式存储是操作系统的一种存储管理方式。 因为我们的程序往往是远远大于内存的,所以程序在执行的时候,是不会一次性把所有内容都装入到内存中,它会把程序分…...

60个常见的 Linux 指令

常见60个Linux指令 1.ssh 登录到计算机主机2.ls 列出目录内容3.pwd 当前终端会话所在的完整路径4.cd 切换当前工作目录5.touch 创建空文件或更新文件的时间戳6.echo 终端输出文本或变量值7.nano 在终端中编辑文件8.vim 文本编辑器9.cat 查看、连接和创建文件10.shred 安全删除敏…...

DockerRedis基础

目录 Docker 部署MySQL 镜像和容器 解析命令 Docker基础 常见命令 命令别名 数据卷 命令 自定义镜像 Dockerfile 网络 自定义网络设置静态IP Redis概述 NoSQL(非关系型数据库) Redis Redis命令行客户端 Redis数据结构 Redis通用命令&…...

oracle读写时相关字符集详解

服务器端操作系统(Oracle linux)字符集 服务器端数据库字符集 客户端操作系统(Oracle linux)字符集 客户端工具sqlplus字符集 结论1:客户端工具sqlplus的会话,使用的字符集,是数据库字符集。…...

OverlayFS 文件系统介绍

引言 OverlayFS(Overlay Filesystem)是 Linux 内核中的一种联合文件系统(Union Filesystem),它通过叠加多个目录形成一个单一的文件系统视图。作为 Docker 的默认存储驱动之一,OverlayFS 在提高性能和简化容…...

【C++】用Lua绑定C/C++对象,实现对脚本调用(依赖LuaBridge实现)

【C++】使用LuaBridge为Lua绑定C/C++对象,实现对脚本调用 问题: 如何在C++实现对如下脚本读取,在不改变代码的情况下实现修改脚本打开不同链接? <?xml version="1.0" encoding="utf-8"?> <root><script src="lua:lua_demo&quo…...

Java面试——Tomcat

优质博文&#xff1a;IT_BLOG_CN 一、Tomcat 顶层架构 Tomcat中最顶层的容器是Server&#xff0c;代表着整个服务器&#xff0c;从上图中可以看出&#xff0c;一个Server可以包含至少一个Service&#xff0c;用于具体提供服务。Service主要包含两个部分&#xff1a;Connector和…...

2024年7月个人工作生活总结

本文为 2024年7月工作生活总结。 研发编码 “康威定律&#xff08;Conway’s Law&#xff09;”思考 康威定律是 50 年前&#xff08;1967 年&#xff09;由 梅尔文康威 提出的&#xff0c;最初的说法如下&#xff1a; Any organization that designs a system (defined broa…...

快速方便地下载huggingface的模型库和数据集

快速方便地下载huggingface的模型库和数据集 方法一&#xff1a;用于使用 aria2/wgetgit 下载 Huggingface 模型和数据集的 CLI 工具特点Usage 方法二&#xff1a;模型下载【个人使用记录】保持目录结构数据集下载不足之处 方法一&#xff1a;用于使用 aria2/wgetgit 下载 Hugg…...

JAVA小白学习日记Day10

1.线程锁 使用Runnable接口和Lambda表达式&#xff1a; 在 EasyThreadA 类的 mainA 方法中&#xff0c;通过创建 Runnable 实例 run&#xff0c;并使用Lambda表达式。 EasyThreadA::method 绑定到 run 上。然后创建两个线程 a 和 b&#xff0c;分别启动它们&#xff0c;它们会…...

分布式相关理论详解

目录 1.绪论 2.什么是分布式系统&#xff0c;和集群的区别 3.CAP理论 3.1 什么是CAP理论 3.2 一致性 3.2.1 计算机的一致性说明 1.事务中的一致性 2.并发场景下的一致性 3.分布式场景下的一致性 3.2.2 一致性分类 3.2.3 强一致性 1.线性一致性 a) 定义 a) Raft算法…...

Linux基础知识之Shell命令行及终端中的快捷键

1.察看历史命令快捷键 按键 操作 ctrl p 返回上一次输入命令字符 ctrl n 返回下一次输入命令字符 ctrl r 输入单词甚至词组搜索匹配历史命令 alt p 输入字符查找与字符相接近的历史命令 alt . 向之前执行的命令的最后一个参数轮循, 并将之添加到当前光标之后…...

研究生选择学习Android开发的利与弊?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Android的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;产品经理可以学学Axure快…...

怎么评价程序员40岁了竟然还在撸代码?

怎么评价外卖员40岁了竟然还在送外卖&#xff1f; 怎么评价滴滴司机40岁了竟然还在跑滴滴&#xff1f; 怎么评价老师40岁了竟然还在教书&#xff1f;难道程序员的本职工作不是敲代码吗&#xff1f;无论你是管理层还是螺丝钉&#xff0c;工业环境下怎么可能一行代码都不敲呢&…...

SQL优化(一)基础概念

基数&#xff08;cardinality&#xff09; 表中某个列的唯一键的数量叫做基数&#xff0c;主键列的基数就是表中数据的总行数。 可以用select count(distinct 列名) from 表名来计算基数。 基数的高低影像列的数据分布。 例如&#xff1a;先用Scott账户创建一个测试表test …...

【C++高阶】哈希:全面剖析与深度学习

目录 &#x1f680; 前言一&#xff1a; &#x1f525; unordered系列关联式容器1.1 unordered_map1.2 unordered_set 二&#xff1a; &#x1f525; 哈希的底层结构 ⭐ 2.1 哈希概念⭐ 2.2 哈希冲突⭐ 2.3 哈希函数⭐ 2.4 哈希冲突解决2.4.1 &#x1f304;闭散列2.4.2 &#x…...

PHP西陆招聘求职系统小程序源码

&#x1f525;【职场新宠】西陆招聘求职系统&#xff0c;你的职场加速器&#x1f680; &#x1f389;【开篇安利&#xff1a;一站式求职新体验】&#x1f389; 还在为找工作焦头烂额吗&#xff1f;是时候告别传统招聘网站的繁琐与低效了&#xff01;今天给大家种草一个超赞的…...

系统移植(十一)根文件系统(未整理)

文章目录 一、根文件系统中各个目录文件功能解析&#xff1a;二、对busybox进行配置和编译&#xff08;一&#xff09;执行make help命令获取make的帮助信息&#xff08;二&#xff09;对busybox源码进行配置&#xff0c;配置交叉编译器&#xff08;三&#xff09;执行make men…...

mac中docker常用命令总结

在Mac中&#xff0c;Docker的常用命令可以总结如下表格&#xff1a; 命令用途docker run运行一个新的容器实例。可以指定镜像名来启动容器&#xff0c;并支持多种参数来调整容器的运行方式。docker ps列出当前正在运行的容器。可以通过添加-a参数来列出所有容器&#xff08;包…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...