文件包含与下载漏洞

devtools/2025/3/16 14:13:21/

一、漏洞概述

1. 定义  

  • 文件包含:通过动态变量加载外部文件作为代码执行,常见于PHP的`include()``require()`等函数。  
  • 文件下载:通过程序接口直接获取服务器文件内容,若未校验文件路径,可导致敏感文件泄露。

2. 危害  

  • 代码执行:恶意文件被包含后直接运行(如WebShell)。  
  • 敏感信息泄露:配置文件、数据库凭证等被下载。

二、文件包含分类

 1. 本地包含

无限制包含  

  • 直接指定本地文件路径,无任何过滤  
 #案例:  php// upload.php$filename = $_GET'file';include($filename);
  • 访问:http://example.com/upload.php?file=1.txt(1.txt含PHP代码) 

有限制包含  

  • 通过黑名单/白名单过滤文件名,需绕过机制。  
  • 绕过方式:  
  •        00截断:利用`%00`截断文件名(需`magic_quotes_gpc`关闭)。  
httphttp://example.com/upload2.php?filename=1.txt%00
  • 路径长度截断:利用Windows(255字符)或Linux(4096字符)路径限制。  
  • 文件名混淆:添加多余后缀(如`1.txt.php`)或特殊符号(如`1.txt`)。

2. 远程包含

  • 原理:通过`allow_url_include`配置加载远程文件,危害性更高。  
  • 绕过方式:  
  •       文件名伪装:强制服务器解析非预期后缀(如`1.txt.html`改为`1.txt`)。  
  •       协议绕过:使用`data://``php://`等伪协议传输恶意内容。

三、常见脚本协议

PHP支持多种伪协议,用于灵活读取/执行数据
 协议功能示例 
file://直接访问本地文件系统file:///etc/passwd
php://filter读取并过滤文件内容(如Base64编码)

php://filter/read=convert.base64encode/

resource=upload.phpurce=upload.php

php://input读取POST请求原始数据,可执行POST中的PHP代码php://inputPOST_DATA=<?php phpinfo();?>
zip://读取ZIP压缩包内文件zip://file.zip%23shell.php
data://内联数据流,支持Base64编码data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
案例
  • 读取源码:  
httphttp://example.com/?file=php://filter/read=convert.base64-encode/resource=config.php
  • 执行POST代码:  
  httphttp://example.com/?file=php://input
  • POST数据:<?php system('whoami'); ?> 

四、防御策略

1. 输入验证  
  • 白名单过滤文件路径(如仅允许`/uploads/*.jpg`)。  
  • 禁用危险函数(如`eval()``system()`)。
2. 配置调整  
  • 禁用远程文件包含:`allow_url_include = Off`。  
  • 限制文件包含路径:`open_basedir`指定允许目录。
3. 文件处理安全  
  • 上传后重命名文件,避免保留原始扩展名。  
  • 对包含文件进行内容校验(如检测PHP标签)。

五、文件下载漏洞

  • 原理:未校验文件路径或后缀,允许下载任意文件。  
案例  
  1. Pikachu靶场:  
 httphttp://pikachu.com/download.php?file=../../../../etc/passwd
  2. Java反序列化漏洞:  
  • 下载`WEB-INF/web.xml`等敏感配置文件。

 修复建议  

  • 严格校验下载路径(如禁止`../`跳转)。  
  • 限制可下载文件类型(如仅允许`.pdf``.docx`)。

六、总结

  •          文件包含与下载漏洞的核心在于动态变量可控和路径过滤不足。防御需结合输入验证、配置加固及安全编码实践。实战中需关注协议特性(如`00截断``伪协议`)及绕过技巧。

注:实验环境搭建推荐使用Vulhub或本地靶场(如DVWA、Pikachu),所有操作应在授权范围内进行。


http://www.ppmy.cn/devtools/167580.html

相关文章

oracle 中创建 socket客户端 监听数据库变动,返回数据给服务端!!!

目录 socket客户端Java代码 函数触发器1、触发器2、 函数3、 java 代码1、socket 5-1 socket 服务端 socket客户端Java代码 函数触发器 &#xff08;当数据库数据变动是触发socket客户端代码&#xff0c;将信息发送到服务端&#xff09;应用场景 ---- 第三方往中间库导入数据&…

大模型AI多智能体系统(Multi-Agent Systems, MAS)技术介绍

一、多智能体系统的定义与核心概念 多智能体系统(MAS)是由多个具备自主决策能力的智能体(Agent)组成的分布式系统。每个智能体能够感知环境、执行动作,并通过协作或竞争实现个体或集体目标。其核心特征包括: 自主性:智能体无需外部指令即可独立决策(如MetaGPT中的角色…

Java中类和对象

类和对象 面向对象的认识类的定义和使用1 类的定义2 类的创建3 类的实例化 构造方法1 构造方法的概念2 构造方法的注意事项 this关键字 面向对象的认识 前言 何为面向对象何为面向过程呢&#xff1f;&#xff0c;C语言是最经典的面向过程的语言,但是C语言虽然可以解决一定的问…

设计模式之美

UML建模 统一建模语言&#xff08;UML&#xff09;是用来设计软件的可视化建模语言。它的语言特点是简单 统一 图形化 能表达软件设计中的动态与静态信息。 UML的分类 动态结构图&#xff1a; 类图 对象图 组件图 部署图 动态行为图&#xff1a; 状态图 活动图 时序图 协作…

20250315在windows10下开热点步骤

20250315在windows10下开热点步骤 2025/3/15 16:05 百度&#xff1a;win10 开热点 DESKTOP-2D4GDGB 4175 13572468 win10怎么打开移动热点 播报文章 原创|浏览&#xff1a;3402|更新&#xff1a;2023-07-20 13:42 win10怎么打开移动热点1win10怎么打开移动热点2win10怎么打开移…

Certbot实现SSL免费证书自动续签(CentOS 7 + nginx/apache)

在 CentOS 上&#xff0c;你可以使用 Let’s Encrypt 提供的 Certbot 工具来申请和自动续约免费的 SSL 证书。 1. 安装 Certbot CentOS 7 安装 EPEL 和 Certbot yum install -y epel-release yum install -y certbot python3-certbot-nginx如果使用的是 Apache&#xff1a; …

【PyCharm2024】一些好用的小功能

目录 一、全局查找及替换关键字 方法一&#xff1a; 方法二&#xff1a; 二、调整字体大小 三、调整Terminal的字体大小 四、改变行注释的斜体以及颜色 一、全局查找及替换关键字 编写程序时&#xff0c;通常想要在所有文件中查找或者替换某个词。 方法一&#xff1a; …

使用Fluent-bit将容器标准输入和输出的日志发送到Kafka

什么是fluent-bit&#xff1f; Fluent Bit 是一款开源的轻量级日志处理器与转发器&#xff0c;专为嵌入式系统、容器化环境及分布式架构设计。其核心功能包括日志收集、过滤、聚合和传输&#xff0c;支持多种输入源&#xff08;如文件、系统日志、HTTP接口&#xff09;和输出目…