Web安全测试-文件上传绕过-DVWA

news2025/7/20 6:58:04

Web安全测试-文件上传绕过-DVWA

很多网站都有上传资源(图片或者文件)的功能,资源上传后一般会存储在服务器的一个文件夹里面,如果攻击者绕过了上传时候的文件类型验证,传了木马或者其他可执行的代码上去,那服务器就危险了。

我用DVWA的文件上传来做练习,low模式没有任何验证,随便上传任意大小和类型的文件,现实中一般不会存在,故跳过,从medium模式开始。

进入页面后,我尝试传一个php文件上去(文件中有一段代码,用来列出上级目录的所有文件),下图说明medium模式对文件类型进行了限制(在做这个练习此之前,我觉得做了类型限制就很安全了,反正其他类型都传不上去嘛~),其实有一些方法可以绕过这种检测。
在这里插入图片描述

修改Content-Type绕过文件类型检测(medium模式)

用Burp Suite抓包如下,content-type的类型是octet-stream。根据页面的报错,这个页面只能传jpg和png格式的图片。
在这里插入图片描述
尝试把请求中content-type改为image/jpeg,再次发送请求,上传成功。说明medium模式只验证了Mime-Type,并没有验证文件本身(我传的还是php文件)
在这里插入图片描述
上传成功后访问3.php,代码被执行(恶意代码被执行的风险有多大不用多说了。。。)
在这里插入图片描述

利用图片马绕过(high模式)

将security level修改为high,再次使用修改content-type的方法上传,发现上传失败,也就是说,high模式校验了上传文件本身到底是不是图片。接下来尝试用图片马来绕过。什么是图片马,简单来说就是在图片中嵌入了代码。。。步骤如下:

  1. 合成图片马

    找到一张货真价实的图片,然后将图片和php文件合成另一张图片,在命令行使用如下命令:

    copy 3.png /b + test.php /a y.png (y.png就是图片马)

  2. 上传图片马

    用Burp Suite抓包看到我们的代码已经隐藏在图片里了,然后直接上传即可(因为文件格式是符合要求的)

在这里插入图片描述

利用GIF89a绕过(high模式)

什么是GIF89a呢?先上传一张货真价实的gif图片,抓包如下图,图片的最开始几个字母就是GIF89a。个人理解GIF89a应该是gif文件的开头标志,只要有这个标志,就会被当做gif图片

在这里插入图片描述

我将本地的php文件开头加上gif89a,然后把文件重命名为.jpg,进行上传并上传成功(实际上我上传的是一段代码)

这里有个疑问:明明只允许上传jpeg和png,为何gif图片也上传了呢?我的理解是:文件类型和后缀名是分开校验的。校验文件类型的函数只校验了是否是图片(没管是什么类型的图片),而jpeg和png的校验只校验了后缀名。
在这里插入图片描述

那有没有办法避免这种情况呢?有,把security level修改为impossible模式,图片马和GIF89a都不行了,因为impossible模式在high的基础上,还检测了上传文件是不是货真价实的图片~

一点点感悟:

  1. 上传文件类型的校验越严格越好(除了后缀名必须校验文件本身)

  2. 上传的文件放在单独的文件服务器上

  3. 文件上传到服务器后对文件进行重命名

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

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

相关文章

现代 CSS 高阶技巧:实现平滑内凹圆角的工程化实践

