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

不安全的文件上传(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.rhkb.cn/news/386253.html

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

相关文章

Unity横板动作游戏 - 素材导入和整理

导入素材 编辑器布局 点击每个窗口右上角的三个点可以有更多的窗口选项。 在屏幕的右上角有一个菜单可以保存布局或读取已经报错的布局。 工具按钮 编辑器上的工具按钮在启动的时候是蓝色的,在不启动的时候是灰色的。 这个按钮将会决定场景中的物体是以锚点显示还…

Oracle配置TCPS加密协议测试

文章目录 一、环境信息二、配置过程1.创建证书2.监听配置2.1.配置sqlnet.ora2.2.配置listener.ora文件2.3.配置tnsnames.ora文件2.4.重载监听 3.数据库本地测试3.1. tcps登录测试3.2.日志监控 一、环境信息 操作系统:Linux 版本信息:Oracle 19c 参考文档…

EXCEL自动公式计算始终为0

如果你的数据单元格的左上角存在绿色的三角小箭头,那么就会造成这种问题: 你的数字是以文本形式存入的单元格 解决办法: 选中数据列,数据->分列 直接选择完成 此时就可以进行公式计算了

pytest结合allure-pytest插件生成测试报告

目录 一、安装allure-pytest插件 二、下载allure 三、生成allure报告 四、效果展示 一、安装allure-pytest插件 二、下载allure 下载之后解压,解压之后还要配置环境变量(把allure目录下bin目录配置到系统变量的path路径),下…

企业化运维(8)Docker容器技术

###1.Docker介绍### 什么是Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间…

2024后端开发面试题总结

一、前言 上一篇离职贴发布之后仿佛登上了热门,就连曾经阿里的师兄都看到了我的分享,这波流量真是受宠若惊! 回到正题,文章火之后,一些同学急切想要让我分享一下面试内容,回忆了几个晚上顺便总结一下&#…

全栈嵌入式C++、STM32、Modbus、FreeRTOS和MQTT协议:工业物联网(IIoT)可视化系统设计思路(附部分代码解析)

项目概述 随着工业4.0时代的到来,工业物联网(IIoT)在提高生产效率、降低运营成本和实现智能制造方面得到了广泛应用。本项目旨在开发一个全面的工业物联网监控系统,能够实时监测设备的温度、压力、振动和电流等参数,并…

谷粒商城实战踩坑笔记-Service循环依赖

文章目录 1. 使用 Lazy 注解2. 使用 PostConstruct 注解3,补充循环依赖相关知识循环依赖的原因举例说明 4,Lazy 的工作原理 启动项目失败,原因是出现了循环依赖。 The dependencies of some of the beans in the application context form a …

PP 6 成本中心 活动类型 以及两者的关联

成本中心创建:KS01 保存即可 活动类型:KL01 (有准备,机器,工时等) 保存 KP26:活动类型和成本中心的关联

如何在Net8.0平台下开发AOT项目,项目实战分析

1. 前言 前面的文章我们讨论过什么是AOT,以及AOT适用于什么场景, dotnet开发编译之争:Ahead-of-Time(AOT) vs Just-in-Time(JIT)谁才是未来最佳编译选择?,那么如何在Net8.0平台下开发AOT项目。 2. 先决条件 在安装的…

搞懂数据结构与Java实现

文章链接:搞懂数据结构与Java实现 (qq.com) 代码链接: Java实现数组模拟循环队列代码 (qq.com) Java实现数组模拟栈代码 (qq.com) Java实现链表代码 (qq.com) Java实现哈希表代码 (qq.com) Java实现二叉树代码 (qq.com) Java实现图代码 (qq.com)

【讲解下ECMAScript和JavaScript之间有何区别?】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

swagger-ui.html报错404

问题1:权限受限无法访问 由于采用的Shiro安全框架,需要在配置类ShiroConfig下的Shiro 的过滤器链放行该页面:【添加:filterChainDefinitionMap.put("/swagger-ui.html", "anon");】 public ShiroFilterFact…

C# dataGridView 去掉左边多出来空列

1.问题 在使用winform做界面程序时,dataGridView控件创建好后,左侧会多出一列为空,如何删除呢 2.解决方法 你可以在属性窗口中进行设置 如图: 将RowHeadersVisible 属性设置为False 或者代码设置 this.dataGridView1.RowHea…

算力共享:如何理解、标识与调控多层次算力资源的异构性和复杂性,实现智能算力网生态诸要素有效互操作?

目录 鹏程云主机和NPU计算服务器关系 NPU计算服务器 两者关系 结论 两种不同类型的处理器或计算单元 FPGA MLU NS3(Network Simulator version 3) 一、基本属性 二、主要功能与特点 三、应用与前景 对象存储和HDD存储 一、定义与特点 二、应用场景 三、总结 对…

基于深度学习网络的USB摄像头实时视频采集与水果识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 将usb摄像头对准一个播放不同水果图片的显示器,然后进行识别,识别结果如下: 本课题中…

【2025留学】德国留学真的很难毕业吗?为什么大家不来德国留学?

大家好!我是德国Viviane,一句话讲自己的背景:本科211,硕士在德国读的电子信息工程。 之前网上一句热梗:“德国留学三年将是你人生五年中最难忘的七年。”确实,德国大学的宽进严出机制,延毕、休…

PHP多场地预定小程序系统源码

一键畅游多地!多场地预定小程序的超实用指南 段落一:【开篇:告别繁琐,预订新体验】 🎉🚀 还在为多个活动或会议的场地预订而头疼不已吗?多场地预定小程序来拯救你啦!它像是一位贴心…

基于Element UI内置的Select下拉和Tree树形组件,组合封装的树状下拉选择器

目录 简述 效果 功能描述 代码实现 总结 简述 基于Element UI内置的Select下拉和Tree树形组件,组合封装的树状下拉选择器。 效果 先看效果: 下拉状态: 选择后状态: 选择的数据: 功能描述 1、加载树结构&…

FastAPI(七十八)实战开发《在线课程学习系统》接口开发-- 评论

源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 梳理下思路 1.判断是否登录 2.课程是否存在 3.如果是回复,查看回复是否存在 4.是否有权限 5.发起评论 首先新增pydantic模型 class Cour…