什么是文件包含攻击?

已发表: 2023-03-31

任何工具都可以用于好意或坏意,文件包含也不例外。 文件包含是一种编程方法,可以更轻松地在整个站点中维护代码和扩展功能。 文件包含攻击滥用了 PHP 使用文件包含作为从许多单独文件中联合和执行代码以创建单个网页的有效方法的方式。 由于 PHP 是 WordPress 使用的一种语言,因此当适当的安全措施被破坏、不完整或缺失时,WordPress 和其他 PHP 应用程序很容易出现文件包含漏洞。

在这份文件包含攻击的完整指南中,我们将探索黑客如何利用糟糕的用户输入清理和验证来注入恶意软件并发送错误指令以闯入 WordPress 网站。

您将了解 WordPress 文件包含攻击是如何发生的,以及您可以采取哪些措施来保护您的网站免受攻击。

文件包含攻击

什么是文件包含?

文件包含是一种开发技术,用于将许多文件包含到一个脚本或网页中以添加功能、重用设计模板或在多个页面上共享一段内容。

文件包含是绝对必要的。 开发人员通常将它们用于以下目的:

  • 包括网站所有页面通用的页眉和页脚文件,以确保设计和功能的一致性。
  • 包括用于整个网站或 Web 应用程序关键功能的脚本和库。
  • 包括包含应用程序设置的配置文件,例如数据库连接信息和 API 密钥。
  • 包括图片、视频、文字等内容,或网页上的其他内容。
  • 包括根据作为 URL 参数传递的用户输入生成动态内容的功能。 例如,用户可能会提交一个表单来生成特定的输出。

文件包含类型

使用文件包含技术,开发人员可以静态或动态地向网页添加文件和脚本。

使用静态文件包含,开发人员可以通过引用统一资源定位器 (URL) 或存储在本地(即同一服务器上)的文件路径,在多个页面上重复使用相同的文本或代码。 静态文件包含允许主题在许多网页上使用相同的页眉、页脚或导航菜单代码。

动态文件包含在运行时接受用户输入。 用户通过传递特定文件的路径来指示所需的输出。 通常,用户输入将作为 URL 或表单提交中的参数传递。 例如,用户可能会从语言的下拉选择列表中选择“英语”,这会将他们带到他们所在页面的英语版本,方法是像这样更改 URL: /page.php?language=english 。 如果有人用远程文件的 URL 替换“ english ”,如果没有适当的检查来防止这种情况,他们可能能够将 Web shell 作为后门和/或其他恶意软件注入目标站点。

文件包含是如何在 WordPress 中实现的?

所有用 PHP 编写的动态 Web 应用程序(如 WordPress)都可以安全地使用文件包含。 在用 PHP 编写的应用程序中,开发人员使用includerequire语句执行文件包含。 开发人员使用这两种语句将一个 PHP 脚本的内容插入到另一个 PHP 脚本中。 这发生在代码在服务器上执行之前。

如果您查看一些 WordPress 核心文件,就会发现其中许多都引用了其他核心脚本。 当它们一起加载时,它们会构建您网站的结构并生成访问者请求的各个网页。 主要的index.php引用wp-blog-header.php ,它加载了 WordPress 环境和主题模板——分别是wp-load.phptemplate-loader.php

WordPress 的 index.php 文件使用文件包含。

除了 WordPress 核心之外,插件和主题也使用文件包含来执行必要的任务。 然而,有数以万计的 WordPress 插件可用,但并非所有插件都像 WordPress 核心一样经过充分测试。

当开发人员没有正确保护文件时,文件包含会带来严重的安全风险。 如果您使用的代码不验证和清理用户输入,黑客就可以利用它。 他们可以使用它来安装恶意软件并窃取敏感信息——可能是您或您的客户的信息!

什么是文件包含攻击?

可能有两种类型的文件包含攻击:本地文件包含 (LFI) 或远程文件包含 (RFI)。

文件包含攻击是更广泛的注入攻击类别的一部分。 这包括 SQL 注入 (SQLi)、跨站点脚本 (XSS) 和命令包含攻击。 黑客可以利用输入漏洞进行其他类型的攻击,例如缓冲区溢出攻击。

本地和远程文件包含攻击

依赖动态文件包含来启用某些功能的网站和 Web 应用程序可能会受到远程文件包含攻击和本地文件包含攻击。

本地文件包含 (LFI)

本地文件包含攻击可能会注入与目标网站或 Web 应用程序位于同一服务器上的文件。 LFI 攻击通常可以访问通常受限的文件。 在 LFI 攻击中,包含的文件必须已经存在于目标本地应用程序服务器上。 在 LFI 攻击中,不良行为者可以读取重要文件、访问更敏感的信息或运行任意命令。

本地文件包含攻击还可以允许某人访问目标网站之外的敏感数据。 这包括服务器配置文件,例如/etc/passwd或另一个网站的配置文件,例如wp-config.php 。 然而,重要的是要注意,目标文件需要对非特权用户是可读的——例如,Linux 系统上的/etc/passwd文件由 root 拥有,但其文件权限设置为 644,所有其他系统用户可以查看。

