Web渗透:任意文件下载

任意文件下载漏洞(Arbitrary File Download Vulnerability)是一种常见的Web安全漏洞,它允许攻击者通过修改输入参数,从服务器下载任意文件,而不仅仅是预期的文件;通常这种漏洞出现在处理用户输入的地方,尤其是文件下载功能中。

漏洞出现场景

1.文件共享和管理系统:在企业内部的文件共享系统中,用户可能需要下载各类文件。如果系统没有妥善地处理文件路径和名称,攻击者可以通过修改请求参数来下载不应公开的文件。

2.内容管理系统(CMS):许多CMS平台允许管理员和用户上传和下载文件。如果CMS没有对下载请求进行严格的验证和限制,攻击者可能利用该漏洞访问敏感文件。

3.电子商务网站:在电子商务网站中,用户可能需要下载发票、收据或其他交易相关的文件。如果这些下载请求没有正确的权限控制和路径验证,攻击者可以利用该漏洞下载其他用户的私人信息或系统文件。

4.在线教育平台:在线教育平台上,用户通常可以下载课程材料、作业和考试文件。如果文件下载功能存在漏洞,攻击者可能会下载其他用户的私人信息或平台的敏感数据。

老规矩,我们通过pikachu靶场来演示,并阐述漏洞产生的原理和利用方式。

示例:

1.打开任意文件下载对应的页面,发现此时页面中有多张球星图片,此时点击对应的链接就能够将图片下载至本地。

2.此时我们通过F12进行检查,找到任意一个链接的标签:可以看到此时链接中含有对应的下载地址(只是不完整)。

此时我们将URL进行拼接就可以得到下载图片所使用的url;

http://127.0.0.1/pikachu/vul/unsafedownload/execdownload.php?filename=kb.png

在新页面中访问则下载一张图片:

这个时候我们可以进行测试,该下载的链接是否对用户下载的请求进行安全过滤,若这个时候我要下载pikachu靶场首页,也就是index.php这个文件:

http://127.0.0.1/pikachu/index.php

那么此时我们就可以构造下载的url:指定文件的相对路径

http://127.0.0.1/pikachu/vul/unsafedownload/execdownload.php?filename=../../../index.php

可以发现此时首页源码已经被下载下来,同理我们可以通过这种方式去下载其他php源码,在实际环境中若出现这种漏洞则可以读取系统中的文件(如Linux的/etc/passwd)或者想本例中的源码用作后续白盒测试代码审计。

同样的,这边我们还是来通过源码来分析一下该漏洞产生的原理:

$file_path="download/{$_GET['filename']}";
//用以解决中文不能显示出来的问题
$file_path=iconv("utf-8","gb2312",$file_path);
​
//首先要判断给定的文件存在与否
if(!file_exists($file_path)){
    skip("你要下载的文件不存在,请重新下载", 'unsafe_down.php');
    return ;
}
$fp=fopen($file_path,"rb");
$file_size=filesize($file_path);
//下载文件需要用到的头
ob_clean();//输出前一定要clean一下,否则图片打不开
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length:".$file_size);
Header("Content-Disposition: attachment; filename=".basename($file_path));
$buffer=1024;
$file_count=0;
//向浏览器返回数据
​
//循环读取文件流,然后返回到浏览器feof确认是否到EOF
while(!feof($fp) && $file_count<$file_size){
​
    $file_con=fread($fp,$buffer);
    $file_count+=$buffer;
​
    echo $file_con;
}
fclose($fp);

检查文件是否存在:使用file_exists函数检查指定路径的文件是否存在。如果文件不存在,调用skip函数(假设是自定义函数,用于跳转和显示错误消息),并终止脚本执行。

使用ob_clean清除输出缓冲区,以确保没有其他输出干扰文件下载。

设置Content-type头为application/octet-stream,表示下载的文件是二进制流。

设置Accept-Ranges头为bytes,表示支持断点续传。

设置Accept-Length头为文件大小。

Header("Content-Disposition: attachment; filename=".basename($file_path));设置Content-Disposition头,指示浏览器以附件形式下载文件,并指定下载的文件名。

循环读取文件并输出到浏览器

  • 使用feof函数检查文件指针是否到达文件末尾。

  • 使用fread函数按缓冲区大小读取文件内容,并增加文件计数器。

  • 使用echo函数输出读取的文件内容到浏览器。