通过 数学计算 CSS mask 复合遮罩 实现的真正几何内凹效果: 背景是一张图片,用来证明中间的凹陷是透明的。 完整代码: app.js import FormPage from "./pages/formPage"; import "./App.css"; const App () > {re…

【运维自动化-标准运维】如何实现在不同步骤间传递参数

当流程有多个步骤时&#xff0c;经常需要把前面某个个步骤处理的结果传递给下一个或后面的步骤使用&#xff08;输出作为输入&#xff09;&#xff0c;这就是跨步骤传参的场景&#xff0c;标准运维通过特有的标记符号"<SOPS_VAR>key:value</SOPS_VAR> "来…

[AI]主流大模型、ChatGPTDeepseek、国内免费大模型API服务推荐(支持LangChain.js集成)

主流大模型特色对比表 模型核心优势适用场景局限性DeepSeek- 数学/代码能力卓越&#xff08;GSM8K准确率82.3%&#xff09;1- 开源生态完善&#xff08;支持医疗/金融领域&#xff09;7- 成本极低&#xff08;API价格仅为ChatGPT的2%-3%&#xff09;5科研辅助、代码开发、数据…

手机IP地址更换的影响与操作指南

在移动互联网时代&#xff0c;IP地址如同手机的“网络身份证”&#xff0c;其变更可能对上网体验、隐私安全及服务访问产生连锁反应。无论是为了绕过地域限制、保护隐私&#xff0c;还是解决网络冲突&#xff0c;了解IP更换的影响与正确操作方法都至关重要。本文将系统分析影响…

MongoDB 安全机制详解:全方位保障数据安全

在当今数据驱动的时代&#xff0c;数据库安全至关重要。MongoDB 作为一款流行的 NoSQL 数据库&#xff0c;广泛应用于 Web 应用、大数据分析和物联网等领域。然而&#xff0c;随着 MongoDB 的普及&#xff0c;其安全性也面临诸多挑战&#xff0c;如未授权访问、数据泄露和注入攻…

嵌入式学习之系统编程(六)线程

目录 一、线程 &#xff08;一&#xff09;线程概念 &#xff08;二&#xff09;特征 &#xff08;三&#xff09;优缺点 二、线程与进程的区别&#xff08;面问&#xff09; 三、多线程程序设计步骤 四、线程的创建&#xff08;相关函数&#xff09; 1、pthread_create…

大语言模型 提示词的少样本案例的 演示选择与排序新突破

提示词中 演示示例的选择与排序 这篇论文《Rapid Selection and Ordering of In-Context Demonstrations via Prompt Embedding Clustering》聚焦于提升大语言模型(LLMs)在自适应上下文学习(ICL)场景中演示示例的选择与排序效率 一、论文要解决的问题 在上下文学习(ICL)…

【算法篇】二分查找算法:基础篇

题目链接&#xff1a; 34.在排序数组中查找元素的第一个和最后一个位置 题目描述&#xff1a; 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返…

重磅发布 | 复旦533页《大规模语言模型:从理论到实践(第2版)》(免费下载)

在人工智能浪潮席卷全球的今天&#xff0c;大语言模型正以前所未有的速度推动着科技进步和产业变革。从 ChatGPT 到各类行业应用&#xff0c;LLM 不仅重塑了人机交互的方式&#xff0c;更成为推动学术研究与产业创新的关键技术。 面对这一飞速演进的技术体系&#xff0c;如何系…

智能体赋能效率,企业知识库沉淀价值:UMI企业智脑的双轮驱动!

智能体企业知识库&#xff1a;UMI企业智脑的核心功能与价值 在人工智能技术飞速发展的今天&#xff0c;企业智能化转型已经成为不可逆转的趋势。作为企业级AI智能体开发平台的佼佼者&#xff0c;优秘智能推出的UMI企业智脑&#xff0c;以其强大的智能体开发能力和全面的企业知…

vue项目 build时@vue-office/docx报错

我在打包vue项目时&#xff0c; 开始用的npm run build和cnpm run build&#xff0c;总是提示 vue-office/docx 错误&#xff0c;尝试过用cnpm重新安装node_modules几次都没用。类似下面的提示一直有。 Error: [commonjs--resolver] Failed to resolve entry for package "…

#RabbitMQ# 消息队列入门

目录 一 MQ技术选型 1 运行rabbitmq 2 基本介绍 3 快速入门 1 交换机负责路由消息给队列 2 数据隔离 二 Java客户端 1 快速入门 2 WorkQueue 3 FanOut交换机 4 Direct交换机 5 Topic交换机 *6 声明队列交换机 1 在配置类当中声明 2 使用注解的方式指定 7 消息转…

EPT(Efficient Prompt Tuning)方法,旨在解决提示调优(Prompt Tuning)中效率与准确性平衡和跨任务一致性的问题

EPT(Efficient Prompt Tuning)方法,旨在解决提示调优(Prompt Tuning)中效率与准确性平衡和跨任务一致性的问题 一、核心原理:分解提示与多空间投影 1. 提示分解:用低秩矩阵压缩长提示 传统问题: 长提示(如100个token)精度高但训练慢,短提示(如20个token)速度快但…

云原生安全核心:云安全责任共担模型(Shared Responsibility Model)详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 1. 基础概念 什么是云安全责任共担模型&#xff1f; 云安全责任共担模型&#xff08;Shared Responsibility Model, SRM&#xff09;是云服务提供商&…

go并发与锁之sync.Mutex入门

sync.Mutex 原理&#xff1a;一个共享的变量&#xff0c;哪个线程握到了&#xff0c;哪个线程可以执行代码 功能&#xff1a;一个性能不错的悲观锁&#xff0c;使用方式和Java的ReentrantLock很像&#xff0c;就是手动Lock&#xff0c;手动UnLock。 使用例子&#xff1a; v…

[Java恶补day8] 3. 无重复字符的最长子串

给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “…

LabVIEW教学用开发平台

一、培训目标 基础编程&#xff1a;掌握 LabVIEW 数据类型、程序结构、子 VI 设计与调试技巧。 硬件通信&#xff1a;精通 RS-232/485、TCP/IP、Modbus、PLC 等工业通信协议及实现。 高级设计模式&#xff1a;熟练运用状态机、生产者 - 消费者模式构建复杂测控系统。 项目实…

Package Size Comparison – 6 Leads

Package Size Comparison 6 LeadsTSOP SOT SM SMT SOT23 SC-74 SC-59 SC-88 SOT363 US6 UMT6 SC-70 SOT563 ES EMT SC-75-6

python打卡day38

Dataset和DataLoader 知识点回顾&#xff1a; Dataset类的__getitem__和__len__方法&#xff08;本质是python的特殊方法&#xff09;Dataloader类minist手写数据集的了解 作业&#xff1a;了解下cifar数据集&#xff0c;尝试获取其中一张图片 在遇到大规模数据集时&#xff0c…

vLLM 核心技术 PagedAttention 原理详解

本文是 vLLM 系列文章的第二篇&#xff0c;介绍 vLLM 核心技术 PagedAttention 的设计理念与实现机制。 vLLM PagedAttention 论文精读视频可以在这里观看&#xff1a;https://www.bilibili.com/video/BV1GWjjzfE1b 往期文章&#xff1a; vLLM 快速部署指南 1 引言&#xf…