为了在文件系统中导航,攻击者采用目录遍历,这是一种通过操纵目录路径遍历序列(例如../../../来访问当前工作目录之外的文件的技术。

远程文件包含 (RFI)

远程文件包含攻击的目标是调用另一台服务器上托管的文件的网站和应用程序。 通过利用远程文件包含,攻击者可以利用托管在别处的恶意代码。 目标服务器上肯定存在漏洞,但攻击者会利用它来执行托管在别处的恶意代码。

在远程文件包含攻击中,黑客利用 Web 应用程序中的“动态文件包含”命令。 黑客可以利用接受用户输入(例如 URL 和参数值)的 Web 应用程序,并在未经适当清理的情况下将它们传递给“文件包含”机制。 在这种类型的漏洞中,攻击者可以利用 Web 应用程序包含带有恶意脚本的远程文件。

为什么会发生 WordPress 文件包含攻击?

WordPress 网站占互联网的 43%,因此它们是攻击者的一个大目标。 我们的 2022 年 WordPress 漏洞年度报告显示,去年发现的所有 WordPress 漏洞中有超过 90% 存在于插件和主题中。 通常,我们每周至少会在 20 到 50 个插件中看到一个新的安全漏洞。

最近,安全研究人员在流行的 OceanWP 主题中发现了一个文件包含漏洞。 OceanWP 拥有超过 50 万活跃用户。 (我们在每周的 WordPress 漏洞报告中报告了这一点。)尽管 OceanWP 迅速修补了漏洞,但黑客有时间利用它,而数百万 WordPress 网站仍在使用过时的代码。

每周三将每周 WordPress 漏洞报告发送到您的收件箱。
现在订阅

如何检测 WordPress 文件包含攻击

与可以显着降低您的网站速度的拒绝服务攻击或将人们从您的网站转移到欺诈性资源的恶意重定向不同,文件包含攻击很难检测到。 这样做的原因是简单的。 黑客利用文件包含作为上传恶意软件并进行进一步攻击的切入点。 文件包含是导致更明显损坏的安静路径。 因此,当黑客将恶意代码注入网站或访问敏感信息时,您很可能几乎不会注意到它。

这给我们带来了一个重要的结论。 网站安全应该从缩小攻击面并加强攻击面开始。 这将有助于防止黑客利用注入攻击所源自的输入漏洞,例如文件包含攻击、SQL 和命令注入以及跨站点脚本 (XSS)。

如何防御WordPress文件包含攻击?

随着针对 WordPress 的网络攻击越来越多,WordPress 网站安全比以往任何时候都更加重要。 防御 WordPress 文件包含攻击需要多方面的方法来限制利用输入漏洞和任意代码执行的可能性。 如果您结合采用主动和被动安全措施,就可以做到这一点。

以下是保护您的网站免受文件包含攻击的三大 WordPress 安全建议。

保持所有软件更新

保持所有软件更新(包括 WordPress 核心、主题、插件和扩展)对于减少站点的攻击面至关重要。 由于每天都会出现新的漏洞,不要让黑客有机会利用它们。 安装安全补丁并在可用时尽快进行更新。

养成自己定期更新或激活自动更新的习惯,以确保您的网站永远不会运行任何易受攻击的代码。 iThemes Security Pro 可以为您处理 WordPress 核心、插件和主题更新。

iThemes Security Pro 会自动扫描您的网站正在使用的软件的新版本。 其版本管理系统可确保您在所有安全补丁和更新可用时立即安装。 最重要的是,如果您在服务器基础架构中运行任何过时的软件,iThemes 也会提醒您。 例如,如果您使用的 PHP 版本已过生命周期终止日期或易受攻击的 MySQL 服务器,iThemes Pro 会警告您。

如果您有多个 WordPress 网站在您的控制之下,iThemes Sync Pro 为您提供了一个单一的界面来管理它们。 Sync 还提供高级正常运行时间监控和 SEO 反馈。

在 PHP 中禁用远程文件包含

如果在 PHP 环境中启用了allow_url_fopen选项,则网站可以从外部 URL 引用远程文件。 这会增加远程文件包含攻击的风险。 禁用allow_url_fopen有效地消除了某人运行从远程位置加载到您的 WordPress 网站的恶意代码的可能性。

您可以在 PHP 全局配置中禁用allow_url_fopen ,或者在为单个 Web 文件夹创建的本地.user.iniphp.ini文件中将allow_url_fopen设置为0 。 您可以通过使用phpinfo()函数创建一个简单的 PHP 信息页面来检查您的 PHP 环境中该选项是否被禁用,如下所示。

您可以通过在 PHP 环境设置中禁用 allow_furl_open 来阻止文件包含攻击。

实施 WordPress 安全标头

内容安全策略 (CSP) 和 Set-Cookie 等 HTTP 响应标头可以为您的 WordPress 网站添加一层防御文件包含和其他注入攻击。

WordPress 安全标头可以减少或阻止远程文件包含和跨站点脚本 (XSS) 攻击的载体,方法是列出可信来源、脚本和其他可加载的内容。 所有其他来源将被拒绝。 最重要的是,HTTP 响应标头可以帮助您增加针对跨站点请求伪造 (CSRF) 和点击劫持的保护。

使用 iThemes Security Pro 保护您的 WordPress 网站免受注入攻击

与 SQL 和命令注入一起,文件包含攻击成为针对 WordPress 网站安全性的最常见攻击媒介。 尽管 WordPress 证明了高水平的应用程序安全性,但高度自定义的站点与糟糕的安全实践相结合可能会使 WordPress 网站暴露于利用输入漏洞的注入攻击。

每天,在不断增长的 WordPress 插件和主题中都会发现新的漏洞。 虽然它们通常会快速修补,但缺乏及时更新和对旧软件的依赖会使您的 WordPress 网站很容易成为黑客的目标。 今天,网站安全比以往任何时候都更加重要。 越来越多的网络攻击意味着,如果不采取主动措施保护自己的网站,即使是最警惕的网站所有者也可能成为黑客的受害者。

iThemes Security Pro 是一款功能强大的 WordPress 安全解决方案,可让您采用最佳的 WordPress 安全实践来保护您的网站免受最复杂的网络攻击。 凭借高级文件完整性监控、漏洞扫描和自动攻击缓解功能,如果您正在寻找一种有效且可靠的方式来保护您的 WordPress 网站,iThemes Security Pro 将是您的绝佳选择。