Upload-labs 靶场通关解析(上)

前言

文件上传漏洞是一种常见的网络安全漏洞,存在于许多Web应用程序中。攻击者利用这个漏洞可以上传恶意文件到目标服务器,从而执行各种恶意操作,如执行恶意代码、获取敏感信息、控制服务器等。

文件上传漏洞的原理是,Web应用程序没有对用户上传的文件进行充分的验证和过滤。攻击者可以通过构造特定的文件内容和文件名,绕过应用程序的验证机制,将恶意文件上传到服务器上。

文件上传漏洞可以通过以下方式来利用:

1. 上传恶意脚本文件:攻击者可以上传包含恶意代码的脚本文件,如PHP、ASP、JSP等。一旦服务器执行这些恶意脚本,攻击者就可以执行任意代码,包括执行系统命令、访问数据库等。

2. 上传恶意文件类型:攻击者可以上传具有危险扩展名的文件,如可执行文件、Webshell、恶意软件等。这些文件可能会被服务器执行或以某种方式被访问,从而危害服务器和用户的安全。

3. 绕过文件类型验证:应用程序通常会验证上传文件的类型,但攻击者可以通过修改文件的内容、伪造文件头等方式绕过这个验证机制,上传被禁止的文件类型。

为了防止文件上传漏洞,开发者可以采取以下措施:

1. 文件类型验证:应用程序应该对上传的文件进行类型验证,只允许特定的文件类型上传。这可以通过检查文件的扩展名或文件的内容进行验证。

2. 文件名验证:应用程序应该对上传的文件名进行验证,防止攻击者使用特殊字符或路径遍历等方式绕过文件名验证。

3. 文件内容检查:应用程序应该对上传的文件内容进行检查,确保文件不包含恶意代码或危险的内容。

4. 文件存储位置:应该将上传的文件存储在非Web可访问的目录下,确保攻击者无法直接访问上传的文件。

5. 权限控制:应该为上传文件设置适当的权限,以防止非授权用户访问或执行上传的文件。

总的来说,为了防止文件上传漏洞,开发者需要在应用程序中实施适当的安全措施,如文件类型验证、文件名验证、文件内容检查、文件存储位置和权限控制等。同时,定期更新和维护应用程序,以修复已知的漏洞和安全问题。用户也应保持浏览器和操作系统的更新,并警惕点击未知或可疑的链接。

一、介绍

upload-labs是一个专门用于学习文件上传漏洞的开源实验平台。它由Web安全研究人员余弦(knownsec)团队开发和维护,旨在帮助安全爱好者深入理解文件上传漏洞的原理和防护措施。

upload-labs提供了一系列的漏洞场景,每个场景都模拟了不同类型的文件上传漏洞。通过这些场景,用户可以学习如何发现、利用和修复文件上传漏洞。

在upload-labs中,用户可以通过上传文件表单与服务器进行交互。每个场景都有特定的漏洞点,用户需要通过尝试不同的上传方式和绕过技巧,成功上传恶意文件或绕过文件类型限制。

upload-labs提供了详细的解题指南,包括漏洞的原理、攻击方法、防护措施等。用户可以通过实际操作来加深对文件上传漏洞的理解,并提升自己的安全技能。

upload-labs是一个开源项目,源代码和相关文档都可以在GitHub上找到。这使得用户可以自由地学习、修改和分享这个实验平台。

总的来说,upload-labs是一个用于学习文件上传漏洞的实验平台,提供了一系列的漏洞场景和解题指南。通过实际操作,用户可以深入了解文件上传漏洞的原理和防护措施,并提升自己的安全技能。

二、Pass-01(禁用 JS)

上传 PHP 文件提示不允许上传,根据提示框猜测在前端做了验证

F12 查看源代码发现是在前端做的验证

设置中直接禁用 JS

上传文件后即可发现图片地址为 PHP 木马表示成功

三、Pass-02(修改 Content-Type)

提示对 Content-Type 检查

使用 BurpSuite 开启拦截抓包

上传 PHP 文件拦截数据包

将 Content-Type 修改为允许上传的类型(image/jpeg、image/png、image/gif)三选一,然后点击放行

上传成功!!

四、Pass-03(修改 filename)

这一关禁止了一些后缀名上传

使用 BurpSuite 开启拦截抓包,修改 filename 值即可

上传成功

五、Pass-04(上传 .htaccess)

禁止了大量文件后缀名但是缺少 .htaccess 文件

htaccess文件(“分布式配置文件”)提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令将受到限制。管理员可以通过Apache的AllowOverride指令来设置。

概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能

原理:上传覆盖.htaccess文件,重写解析规则,将上传的图片马以脚本方式解析

<FilesMatch "webshell">
SetHandler application/x-httpd-php
</FilesMatch>

上传.htaccess文件设置的关键字的文件名,即上传一个黑名单没有过滤的随意后缀名文件,但文件名中一定要包含 webshell,如"webshell.jpg",内容为一句话木马。此时"webshell.jpg"会被Apache当作php解析

六、Pass-05(上传 .user.ini)

这一关过滤了 .htaccess 文件,查看提示说目录下存在一个 readme.php 文件

