初探文件包含漏洞

目录

  • 1.什么是文件包含漏洞
  • 2.漏洞分类
  • 3.php中常见的文件包含函数
  • 4.文件包含漏洞的绕过方法
    • 4.1本地文件包含(LFI)绕过方法:
    • 4.2远程文件包含(RFI)绕过方法:
  • 5.对于文件包含漏洞的防御措施

1.什么是文件包含漏洞

文件包含漏洞是一种常见的web应用程序安全漏洞,它主要出现在使用服务器端脚本语言(如PHP、ASP等)编写的网页中。这个漏洞的核心在于,开发者在编写代码时,会使用诸如include()、require()这样的函数来导入或包含其他外部文件的代码以便重用。这些函数的目的本来是为了模块化和减少代码重复,但如果没有对用户可控的变量进行严格的过滤和检查,就可能被恶意利用。

2.漏洞分类

本地文件包含漏洞(LFI, Local File Inclusion): 如果攻击者可以控制被包含文件的路径参数,并且系统没有充分校验,攻击者就可以让服务器加载一个恶意选择的本地文件,比如敏感配置文件或日志文件,从而导致信息泄露。更严重的情况下,如果存在特殊的文件解析漏洞,攻击者甚至可能执行任意代码。

远程文件包含漏洞(RFI, Remote File Inclusion): 当服务器允许通过URL动态包含远程文件,并且相关的PHP配置选项(如allow_url_include和allow_url_fopen)开启时,攻击者可能通过构造特定的请求,使得服务器去下载并执行攻击者指定的远程服务器上的恶意代码,从而完全控制目标服务器。

3.php中常见的文件包含函数

include()
该函数用于将指定文件的内容合并到当前脚本中。如果包含的文件找不到或发生错误,脚本会继续执行,并且会产生一个警告级别的错误信息。

require()
require与include功能类似,也是将外部文件的内容插入到当前脚本执行流中。但当所包含文件不存在或出错时,require会导致一个致命错误(E_COMPILE_ERROR),脚本会立即停止执行。

include_once()
此函数和include非常相似,不同之处在于它会在包含文件之前检查该文件是否已经被包含过。如果文件已经包含了,则不会再次包含,从而避免了重复定义函数、类或者变量等问题。

require_once()
这个函数也类似于require,但在包含文件时具有“一次”的特性,即如果目标文件在这次脚本执行过程中已包含过,则不会再次包含它。同样,由于是require系列的函数,因此在遇到包含失败的情况时,脚本也会停止执行并抛出致命错误。

4.文件包含漏洞的绕过方法

4.1本地文件包含(LFI)绕过方法:

1.目录遍历:
利用.(当前目录)、…(上级目录)以及路径遍历字符序列(如 /…/…/)尝试访问超出预期目录之外的文件。

2.编码绕过:
URL编码、双URL编码、十六进制编码、八进制编码等不同类型的编码方式试图绕过过滤器。
使用 %00 等特殊字符截断字符串,利用C语言风格的字符串终止符提前结束文件名。

3.利用解析漏洞:
PHP魔术引号(Magic Quotes)关闭时,通过在路径中注入单引号、双引号等特殊字符,尝试引起代码注入。
PHP版本相关的解析漏洞,例如PHP的NULL字节截断漏洞。

