文件上传漏洞:pikachu靶场中的文件上传漏洞通关

目录

1、文件上传漏洞介绍

2、pikachu-client check

3、pikachu-MIME type

4、pikachu-getimagesize


最近在学习文件上传漏洞,这里使用pikachu靶场来对文件上传漏洞进行一个复习+练习

废话不多说,开整

1、文件上传漏洞介绍

pikachu靶场是这样介绍文件上传漏洞的:

文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。

如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。

所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:
--验证文件类型、后缀名、大小;
--验证文件的上传方式;
--对文件进行一定复杂的重命名;
--不要暴露文件上传后的路径;
--等等...

总结一下文件上传漏洞成功需要有下列四大前提:

  1. 目标具有文件上传功能

  2. 上传后的文件能够被Web服务器解析执行

  3. 知道文件上传到服务器后的存放的物理路径和文件名称

  4. 目标文件可以被用户访问

这里借用大佬总结好的一个图片就可以很好的阐述文件上传的整个过程、防御手段和绕过方法:

图片

下面就对pikachu靶场中的文件上传模块进行通关来练习一下文件上传漏洞 

2、pikachu-client check

来到第一关client check关卡可以看到如下页面:

可以看到我们可以上传一个图片,并且页面也说明了“只允许上传图片”的字样,点击提示可以看到 这一关的检验应该是在前端检验的

尝试上传一个php文件:

可以看到不让上传php文件,那么我们想要上传php文件必须要绕过限制:

方法1:浏览器禁用JS

我这里使用的是火狐浏览器,其他浏览器可以去百度搜:

将true修改为false后再次尝试上传php文件:

可以看到现在就可以上传成功了,访问该文件

可以看到成功解析

方法2:抓包修改后缀

第二种方式就是新建一个php文件然后内容是phpinfo();

然后将后缀修改为jpg,上传文件时,抓包修改后缀就可以看到成功上传了

修改前:

修改后:

可以看到确实上传了

尝试访问:

成功解析

3、pikachu-MIME type

下面来到了第二关,MIME type ,可以看到如下页面:

还是一个上传页面,提示可以看到让我们MIME type了解一下,那么我们就来了解一下:

MIME(Multipurpose Internet Mail Extensions)类型是一种标准,用于标识在互联网上传输的文件的类型和格式。每个MIME类型都由一个唯一的标识符表示,通常以文件的扩展名结尾,例如"text/plain"表示纯文本文件,"image/jpeg"表示JPEG图像文件。

MIME类型在Web开发中非常重要,因为它们告诉浏览器如何处理特定类型的文件。例如,如果服务器将一个文件标识为"text/html"类型,浏览器将会以HTML格式显示它,而如果文件是"image/png"类型,浏览器将会以PNG格式显示它。

知道了MIME是啥了后我们来尝试上上传一下:

可以看到这里图片只能上传指定格式的,这说明后端检测使用了白名单格式,那么我们可不可以像上面一样先上传一个jpg文件抓包然后修改后缀绕过限制呢?实践一下:

可以看到也是上传成功了

尝试访问:

成功解析

这里也可以进行反向操作,即先上传一个php文件,抓包,将MIME修改为图片的格式也是可以绕过限制上传成功的

尝试访问:

成功解析

4、pikachu-getimagesize

来到这一关,可以看到还是熟悉的页面,点击提示会发现需要了解婴喜爱getimagesize

那么来学习一下getimagesize:getimagesize是一个PHP函数,用于获取图像文件的尺寸和类型。该函数可以接受一个图像文件的路径作为参数,并返回一个包含图像宽度、高度和MIME类型的数组。

下面来试着上传一个php文件:

上传一个php文件可以发现提示上传的后缀名不能为空,那么也就是说如果四非jpg/jpeg/png中的一个后端就会将后缀置为空,下面就要尝试绕过限制,抓包阐尝试:

尝试大小写绕过:

尝试双写绕过:

可以看到大小写和双写都无法绕过

这里我发现自己忘记了这一关是getimagessize,才想起来这个意思就是看你文件的文件头,不同的文件又不同的文件头,即便你改了后缀,文件头是不变的

因此这里需要保证上传的文件是图片,但是还是想要带上自己的php代码,这里就需要使用到“图片马”了

需要一张图片+一个php文件,使用下列命令生成图片马:

然后将生成的图片上传:

可以看到成功上传了,尝试访问:

可以看到成功的访问了,但是并没有解析,说明还是还是没有用的,这里就要配合后面我要复习的文件包含漏洞来使用才能正常访问

访问如下URL,利用文件包含来访问就可以成功的解析了:

http://localhost/pkav-labs/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2024/05/13/1937146641fe79d292f581494212.jpg&submit=%E6%8F%90%E4%BA%A4

到此pikachu中的文件上传漏洞就通关了

参考链接:

文件上传漏洞:upload-labs靶场通关_文件上传漏洞靶场闯关教程-CSDN博客

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

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

相关文章

APM2.8下载固件的方法(两种办法详解)

1.把APM飞控用安卓手机的USB线插入电脑。 选择COM口,不要选择auto,如果你没有COM口说明你驱动安装有问题。 波特率115200。点击相应的图标就可以下载固件到飞控板。 请注意:烧录APM必须选择INSTALL FIRMWARE LEAGACY,第一个是用于刷pixhawk的…

【软件设计师】网络安全

1.网络安全基础信息 网络安全的五个基本要素: 机密性:确保信息不暴露给未授权的实体或进程 完整性:只有得到允许的人才能修改数据,并且能判断出数据是否已被修改 可用性:得到授权的实体在需要时可以访问数据&#xff0…

Laravel和ThinkPHP框架比较

一、开发体验与易用性比较 1. 代码可读性: - Laravel以其优雅的语法和良好的代码结构著称,使得代码更加易读易懂。 - 相比之下,ThinkPHP的代码可读性较为一般,在一些复杂业务场景下,可能会稍显混乱。 让您能够一站式…

【动手学PaddleX】谁都能学会的基于迁移学习的老人摔倒目标检测

本项目使用PaddleX搭建目标检测模块,在一个精选的数据集上进行初步训练,并在另一个老年人跌倒检测的数据集上进行参数微调,实现了迁移学习的目标检测项目。 1.项目介绍 迁移学习是非常有用的方法,在实际生活中由于场景多样&…

Brewer Science将在CS Mantech进行展示

在风景如画的亚利桑那州图森市举办的CS Mantech盛会上(2024年5月20日至23日),杰出化合物半导体材料企业Brewer Science,将带来一场名为“化合物半导体制造的创新材料解决方案”的演讲盛宴。这一演讲,定于五月二十一日星…

【Java面试】五、MySQL篇(下)

文章目录 1、事务的特性2、并发事务问题3、事务的隔离级别4、undo log 和 redo log4.1 底层结构4.2 redo log4.3 undo log 5、MVCC5.1 隐式字段5.2 undo log 版本链5.3 ReadView5.4 ReadView的匹配规则实现事务隔离 6、MySQL的主从同步原理7、分库分表7.1 垂直分库7.2 垂直分表…

stm32启动文件

启动文件由汇编编写,是系统上电复位后第一个执行的程序。主要做了以下工作: 初始化堆栈指针SP_initial_sp 初始化PC指针Reset_Handler 初始化中断向量表 配置系统时钟 调用C库函数_main初始化用户堆栈,从而最终调用main函数去到C的世界 …

linux下使用cmake-gui编译WXQT

一.编译环境 操作系统:Ubuntu 22.04.3 LTS wxWidgets源码:wxWidgets-3.1.5 编译工具:CMake-gui qt版本:5.13.2 二.编译步骤 1.将源码解压。 2.打开CMake-gui,并设置好源码目录和构建目录 3.点击configure 会弹出…