可以利用 user.ini 漏洞,这里简要说明下

.user.ini 文件是 PHP 中用于配置特定目录的设置的特殊文件。它类似于 Apache 服务器中的 .htaccess 文件,但仅适用于 PHP。.user.ini 文件允许用户为特定目录定义 PHP 配置指令,这些配置指令将在该目录及其所有子目录中的 PHP 脚本执行时生效。

.user.ini 文件的主要目的是为了允许非管理员用户自定义某些 PHP 配置选项,而不需要访问主 php.ini 文件。这样,不同的应用程序或用户可以在自己的目录中设置特定的 PHP 配置,而不影响整个服务器的配置。

在PHP环境中,.user.ini 文件与 .htaccess 文件类似,可以用来配置某些 PHP 环境 settings。当PHP.ini中的 user_ini.filename 和 user_ini.cache_ttl 被启用时,PHP会尝试在每个目录下查找并解析.user.ini文件。如果攻击者能够上传一个恶意的.user.ini文件到 PHP 服务器上,他们可能会利用这个文件来改变服务器的配置,例如修改auto_prepend_file或者auto_append_file设置,从而在服务器执行任意代码

例如,攻击者可能会在一个上传目录中放置一个.user.ini文件,内容如下:

auto_prepend_file=webshell.png    //其中 webshell.png 需要与你上传的文件名相同

.user.ini 文件里的意思是:所有的php文件都自动包含 webshell.png 文件

所以先上传 .user.ini 文件,然后上传 webshell.png 文件 

七、Pass-06(大小写混淆)

打开提示发现黑名单对于大小写的过滤不全

可以将扩展名修改为 PhP

上传成功

八、Pass-07(双写绕过) 

从这关之后就得看源码了,发现过滤了有点全,但从扩展名这可以尝试双写绕过

打开 BurpSuite 拦截数据包,修改 filename 值

上传成功 

九、Pass-08(双点绕过) 

审计源码发现没有过滤双点(单点过滤了)

打开 BurpSuite 拦截数据包,修改 filename 值

上传成功

十、Pass-09(::DATA) 

查看源码发现没有过滤 " ::DATA “

在window的时候如果 文件名+"::$DATA" 会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名

打开 BurpSuite 拦截数据包,修改 filename 值

 

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

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

相关文章

Llama 3 ——开源大模型Llama 3从概念到使用

概述 Meta公司自豪地宣布推出其最新的开源大型语言模型——Llama 3&#xff0c;这是一款专为未来AI挑战而设计的先进工具。Llama 3包含两个不同参数规模的版本&#xff0c;以满足多样化的计算需求&#xff1a; 8B版本&#xff1a;优化了在消费级GPU上的部署和开发流程&#xf…

【设计模式】抽象工厂模式(Abstract Factory Pattern)

目录标题 抽象工厂设计模式详解1. 介绍2. 结构3. 实现步骤3.1 创建抽象产品接口3.2 创建具体产品类3.3 创建抽象工厂接口3.4 创建具体工厂类 4. 好处与优点5. 坏处与缺点6. 适用场景7. 总结 抽象工厂设计模式详解 1. 介绍 抽象工厂模式是一种创建型设计模式&#xff0c;它提供…

学生管理系统[Python语言]

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 学生管理系统是计算机专业最基础的一个作业&#…

算法设计优化——起泡排序

文章目录 0.概述1 起泡排序&#xff08;基础版&#xff09;1.1 算法分析1.2 算法实现1.3 重复元素与稳定性1.4 复杂度分析 2 起泡排序&#xff08;改进版&#xff09;2.1 目标2.2 改进思路2.3 实现2.4 复杂度分析 3 起泡排序&#xff08;改进版2&#xff09;3.1 目标3.1 改进思…

edge 入门基础了解使用

随着Windows 11的发布&#xff0c;Microsoft Edge也迎来了新的更新和改进。作为一名长期使用Edge的用户&#xff0c;我不仅注意到了这些表面的变化&#xff0c;还深入研究了Edge在Windows 11上的新特性和潜在优势。 快捷方式 查找框 在Microsoft Edge浏览器中&#xff0c;按…

C语言——通讯录实现

一、介绍 本文只是对于结构体类型的练习。 只是简单的静态通讯录实现&#xff0c;没有具体的UI界面&#xff0c;只有一些简单的功能&#xff0c;同时也比较粗糙&#xff0c;有很多地方没有经过足够的打磨。 二、源码 本项目包含三个文件&#xff1a; test.c/cpp #include…

Typora中设置文字颜色

在Typora中设置文字颜色的三种方法如下&#xff1a; 方法一&#xff1a;使用内联公式 开启使用内联公式。依次点击“文件”→“偏好设置”&#xff08;或使用快捷键Ctrl逗号&#xff09;&#xff0c;在弹出的窗口中选择“Markdown”&#xff0c;然后勾选“内联公式”&#xf…

基于docker-compose使用虚拟机搭建redis集群

代码实现 新建文件 docker-compose-redis.yml&#xff0c;复制以下代码 version: 2.2services:redis-node1:image: redis:5.0restart: alwayscommand: redis-server --port 7000 --cluster-enabled yes --cluster-config-file /data/nodes.conf --appendonly yesports:- &quo…

