pikachu靶场-7 不安全的文件下载和上传

本文探讨了不安全的文件下载与上传所带来的潜在威胁,包括如何通过构造路径下载后台敏感文件及绕过上传限制上传恶意文件。

不安全的文件下载和上传

不安全的文件下载

文件下载(unsafedownload)漏洞概述

很多网站都会提供文件下载功能,即用户可以通过点击下载链接,下载到链接所对应的文件。

但是,如果文件下载功能设计不当,则可能会导致攻击者可以通过构造文件路径,从而获取到后台服务器上的其他的敏感文件。

文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。
此时如果 攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如…/…/…/etc/passwd),则很有可能会直接将该指定的文件下载下来。 从而导致后台敏感信息(密码文件、源代码等)被下载。
所以,在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。 切记:所有与前端交互的数据都是不安全的,不能掉以轻心!

靶场
image-20221212162110385

我们右键名字,新标签页中打开链接,可以发现自动将图片下载了,我们从URL里可以看到请求,它其实就是把kb.png这么一个filename传到了后台,后台就去找这个文件,把这个文件读取后,又响应到前端,浏览器就可以把它下载下来了这么一个过程。如果说后端的代码控制不够严格,这个地方很有可能就出现漏洞了。

一般来说测试这种文件下载漏洞呢,我们可以通过目录遍历的方式

image-20221212163701311

主要我们输入足够多的…/你其实是可以跳转到根目录下的,然后我们可以以根目录为起点往下去做相关的读取

比如这样:

image-20221212163938680

我们就会把hosts文件下载下来了

image-20221212163952024

这个其实就是后端对我们传入进去的文件名对应的文件进行读取的时候它的控制不够严格,就导致了恶意文件下载这么一个漏洞

我们来看一下后台源码:

image-20221212164332236 image-20221212164433577

这里最根本的原因就是它对前端传进来的文件没有做任何判断。它不会对这个文件判断是不是它目录下的就对它进行读取。当前端传进来一个文件名,它应该对这个文件名进行校验,判断这个文件名是否在被下载的文件范围内,不在就告诉文件不存在,在的话就下载,这样才不会有问题。

防范措施
  1. 对传入的文件名进行严格的过滤和限定;
### Pikachu靶场文件上传功能实现与漏洞利用 #### 文件上传漏洞概述 文件上传漏洞是指攻击者能够通过应用程序的文件上传功能,向服务器上传恶意文件并执行的操作。这种漏洞可能允许攻击者控制目标系统的部分或全部功能[^2]。 #### 文件上传漏洞绕过方式 常见的文件上传漏洞绕过方法包括但限于以下几种: - **前端限制绕过**:许多应用会在客户端验证文件类型,但这可以通过修改请求头轻松绕过。 - **文件扩展名绕过**:即使服务器设置了黑名单机制,也可以尝试使用双扩展名或其他变种形式(如`shell.php.jpg`)来绕过检测。 - **ASHX上传绕过**:某些情况下可以利用`.ashx`处理程序的特点绕过常规检查。 - **特殊文件名绕过**:例如使用`.`开头的隐藏文件或者带有空格的文件名称。 - **00截断绕过**:在早期版本中,一些PHP配置可能会因为字符串截断而导致安全问题。 - **HTAccess解析漏洞**:如果Apache未正确配置,则可能导致非预期的脚本解释行为。 - **MIME类型绕过**:尽管服务端进行了Content-Type校验,但仍可能存在伪造的情况。 - **解析漏洞绕过**:Web容器对于同一种文件类型的解析规则存在差异,可被用来实施攻击[^3]。 #### 文件上传漏洞防御措施 为了有效防止此类漏洞的发生,可以从以下几个方面着手加强防护: - **隔离存储区**:将用户提交的数据存放在独立于网站根目录之外的位置,从而避免直接访问的可能性。 - **采用白名单策略**:仅允许特定种类的安全文件格式进入系统内部。 - **设定可执行权限**:即便有非法文件混入也无权被执行。 - **深入审查路径参数**:确保没有任何危险字符存在于最终保存位置之中。 - **运用双重检验手段**:既依赖内置工具又开发额外逻辑层面对数据真实性予以确认。 - **强制更改原始名字**:随机生成新的唯一标识符代替原有命名方案以防注入风险。 - **压缩重建图像资源**:通过对图形类素材二次加工降低潜在威胁等级。 - **细致审核文档结构**:借助专门库函数读取元信息判断其合法性[^4]. #### Pikachu靶场具体实践案例分析 以Pikachu项目为例,在第一阶段即client-side validation环节里,主要考察的是能否避开简单的HTML表单约束完成初步渗透;而到了后续更复杂的server-side checks部分则涉及到了mime-type verification以及image dimension analysis等内容[^5]: ```php // servercheck.php 示例代码片段展示如何做基本 mime type check. if ($_FILES["file"]["type"] != "application/pdf") { echo 'Error: Only PDF files are allowed!'; } else { move_uploaded_file($_FILES['file']['tmp_name'], '/uploads/' . $_FILES['file']['name']); } ``` 上述例子简单演示了一个基于文件 MIME 类型判定的过程,然而实际操作过程中还需要考虑更多边界情况以免留下隐患。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

游子无寒衣

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

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

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

打赏作者

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

抵扣说明:

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

余额充值