📜  路径遍历攻击与防范

📅  最后修改于: 2021-10-22 03:23:10             🧑  作者: Mango

路径遍历攻击允许攻击者访问他们不应该访问的目录,如配置文件或任何其他可能包含非公开服务器数据的文件/目录。

使用路径遍历攻击(也称为目录遍历),攻击者可以访问存储在 Web 根文件夹(通常是 /var/www/)之外的数据。通过操作引用带有“点-点-斜线 (../)”序列及其变体的文件的变量或使用绝对文件路径,可以访问存储在文件系统上的任意文件和目录,包括应用程序源代码或配置和关键系统文件。

假设我们有一个网站正在运行

http://www.mywebsite.com.

我们还假设 Web 服务器容易受到路径遍历攻击。这允许攻击者使用特殊字符序列,如 ../,在 Unix 目录中指向其父目录,遍历目录链并访问/var/www之外的文件或这样的配置文件

PHP代码中易受攻击的应用程序的典型示例是:


使用相同的 ../ 技术,攻击者可以逃出包含 PDF 的目录并访问系统上他们想要的任何内容。

http://www.mywebsite.com/?template= ../../../../../../../../../etc/passwd

预防
防止目录遍历的可能算法是:

  • 给予目录和文件适当的权限。 PHP文件通常在 Linux 上以 www-data 用户身份运行。我们不应允许该用户访问系统文件。但这并不能阻止该用户访问特定于 Web 应用程序的配置文件。
  • 在继续下面的内容之前,处理不会导致文件请求的 URI 请求,例如,在用户代码中执行挂钩。
  • 当要对文件/目录进行 URI 请求时,构建文件/目录的完整路径(如果存在),并规范化所有字符(例如,%20 转换为空格)。
  • 假定“文档根目录”完全限定、规范化的路径是已知的,并且该字符串的长度为 N。假定该目录外的任何文件都无法提供。
  • 确保所请求文件的完全限定路径的前 N 个字符与“文档根目录”完全相同。
  • 使用硬编码的预定义文件扩展名作为路径后缀不会将攻击范围限制为该文件扩展名的文件。

来源
https://en.wikipedia.org/wiki/Directory_traversal_attack
http://projects.webappsec.org/w/page/13246952/Path%20Traversal
https://www.owasp.org/index. PHP/Path_Traversal