智能穿戴终端设备安卓主板方案_MTK平台智能手表PCBA定制开发

新移科技智能手表方案兼容WiFi、BLE、2~5G等多种通信能力。支持多个功能模块&#xff0c;包括&#xff1a;通话、计步、定位、睡眠监测、心率监测、血氧监测等。智能手表通过滑动与功能性按键提供高度直观的体验感受&#xff0c;从腕间即可掌控日常生活。形态支持定制包括&…

安全架构概述

安全架构是确保网络环境中的数据、系统和用户安全的关键组成部分&#xff0c;它涉及到多种技术和策略的综合应用。基本内容主要包括以下几个方面&#xff1a; 1. 访问控制与身份验证 &#xff1a;确保只有经过验证的用户或系统可以访问特定资源&#xff0c;常用技术包括多因素…

MySQL从入门到高级 --- 4.约束

文章目录 第四章&#xff1a;4.MySQL约束4.1 主键约束4.1.1 添加单列主键4.1.2 添加多列主键(联合主键)4.1.3 通过修改表结构添加主键4.1.4 删除主键约束4.1.5 自增长约束特点 4.1.6 指定自增字段初始值 - 创建表时指定4.1.7 指定自增字段初始值 - 创建表之后4.1.8 delete与tru…

如何配置 Prettier 配置文件,确保其中的文件 glob 模式能够正确包含 postcss.config.js 文件

如何配置 Prettier 配置文件&#xff0c;确保其中的文件 glob 模式能够正确包含 postcss.config.js 文件 要配置 Prettier 以确保其文件 glob 模式能够正确包含 postcss.config.js 文件&#xff0c;您可以按照以下步骤操作&#xff1a; 确认 Prettier 配置文件的存在&#xf…

商城数据库88张表结构(十五)

DDL 57.后台权限表 CREATE TABLE wang_privileges (privilegeId int(11) NOT NULL AUTO_INCREMENT COMMENT 自增ID,menuId int(11) NOT NULL COMMENT 父ID,privilegeCode varchar(20) NOT NULL COMMENT 权限代码,privilegeName varchar(30) NOT NULL COMMENT 权限名称,isMenu…

websocket全局封装使用

WebSocket对象的创建 WebSocket对象的关闭 启用心跳机制&#xff0c;避免断连 消息推送&#xff0c;接收到消息后进行业务逻辑处理 重连机制&#xff0c;如果断连后尝试一定次数的重连&#xff0c;超过最大次数后仍然失败则关闭连接 调用案例如下&#xff1a; const socketMana…

Vue笔记 4

内置指令 1.v-text_指令 我们学过的指令&#xff1a; ​ v-bind : 单向绑定解析表达式, 可简写为 :xxx ​ v-model : 双向数据绑定 ​ v-for : 遍历数组/对象/字符串 ​ v-on : 绑定事件监听, 可简写为 ​ v-if : 条件渲染&#xff08;动态控制节点是否存存在&#xff0…

洞察未来:数据治理中的数据架构新思维

随着大数据时代的来临&#xff0c;数据已经成为企业运营和社会发展的重要资产。然而&#xff0c;数据的复杂性和快速增长给企业带来了前所未有的挑战。在这样的背景下&#xff0c;数据治理成为了企业不可或缺的一环。数据治理不仅涉及数据的管理、安全和隐私保护&#xff0c;更…

ubuntu部署sonar与windows下使用sonar-scanner

ubuntu部署sonar与windows下使用sonar-scanner sonar部署java安装mysql安装配置sonarqube 插件安装sonar-scanner使用简单使用 sonar部署 使用的是sonarqube-7.5&#xff0c;支持的java环境是jdk8&#xff0c;且MySQL版本 >5.6 && <8.0 java安装 打开终端&…

Jackson-自定义注解及实现数据脱敏、枚举转换

Hi,大家好&#xff0c;我是抢老婆酸奶的小肥仔。 上一章&#xff0c;我们介绍了下Jackson及相关的注解&#xff0c;其实我们可以通过仿照一些注解来实现自定义以满足我们自己的业务需求&#xff0c;这一章&#xff0c;我们来说说jackson提供的自定义注解及一些应用吧。 废话不…

Virtualbox7.0.10--创建虚拟机

前言 下载Virtualbox7.0.10&#xff0c;可参考《Virtualbox–下载指定版本》 Virtualbox7.0.10具体安装步骤&#xff0c;可参考《Virtualbox7.0.10的安装步骤》 Virtualbox7.0.10创建虚拟机&#xff0c;可参考《Virtualbox7.0.10–创建虚拟机》 Virtualbox7.0.10安装Ubuntu20.0…

H.265码流解析

这一篇内容旨在对H.265码流中的一些概念做简单了解,部分概念与H.264相同,本篇中将不再重复。 1、NALU H.265(HEVC)码流的NALU结构和AVC有一些不同,属于增强版,HEVC NALU结构如下: NALU Header: Forbidden_zero_bit:1位,必须为0,如果不是则表示NALU非法;Nal_unit_t…