任意文件下载漏洞

server/2024/11/18 18:28:14/

1.漏洞简介

任意文件下载漏洞是指攻击者能够通过操控请求参数,下载服务器上未经授权的文件。

攻击者可以利用该漏洞访问敏感文件,如配置文件、日志文件等,甚至可以下载包含恶意代码的文件。

这里再导入一个基础:

你要在网站下载一个东西通常为直链下载,这个是漏洞发现点

http://down.znds.com/getdownur1/down/1.php 

http://down.znds.com/getdownur1/?s=/down//1.php

http://down.znds.com/getdownur1/?s=L2Rvd24vMjAyMzA2MTMvMS5waHA 

通常直接访问到哪一集目录,或者直接导入一个参数写入路径进行下载。

一般看到以上的这种链接都可以尝试一手看看有没有文件下载漏洞。

I

2.漏洞产生原因

说白了就一句话:你没有对用户能读取的文件进行一个过滤。

这里就写一些简单的代码为例子:将代码放在服务器根目录,做成以下的文件

D:\phpstudy_pro\WWW\
    ├── file_reader.php
    └── files\
        ├── example.txt
        └── image.jpg

<?php
$file = $_GET['file'];$UploadDir = 'D:\\phpstudy_pro\\WWW\\files\\'; $path = $UploadDir . $file;if (file_exists($path)) {readfile($path);
} else {die("File not found.");
}
?>

localhost/file_reader.php?file=1.txt

毋庸置疑肯定是可以进行读取的,因为我上面写的代码没有对用户读取的文件进行过滤,需要在原代码的基础上加上一些三点过滤:

// 只允许文件名包含字母数字和允许的字符
if (!preg_match('/^[a-zA-Z0-9_\-\.]+$/', $file)) {
    die("Invalid file name.");
}

$path = realpath($UploadDir . $file);

if ($path === false || strpos($path, $UploadDir) !== 0) {
    die("File not found or access denied.");
}// 确保文件路径存在并且属于指定的目录

// 检查文件是否存在
if (file_exists($path)) {
    // 只允许读取特定类型的文件,例如图片和PDF
    $allowedExtensions = ['txt', 'jpg', 'jpeg', 'png', 'gif', 'pdf'];
    $extension = pathinfo($path, PATHINFO_EXTENSION); 

 (1).先是对文件名进行了检测,确保文件名只包含字母、数字、下划线、连字符和点(避免路径穿越和特殊字符)。

 (2). 而且还做了路径穿越防护,防止攻击者通过路径穿越访问不该访问的文件

( 3).最后是文件类型限制:

通过 pathinfo($path, PATHINFO_EXTENSION) 获取文件扩展名,并限制只能读取图片(如 JPG、PNG、GIF)和 PDF 文件,避免恶意脚本文件(如 .php)被下载。

 3.漏洞利用

进入pikachu靶场:

漏洞发现:

发现文件下载漏洞经典结尾:?filename=kb.png

经典传入参数filename=xx进行下载网站文件,可能存在文件下载漏洞。

在我的pikachu网站目录写入

直接更改结尾文件名

文件内容显现:

4.防护绕过进阶学习

有些网站会对../../../这些经典的符号进行绕过,所以可以进行编码的绕过。

1、URL编码绕过
点——%2e
斜线——%2f
反斜线——%5c
2、16位Unicode编码
点——%u002e
斜线——%u2215
反斜线——%u2216
3、双倍URL编码
点——%252e
斜线——%252f
反斜线——%255c
4.base64绕过

将文件名转成base64或者其他编码格式再去读取,比如:


http://127.0.0.1/file.php?filename=aW5kZXgucGhw      //index.php

5.文件名截断

在文件上传里有一个经典的绕过文件检测的姿势:%00截断

http://127.0.0.1/file.php?filename=../index.php%00.jpg

注意php版本不要太高,需求5.3以内

5.任意文件下载漏洞修复

1)对下载路径进行过滤,如下载前对传入的参数进行过滤,并且对下载文件类型进行检查,是否是允许下载的类型2)php.ini配置open_basedir限定文件访问范围3)正则严格判断用户输入参数的格式4)过滤.(点),使用户在url中不能回溯上级目录

 

文章内容参考:

WEB安全梳理-文件下载 - FreeBuf网络安全行业门户


http://www.ppmy.cn/server/142977.html

相关文章

【插件】多断言 插件pytest-assume

背景 assert 断言一旦失败&#xff0c;后续的断言不能被执行 有个插件&#xff0c;pytest-assume的插件&#xff0c;可以提供多断言的方式 安装 pip3 install pytest-assume用法 pytest.assume(表达式,f’提示message’) pytest.assume(表达式,f‘提示message’) pytest.ass…

蓝桥杯每日真题 - 第15天

题目&#xff1a;&#xff08;钟表&#xff09; 题目描述&#xff08;13届 C&C B组B题&#xff09; 解题思路&#xff1a; 理解钟表指针的运动&#xff1a; 秒针每分钟转一圈&#xff0c;即每秒转6度。 分针每小时转一圈&#xff0c;即每分钟转6度。 时针每12小时转一圈…

数据分析编程:SQL,Python or SPL?

Talk is cheap. Let’s show the code 1. 计算用户会话次数 用户行为数据表 useridaction_typeaction_timeU1059login2023-12-01 18:00:10U1092login2023-12-01 18:00:17U1069login2023-12-01 18:00:22……… 10 分钟没有任何动作或退出后 5 分钟没有登录则认为会话结束&am…

华为欧拉系统使用U盘制作引导安装华为欧拉操作系统

今天记录一下通过U盘来安装华为欧拉操作系统 华为欧拉操作系统是国产的一个类似于Centos的Linus系统 具体实现操作步骤&#xff1a; 先在官网下载欧拉系统镜像点击跳转到下载 准备好一个大于16g的U盘 &#xff0c;用于制作U盘启动 下载一个引导程序制作工具&#xff0c;我使用…

华为USG5500防火墙配置NAT

实验要求&#xff1a; 1.按照拓扑图部署网络环境&#xff0c;使用USG5500防火墙&#xff0c;将防火墙接口加入相应的区域&#xff0c;添加区域访问规则使内网trust区域可以访问DMZ区域的web服务器和untrust区域的web服务器。 2.在防火墙上配置easy-ip&#xff0c;使trust区域…

2023年MathorCup数学建模A题量子计算机在信用评分卡组合优化中的应用解题全过程文档加程序

2023年第十三届MathorCup高校数学建模挑战赛 A题 量子计算机在信用评分卡组合优化中的应用 原题再现&#xff1a; 在银行信用卡或相关的贷款等业务中&#xff0c;对客户授信之前&#xff0c;需要先通过各种审核规则对客户的信用等级进行评定&#xff0c;通过评定后的客户才能…

周末总结(2024/11/16)

工作 人际关系核心实践&#xff1a; 要学会随时回应别人的善意&#xff0c;执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己&#xff0c;抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内&#xff0c;职场社交不要放在5min以外 职场的人际关系在面对利…

IDEA优雅debug

目录 引言一、断点分类&#x1f384;1.1 行断点1.2 方法断点1.3 属性断点1.4 异常断点1.5 条件断点1.6 源断点1.7 多线程断点1.8 Stream断点 二、调试动作✨三、Debug高级技巧&#x1f389;3.1 watch3.2 设置变量3.3 异常抛出3.4 监控JVM堆大小3.5 数组过滤和筛选 引言 使用ID…