可以看到当前程序对于客户端请求下载的文件并没有做过多的安全检查,仅仅检查了文件是否存在,而没有检查客户端要下载的文件是否在指定的文件夹中(是否为指定的文件范围)。

改进建议

为了增强安全性,可以做以下改进:

  • 严格验证和过滤输入:只允许预定义目录中的特定文件下载。

  • 防止路径遍历:移除路径操作符或使用安全的文件路径。

  • 权限控制:确保只有有权限的用户可以下载特定文件。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一款开源、免费、现代化风格的WPF UI控件库

前言 今天大姚给大家分享一款开源&#xff08;MIT License&#xff09;、免费、现代化风格的WPF UI控件库&#xff1a;ModernWpf。 项目介绍 ModernWpf是一个开源项目&#xff0c;它为 WPF 提供了一组现代化的控件和主题&#xff0c;使开发人员能够创建具有现代外观的桌面应…

优化 C# 和 .NET Core Web API 中的 LINQ 查询

LINQ&#xff08;语言集成查询&#xff09;是 C# 中的一项强大功能&#xff0c;允许开发人员以可读且简洁的方式查询和操作数据。但是&#xff0c;LINQ 的使用效率低下可能会导致性能瓶颈&#xff0c;尤其是在处理 .NET Core Web API 中的大型数据集时。优化 LINQ 查询对于维护…

Rust 程序设计语言学习——泛型、Trait和生命周期

每一种编程语言都有高效处理重复概念的工具。在 Rust 中其工具之一就是泛型。泛型是具体类型或其他属性的抽象替代。 Trait 定义了某个特定类型拥有可能与其他类型共享的功能。可以通过 Trait 以一种抽象的方式定义共同行为。可以使用 trait bounds 指定泛型是任何拥有特定行为…

数据可视化期末考试(logistic回归)

目录 1、Logistic回归 2、梯度上升算法 1、Logistic回归 假设现在有一些数据点&#xff0c;我们利用一条直线对这些点进行拟合(该线称为最佳拟合直线)&#xff0c;这个拟合过程就称作为回归&#xff0c;如下图所示&#xff1a; Logistic回归是分类方法&#xff0c;它利用的是…

用FFmpeg合并音频和视频

使用FFmpeg合并音频和视频是一个相对直接的过程。可以通过以下一些基本的步骤和命令示例完成这个任务&#xff1a; 安装FFmpeg&#xff1a;首先&#xff0c;确保你的系统中已经安装了FFmpeg。你可以从[FFmpeg官网](Download FFmpeg)下载并安装它。 准备素材&#xff1a;确保你…

压铸工艺介绍

1.压铸的主要特点 1.压铸是让有色金属熔融&#xff0c;并在加压的情况下让其流入模具中。由于使用模具&#xff0c;所以适合进行大量生产。不同于其他铸造方式&#xff0c;压铸需要加压&#xff0c;所以具有尺寸精度优秀的特点。此外&#xff0c;由于并非使用砂型而是采用模具…

如何给WPS、Word、PPT等办公三件套添加收费字体---方正仿宋GBK

1.先下载需要的字体。 下载字体的网站比较多&#xff0c;基本上都是免费的。随便在网上搜索一个就可以了&#xff0c;下面是下载的链接。 方正仿宋GBK字体免费下载和在线预览-字体天下 ​www.fonts.net.cn/font-31602268591.html 注意&#xff1a;切记不要商用&#xff0c;以免…

基于weixin小程序农场驿站系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;农场资讯管理&#xff0c;用户管理&#xff0c;卖家管理&#xff0c;用户分享管理&#xff0c;分享类型管理&#xff0c;商品信息管理&#xff0c;商品类型管理 开发系统&#xff1a;Windows 架构模式&…

高频科技亮相SEMl-e2024第六届深圳国际半导体展,以超纯工艺推动行业发展

6月26-28日,SEMl-e2024第六届深圳国际半导体展在深圳国际会展中心(宝安新馆)隆重举办。本次展会以【“芯”中有“算”智享未来】为主题,汇聚800多家展商,集中展示了集成电路、电子元器件、第三代半导体及产业链材料和设备为一体的半导体产业链,搭建了供需精准对接、探索行业新发…