C++模板使用

文章目录 目录 文章目录 前言 一、交换函数(泛型编程) 二、函数模板 2.1 函数模板概念 2.2函数模板格式 2.3使用方法 2.4 函数模板的原理 2.4.1库中的swap 2.5 函数模板的实例化 2.6 模板参数的匹配原则 三、类模板 3.1 类模板的定义格式 3.2类模板声明和定义分离 前言 C语言阶…

数据仓库——分层原理

目录 一、什么是数据仓库 二、数仓建模的意义,为什么要对数据仓库分层? 三、ETL 四、技术架构 五、数仓分层架构 数仓逻辑分层 1、数据引入层(ODS,Operational Data Store,又称数据基础层)&#xff…

解决 WooCommerce 的分析报表失效问题

今天明月的一个境外电商客户反应网站的 WooCommerce 分析报表已经十多天没有更新了,明明每天都有订单交易可分析报表里的数据依旧是十多天前的,好像更新完全停滞了似的。明月也及时的查看了后台的所有设置,确认没有任何问题,WooCo…

Android刮刮卡自定义控件

效果图 刮刮卡自定义控件 import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PorterDuff; import …

类和对象03

六、继承 我们发现,定义这些类时,下级别的成员除了拥有上一级的共性,还有自己的特性。 这个时候我们就可以考虑利用继承的技术,减少重复代码 6.1 继承的基础语法 例如我们看到很多网站中, 都有公共的头部,公共的底…

乡村振兴的乡村人才引进与培养:引进和培养乡村人才,激发乡村发展活力,为乡村振兴提供人才保障

目录 一、引言 二、乡村人才引进与培养的重要性 (一)人才是乡村振兴的核心动力 (二)人才是乡村文化传承的载体 (三)人才是乡村社会治理的基石 三、乡村人才引进与培养的现状 (一&#xf…

备战秋招c++ 【持续更新】

T1 牛牛的快递 原题链接:牛牛的快递_牛客题霸_牛客网 (nowcoder.com) 题目类型:模拟 审题&确定思路: 1、超过1kg和不足1kg有两种不同收费方案 ---- 起步价问题 2、超出部分不足1kg的按1kg计算 ----- 向上取整 3、向上取整的实现思路…

移动端应用订阅SDK接入攻略

本文档介绍了联想应用联运移动端订阅SDK接入操作指南,您可在了解文档内容后,自行接入应用联运移动端订阅SDK。 接入前准备 1请先与联想商务达成合作意向。 2.联系联想运营,提供应用和公司信息,并获取商户id、app id、key&#…

谷歌开发者账号身份验证不通过?该怎么办?

我们都清楚,随着谷歌上架行业的快速发展,谷歌政策也在不断更新变化,对开发者账号的审核标准也在不断提升。其中一项要求就是,开发者账号需要进行身份验证才能发布应用。 Your identity couldnt be verified!“我们无法…

词法与语法分析器介绍

概述 词法和语法可以使用正则表达式和BNF范式表达,而最终描述文法含义的事状态转换图 Lex与YACC 词法分析器Lex 词法分析词Lex,是一种生成词法分析的工具,描述器是识别文本中词汇模式的程序,这些词汇模式是在特殊的句子结构中…

二叉树的实现(递归实现)

前言:本文讲解通过递归的方式实现二叉树的一些基本接口。 目录 通过左右子树的方式实现二叉树: 二叉树的遍历: 求二叉树结点的个数: 二叉树所有节点的个数: 二叉树叶子节点的个数: 求第k层节点的节点…

4,八种GPIO模式

资料来源:【STM32基础学习】八种GPIO模式总结-云社区-华为云 (huaweicloud.com) 【STM32基础学习】八种GPIO模式总结-云社区-华为云 (huaweicloud.com) 【STM32基础学习】八种GPIO模式总结-云社区-华为云 (huaweicloud.com) 仅作个人自学笔记,如有冒犯&#xf…