网络安全中的目录遍历指什么?
在一个标准的web服务器目录中,根文件夹是当用户在地址栏上输入一个网站的域名时可以访问的公共访问文件夹。根目录包含站点的索引文件以及到系统中使用的所有其他文件和目录的路径。这些文件只能被服务器端代码或web应用程序本身访问。
攻击者可以读取易受攻击的应用程序中的这些文件和目录,以访问密码文件、应用程序数据、源代码和操作系统文件等信息。此类攻击通常利用目录遍历漏洞,称为目录/路径遍历或目录爬升攻击。
什么是路径遍历漏洞?
目录遍历漏洞,也称为文件路径遍历漏洞,允许攻击者读取Web应用服务器上的任意文件。这种暴露被认为是现代开发框架中最关键的应用程序安全风险之一,它允许未经授权访问的威胁参与者通过更改请求中的文件路径名来利用受限文件并在服务器上执行错误代码。
任何无法验证来自浏览器的数据输入的服务器软件都容易受到目录漏洞的影响。一旦可以访问根目录,黑客就依靠猜测或暴露的目录树来确定敏感服务器文件的名称和位置。攻击者还可以读写服务器软件使用的任意文件,从而进行恶意操作,例如:
- 访问敏感文件,例如凭据和源代码文件
- 通过任意代码执行操作应用程序数据和功能
- 冒充特权用户(例如管理员)以获得他们的访问权限
在没有适当的输入验证的情况下,基于路径遍历漏洞的攻击通常很容易策划,因为它只需要 HTTP 请求和服务器文件处理的基本知识。
防止目录遍历攻击的方法
访问控制列表 (ACLs)和用户输入验证构成了抵御目录遍历攻击的第一道防线。
静态应用程序安全测试和动态应用程序安全测试技术有助于检查应用程序代码中目录列表中的漏洞。
此外,大多数编程语言和 Web 开发框架都包含有关保护关键系统文件和环境强化的指南。
以下部分讨论常见开发框架的目录遍历安全修复技术。
Java中的路径遍历漏洞修复
开发人员可以通过安全列出所有公众可以访问的可接受输入和可能路径来防止路径遍历。Java中安全列出路径的典型代码如下:
Python中的路径遍历漏洞修复
在 Python 应用程序中防止路径遍历的安全机制包括:
- 使用具有路径遍历预防机制的最新 Web 框架和软件版本来帮助检测替代字符表示
- 使用os.path.repath函数将实际文件名和请求路径更改为相对文件路径
C# 中的路径遍历漏洞修复
C# Web 应用程序的路径遍历漏洞修复包括:
- 使用GetInvalidFileNameChars()路径类方法识别指定请求参数中的无效字符
- 使用间接对象引用来映射资源位置并避免向文件系统 API 提供用户输入
- 将绝对文件路径检查与用户提供的路径名的清理和文件扩展名验证相结合
来源:https://crashtest-security.com/