4.利用系统特性:
Linux下利用绝对路径、符号链接或者伪协议(如 file:///etc/passwd)。
Windows环境下使用反斜杠 \ 或 UNC 路径等方式尝试访问系统上的其他位置。

4.2远程文件包含(RFI)绕过方法:

1.利用不严谨的验证机制:
如果目标程序对URL包含没有严格检查,直接提供一个可以控制的远程URL以加载恶意文件。

2.协议欺骗:
利用伪协议,如数据流伪协议(如 data://)嵌入并执行代码,或利用其他可能存在的未过滤的协议(如 file://, php://input 等)。

3.HTTP头部注入:
在某些情况下,如果应用基于HTTP头进行文件包含,攻击者可能会篡改请求头中的内容来触发包含。

4.后缀名检测绕过:
尝试修改上传或包含文件的后缀名,使之看起来像是合法文件,同时利用服务器的文件解析漏洞执行脚本代码。

4.二次注入:
如果应用程序将用户输入存储到数据库或其他持久化层,然后在后续处理中包含这些存储的数据作为文件名,攻击者可以通过注入恶意payload并在后期触发包含执行。

5.时间延迟攻击:
利用一些环境下的文件包含函数对不存在文件的响应速度差异,通过盲注方式猜测系统文件结构。

6. 利用文件解析漏洞:
不同脚本语言在处理包含文件时可能存在解析逻辑上的缺陷。例如PHP中,如果一个文件以 <?php 开头且以 ?> 结束,那么文件会被当作PHP代码执行。攻击者可能会尝试构造特殊格式的文件名,使得服务器在包含文件时误将其内容当作代码执行。

7. 利用环境变量或配置不当:
如果应用程序错误地将用户输入用于设置环境变量,而这些变量又被用来构建包含文件的路径,攻击者就可以通过注入恶意值来控制文件包含。

8. PHP伪协议利用:
PHP提供了一些伪协议,如 data://, php://filter/ 等,攻击者可以利用它们实现数据流或者过滤器功能来执行恶意代码。例如,通过 php://filter/read=convert.base64-encode/resource=index.php 来读取并base64编码指定本地文件的内容。

9. 利用CGI和FastCGI参数传递机制:
在某些情况下,攻击者可能会通过修改HTTP请求中的特定参数(如PATH_INFO、SCRIPT_FILENAME等),影响Web服务器如何解析和执行PHP脚本,从而触发文件包含漏洞。

5.对于文件包含漏洞的防御措施

1.严格的输入验证:
对所有传入到文件包含函数(如PHP中的include(), require(), include_once(), require_once()等)的参数进行严格的校验。
只允许包含指定目录下的文件,并确保这些目录不包含敏感数据或可执行脚本。
使用白名单机制,仅允许包含预先定义好的、安全的文件名或路径。

2.过滤特殊字符和路径遍历序列:
阻止恶意用户通过使用相对路径(…)、绝对路径或者URL编码、十六进制编码等方式尝试访问非预期的文件或目录。
过滤掉可能导致目录遍历的字符序列,比如\、/、.等。

3.禁用危险配置:
在PHP环境中,关闭allow_url_include配置选项以防止远程文件包含(RFI)漏洞的发生。
根据实际需求调整其他相关配置,如限制allow_url_fopen,避免从不受信任的源加载文件。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot3整合Elasticsearch8.x之全面保姆级教程

整合ES 环境准备 安装配置ES&#xff1a;https://blog.csdn.net/qq_50864152/article/details/136724528安装配置Kibana&#xff1a;https://blog.csdn.net/qq_50864152/article/details/136727707新建项目&#xff1a;新建名为web的SpringBoot3项目 elasticsearch-java 公…

Hive实现查询左表有右表没有的记录

工作中遇到这样一个场景&#xff0c;业务逻辑是&#xff1a;如果一个主体发生了某一问题&#xff0c;就不再统计该主体的其他问题。 思路&#xff1a;首先想到的方法就是not in方法&#xff0c;但是Hive并不不支持。那么使用left join对两个表进行连接&#xff0c;右表主键为空…

uploads-labs靶场(1-10关)

一、搭建环境: 下载upload-labs源代码 下载链接&#xff1a;https://codeload.github.com/c0ny1/upload-labs/zip/refs/heads/master 将压缩包解压后的文件名改为upload-labs&#xff0c;然后放入phpstudy\www目录下 二、关卡通关: 1、pass-01&#xff08;前端绕过&#xf…

B. Array Fix

思路&#xff1a;我们倒着看&#xff0c;首先判断以下当前元素有没有被操作过&#xff0c;被操作过的话&#xff0c;那么需要改为操作后的数&#xff0c;然后跟当前数的前一个数进行比较&#xff0c;如果a[i] < a[i - 1]的话&#xff0c;那么需要将a[i - 1]拆分&#xff0c;…

【SpringBoot】头条新闻项目实现CRUD登录注册

文章目录 一、头条案例介绍二、技术栈介绍三、前端搭建四、基于SpringBoot搭建项目基础架构4.1 数据库脚本执行4.2 搭建SprintBoot工程4.2.1 导入依赖:4.2.2 编写配置4.2.3 工具类准备 4.3 MybatisX逆向工程 五、后台功能开发5.1 用户模块开发5.1.1 jwt 和 token 介绍5.1.2 jwt…

huawei services HK华为云服务

huaweiserviceshk是一种云计算服务&#xff0c;为华为云服务用户提供了多种服务&#xff0c;包括云服务器、数据库、存储、网络等&#xff0c;用户可以根据自己的需求选择不同的服务并支付相应的费用 如何付费呢&#xff0c;这里可以使用441112&#xff0c;点击获取 卡片信息在…

Makefile+OpenOCD开发STM32

准备工作 平台&#xff1a;Windows11&#xff08;Linux&#xff0c;MAC同理&#xff09; 编译链&#xff08;arm-none-eabi-gcc&#xff09;&#xff1a;Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer 下载对应平台工具链并添加到环境变量&#xff0c…

springboot+poi-tl根据模板导出word(含动态表格和图片),并将导出的文档压缩zip导出

springbootpoi-tl根据模板导出word&#xff08;含动态表格和图片&#xff09; 官网&#xff1a;http://deepoove.com/poi-tl/ 参考网站&#xff1a;https://blog.csdn.net/M625387195/article/details/124855854 pom导入的maven依赖 <dependency><groupId>com.dee…

hcie数通和云计算选哪个好?

1. 基础知识与技能要求 数通技术是网络技术的核心&#xff0c;它涉及到网络协议、路由交换、网络安全等多个方面。如果你是一名网络工程师或开发者&#xff0c;想要在数通领域有所建树&#xff0c;你需要具备扎实的基础知识和丰富的实战经验。 云计算则更注重于虚拟化、存储、网…

基于openCV实现的单目相机行人和减速带检测

概述 在计算机视觉项目中&#xff0c;相机标定是一项至关重要的任务&#xff0c;因为它可以校正相机内部参数&#xff0c;消除因镜头畸变等因素导致的图像失真&#xff0c;从而提高后续图像处理和分析的精度。在这个项目中&#xff0c;相机标定的核心功能集成在名为calibratio…

redis的安装与string类型

1. redis的安装 1.1 升级gcc版本 因为centos7.x的gcc版本还是4.8.5&#xff0c;而编译指定的版本是需要5.3以上。 环境部署与安装scl源 yum install gcc cmake -y --部署安装环境 yum install centos-release-scl scl-utils-build -y --安装scl源 安装gcc新版本 yum -y ins…

还原wps纯粹的编辑功能

1.关闭稻壳模板&#xff1a; 1.1. 启动wps(注意不要乱击稻壳模板&#xff0c;点了就找不到右键菜单了) 1.2. 在稻壳模板选项卡右击&#xff1a;选不再默认展示 2.关闭托盘中wps云盘图标&#xff1a;右击云盘图标/同步与设置&#xff1a; 2.1.关闭云文档同步 2.2.窗口选桌面应用…

Vue2+ElementUI表单、Form组件的封装

Vue2ElementUI表单、Form组件的封装 &#xff1a;引言 在 Vue2 项目中&#xff0c;ElementUI 的 el-form 组件是常用的表单组件。它提供了丰富的功能和样式&#xff0c;可以满足各种需求。但是&#xff0c;在实际开发中&#xff0c;我们经常会遇到一些重复性的需求&#xff0c…

16.WEB渗透测试--Kali Linux(四)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;15.WEB渗透测试--Kali Linux&#xff08;三&#xff09;-CSDN博客 1.crunch简介与使用 C…

分布式CAP理论

CAP理论&#xff1a;一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和分区容错性&#xff08;Partition tolerance&#xff09;。是Eric Brewer在2000年提出的&#xff0c;用于描述分布式系统基本性质的定理。这三个性质在分布式系统…

SQLZoo:SELECT from WORLD Tutorial/zh

name continent area population gdp Afghanistan Asia 652230 25500100 20343000000 Albania Europe 28748 2831741 12960000000 … name:國家名稱 continent:洲份 area:面積 population:人口 gdp:國內生產總值 Country Profile 在這教程中&#xff0c;我們會使用SELECT語句&…

python pytest 最简单的接口自动化测试框架

最近由于工作的原因&#xff0c;需要开发一个接口自动化测试框架&#xff0c;使用pytest框架、数据驱动&#xff0c;并展示直观的测试报告。 具体的开发过程如下&#xff1a; 安装必要的库&#xff1a; pytest&#xff1a;用于编写和运行测试用例。requests&#xff1a;用于发…

FPGA静态时序分析与约束(一)、理解亚稳态

系列文章目录 FPGA静态时序分析与约束&#xff08;二&#xff09;、时序分析 FPGA静态时序分析与约束&#xff08;三&#xff09;、读懂vivado时序报告 文章目录 系列文章目录前言一、概述一、何为亚稳态&#xff1f;二、图解亚稳态三、什么时候亚稳态会导致系统失效&#xff…

Jsch实践(三):如何使用Jsch的ChannelShell类,在远程服务器上执行脚本命令?

如何使用Jsch的ChannelShell类&#xff0c;在远程服务器上执行脚本命令 要使用JSch的ChannelShell类在远程服务器上执行脚本命令&#xff0c;你需要创建一个shell通道&#xff0c;然后向这个通道的输入流发送命令&#xff0c;并读取输出流来获取命令的响应。下面是一个示例代码…

k8s部署hadoop

&#xff08;作者&#xff1a;陈玓玏&#xff09; 配置和模板参考helm仓库&#xff1a;https://artifacthub.io/packages/helm/apache-hadoop-helm/hadoop 先通过以下命令生成yaml文件&#xff1a; helm template hadoop pfisterer-hadoop/hadoop > hadoop.yaml用kube…