文件上传漏洞: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中的文件上传漏洞就通关了


零基础入门渗透测试/网络安全

【----帮助网安学习,以下所有学习资料免费领取!----】

> ① 网安学习成长路径思维导图
> ② 60+网安经典常用工具包
> ③ 100+SRC漏洞分析报告
> ④ 150+网安攻防实战技术电子书
> ⑤ 最权威CISSP 认证考试指南+题库
> ⑥ 超1800页CTF实战技巧手册
> ⑦ 最新网安大厂面试题合集(含答案)
> ⑧ APP客户端安全检测指南(安卓+IOS)

点击免费领取 👉优快云大礼包:《网络安全入门&进阶学习资源包》免费分享

大纲

首先要找一份详细的大纲。

在这里插入图片描述

学习教程

第一阶段:零基础入门系列教程

img

该阶段学完即可年薪15w+

第二阶段:技术入门

弱口令与口令爆破
XSS漏洞
CSRF漏洞
SSRF漏洞
XXE漏洞
SQL注入
任意文件操作漏洞
业务逻辑漏洞

该阶段学完年薪25w+

img

阶段三:高阶提升

反序列化漏洞
RCE
综合靶场实操项目
内网渗透
流量分析
日志分析
恶意代码分析
应急响应
实战训练

该阶段学完即可年薪30w+

面试刷题

img
在这里插入图片描述

最后,我其实要给部分人泼冷水,因为说实话,上面讲到的资料包获取没有任何的门槛。

但是,我觉得很多人拿到了却并不会去学习。

大部分人的问题看似是“如何行动”,其实是“无法开始”。

几乎任何一个领域都是这样,所谓“万事开头难”,绝大多数人都卡在第一步,还没开始就自己把自己淘汰出局了。

如果你真的确信自己喜欢网络安全/黑客技术,马上行动起来,比一切都重要

资料领取

上述这份完整版的网络安全学习资料已经上传网盘,朋友们如果需要可以微信扫描下方二维码 ↓↓↓ 或者 点击以下链接都可以领取

👉优快云大礼包:《网络安全入门&进阶学习资源包》免费分享

在这里插入图片描述

### Pikachu靶场文件上传关卡解法 在Pikachu靶场中,文件上传功能通常用于测试Web应用程序的安全性。为了成功完成此关卡并理解其背后的机制,需了解文件上传漏洞的工作原理以及如何利用这些漏洞。 #### 文件上传漏洞概述 凡是存在文件上传的地方均有可能存在文件上传漏洞[^2]。当开发者处理用户提交的内容时如果不够严谨,则可能导致攻击者能够绕过验证逻辑,上传恶意脚本或其他危险类型的文件到服务器上执行任意命令或读取敏感数据。 #### 正常情况下的文件上传请求分析 正常情况下,在向服务器发送图片的过程中,HTTP POST 请求中的 `Content-Type` 头部会被设置成相应的 MIME 类型,比如对于JPEG图像来说就是 `image/jpeg`[^3]: ```bash POST /upload HTTP/1.1 Host: example.com Content-Requests: 1 Origin: http://example.com Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryqkVAUfLrGjXJWQbF ... ------WebKitFormBoundaryqkVAUfLrGjXJWQbF Content-Disposition: form-data; name="file"; filename="normal.jpg" Content-Type: image/jpeg ``` #### 利用文件上传漏洞的方法 要解决Pikachu靶场内的文件上传挑战,可以尝试以下几种方法来检测是否存在不安全的实现方式: - **更改扩展名**:即使服务端设置了只允许特定格式(如`.jpg`, `.png`),也可以通过修改待上传文件的实际名称为合法后缀的方式试图欺骗应用层过滤器。 - **MIME类型伪造**:除了依赖于文件名外,某些程序还会检查上传内容的真实媒体类型。此时可以通过调整客户端发出的数据包里的`Content-Type`字段来进行试探性的突破。 - **PHP伪协议利用**:部分老旧版本可能存在对特殊路径解析不当的情况,例如使用`php://filter/resource=image.php`这样的URL模式加载远程资源作为本地文件处理。 请注意实际渗透测试过程中应当遵循法律规范,并获得目标系统的授权许可后再开展任何可能影响他人财产的行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员一粟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值