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

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

二、绕过客户端检测

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

2.常见MIME类型

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

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

- 后缀大小写绕过(Php):在对后缀的判断中,如果只是对字符串进行单独的比较来判断是不是限制文件,可以采用后缀名大小写绕过形式;
- 空格绕过(php ):如果黑名单没有对后缀名进行去空处理,可以通过在后缀名后加空进行绕过;
- 点绕过(php.):如果黑名单没有对后缀名进行去点处理,利用Windows系统的文件名特性,会自动去掉后缀名最后的 . ,通过在文件名后加 . 进行绕过;
- ::$DATA绕过:利用Windows下NTFS文件系统的一个特性,可以在后缀名后加::$DATA绕过对黑名单的检测;
- 配合Apache解析漏洞:Apache解析有一个特点,解析文件时是从右往左判断,如果为不可识别解析再往左判断,即如 aa.php.owf.rar 文件,Apache不可识别解析‘.owf’和‘.rar’这两种后缀,会解析成.php文件
- 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
优质博文:IT_BLOG_CN 一、Tomcat 顶层架构 Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。Service主要包含两个部分:Connector和…...
2024年7月个人工作生活总结
本文为 2024年7月工作生活总结。 研发编码 “康威定律(Conway’s Law)”思考 康威定律是 50 年前(1967 年)由 梅尔文康威 提出的,最初的说法如下: Any organization that designs a system (defined broa…...
快速方便地下载huggingface的模型库和数据集
快速方便地下载huggingface的模型库和数据集 方法一:用于使用 aria2/wgetgit 下载 Huggingface 模型和数据集的 CLI 工具特点Usage 方法二:模型下载【个人使用记录】保持目录结构数据集下载不足之处 方法一:用于使用 aria2/wgetgit 下载 Hugg…...
JAVA小白学习日记Day10
1.线程锁 使用Runnable接口和Lambda表达式: 在 EasyThreadA 类的 mainA 方法中,通过创建 Runnable 实例 run,并使用Lambda表达式。 EasyThreadA::method 绑定到 run 上。然后创建两个线程 a 和 b,分别启动它们,它们会…...
分布式相关理论详解
目录 1.绪论 2.什么是分布式系统,和集群的区别 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开发的利与弊?
在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「Android的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!产品经理可以学学Axure快…...
怎么评价程序员40岁了竟然还在撸代码?
怎么评价外卖员40岁了竟然还在送外卖? 怎么评价滴滴司机40岁了竟然还在跑滴滴? 怎么评价老师40岁了竟然还在教书?难道程序员的本职工作不是敲代码吗?无论你是管理层还是螺丝钉,工业环境下怎么可能一行代码都不敲呢&…...
SQL优化(一)基础概念
基数(cardinality) 表中某个列的唯一键的数量叫做基数,主键列的基数就是表中数据的总行数。 可以用select count(distinct 列名) from 表名来计算基数。 基数的高低影像列的数据分布。 例如:先用Scott账户创建一个测试表test …...
【C++高阶】哈希:全面剖析与深度学习
目录 🚀 前言一: 🔥 unordered系列关联式容器1.1 unordered_map1.2 unordered_set 二: 🔥 哈希的底层结构 ⭐ 2.1 哈希概念⭐ 2.2 哈希冲突⭐ 2.3 哈希函数⭐ 2.4 哈希冲突解决2.4.1 🌄闭散列2.4.2 &#x…...
PHP西陆招聘求职系统小程序源码
🔥【职场新宠】西陆招聘求职系统,你的职场加速器🚀 🎉【开篇安利:一站式求职新体验】🎉 还在为找工作焦头烂额吗?是时候告别传统招聘网站的繁琐与低效了!今天给大家种草一个超赞的…...
系统移植(十一)根文件系统(未整理)
文章目录 一、根文件系统中各个目录文件功能解析:二、对busybox进行配置和编译(一)执行make help命令获取make的帮助信息(二)对busybox源码进行配置,配置交叉编译器(三)执行make men…...
mac中docker常用命令总结
在Mac中,Docker的常用命令可以总结如下表格: 命令用途docker run运行一个新的容器实例。可以指定镜像名来启动容器,并支持多种参数来调整容器的运行方式。docker ps列出当前正在运行的容器。可以通过添加-a参数来列出所有容器(包…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
