任意文件下载漏洞

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网络安全行业门户

相关推荐
SmartRadio12 分钟前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信
开发语言·网络·智能手机·esp32·长距离wifi
JS_SWKJ27 分钟前
网闸与光闸深度解析:高安全隔离设备核心知识与选型
安全
AIwenIPgeolocation29 分钟前
出海应用合规与风控平衡术:可信ID的全球安全实践
人工智能·安全
_.Switch31 分钟前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
长安链开源社区32 分钟前
长安链2.3.8生产版本发布,安全、开放、灵活的企业级区块链底座
安全·区块链
金色光环2 小时前
FreeModbus释放底层的 TCP 监听端口
服务器·网络·tcp/ip
数智化精益手记局2 小时前
拆解物料管理erp系统的核心功能,看物料管理erp系统如何解决库存积压与缺料难题
大数据·网络·人工智能·安全·信息可视化·精益工程
带娃的IT创业者2 小时前
Bitwarden CLI 供应链攻击深度分析:当密码管理工具本身成为安全威胁
安全·npm·安全漏洞·cli·供应链攻击·bitwarden
企业架构师老王2 小时前
2026制造业安全生产隐患识别AI方案:从主流产品对比看企业级AI Agent的非侵入式落地路径
人工智能·安全·ai
国冶机电安装2 小时前
化工厂生产线设备安装:从工艺安全到系统联动的完整解析
安全