【多线程】如何解决线程安全问题?

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. synchronized 关键字1.1 锁是什么1.2 如何加锁1.3 synchronized 修饰方法1) 修饰普通成员方法2) 修饰静态…

web前端——css(一篇教会网页制作)

目录 一、基本语法 1.行内样式表 2.内嵌样式表 3.外部样式表 二、选择器 1.标签选择器 2.类选择器 3.id 选择器 4.通配选择器 三、常见修饰 1.文本 2.背景 3.列表 4.伪类 5.透明度 6.块级、行级、行级块标签 7.div 和 span 四、盒子模型&#xff08;重点&…

Python学习打卡:day15

day15 笔记来源于&#xff1a;黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了 目录 day15110、数据分析案例步骤 1 —— 文件读取data_define_108.pyfile_define_108.py 111、数据分析案例步骤二——数据计算112、数据分析案例步骤…

基于LMS自适应滤波的窄带信号宽带噪声去除(MATLAB R2021B)

数十年的研究极大的发展了自适应滤波理论&#xff0c;自适应滤波理论已经成为信号处理领域研究的热点之一。从理论上讲&#xff0c;自适应滤波问题没有唯一解。为了得到自适应滤波器及其应用系统&#xff0c;可以根据不同的优化准则推导出许多不同的自适应理论。目前该理论主要…

【C语言】字符/字符串+内存函数

目录 Ⅰ、字符函数和字符串函数 1 .strlen 2.strcpy 3.strcat 4.strcmp 5.strncpy 6.strncat 7.strncmp 8.strstr 9.strtok 10.strerror 11.字符函数 12. 字符转换函数 Ⅱ、内存函数 1 .memcpy 2.memmove 3.memcmp 4.memset Ⅰ、字符函数和字符串函数 1 .strlen 函数原型&…

Java热门技术点总结:Lambda表达式与Stream API

第一部分&#xff1a;Lambda表达式 1. 简介 Lambda表达式是Java 8引入的一个非常重要的特性&#xff0c;它提供了一种简洁、灵活的函数式编程方式。Lambda表达式允许我们将函数作为参数传递&#xff0c;极大的简化了代码的编写。 2. 基本语法 Lambda表达式的基本语法如下&a…

聚类模型的算法性能评价

一、概述 作为机器学习领域的重要内容之一&#xff0c;聚类模型在许多方面能够发挥举足轻重的作用。所谓聚类&#xff0c;就是通过一定的技术方法将一堆数据样本依照其特性划分为不同的簇类&#xff0c;使得同一个簇内的样本有着更相近的属性。依不同的实现策略&#xff0c;聚类…

目标检测之YoloV1

一、预测阶段&#xff08;前向推断&#xff09; 在预测阶段Yolo就相当于一个黑箱子&#xff0c;输入的是448*448*3的图像&#xff0c;输出是7*7*30的张量&#xff0c;包含了所有预测框的坐标、置信度和类别 为什么是7*7*30呢&#xff1f; --将输入图像划分成s*s个grid cell&a…

stm32 No traget connected/debug识别不到串口的问题

关于stm32串口识别不到&#xff0c;第一步先确定是否线接错&#xff08;stlink与stm32接口对应&#xff09;&#xff0c;如果确认接线没有问题的话&#xff0c;可以使用以下方法&#xff0c;成功率较高。 首先将stlink的boot0置1&#xff0c;就是把跳线帽换到高电平这一侧&…

专业技术!最新氧化物异质结纳米制备技术

网盘 https://pan.baidu.com/s/1vjO2yLxm638YpnqDQmX7-g?pwd3at5 MOF衍生的B_A_B结构氧化物异质结及其制备方法和应用.pdf 二硫化钼-硫化镉纳米复合材料及其制备方法和应用.pdf 具有异质界面的耐辐照复合薄膜及其制备方法与应用.pdf 基于异质结双界面层纳米材料的复合介电薄膜…

基于单片机和LabVIEW 的远程矿井水位监控系统设计

摘要 &#xff1a; 针 对 现 有 矿 井 水 位 监 控 系 统 存 在 结 构 复 杂 和 不 能 远 程 监 控 的 问 题 &#xff0c; 设计了基于单片机和&#xff2c;&#xff41;&#xff42;&#xff36;&#xff29;&#xff25;&#xff37; 的远程矿井水位监控系统 &#xff0c; 详…