服务器端漏洞篇之目录遍历专题
字数 942 2025-08-10 16:34:31

目录遍历漏洞详解与防护指南

目录遍历漏洞概述

目录遍历(Directory Traversal)是一种利用应用程序对文件路径处理不当,从而访问预期目录之外文件的漏洞。攻击者通过构造特殊的文件路径,可以读取服务器上的敏感文件,如源码、配置文件、登录凭证等。

漏洞原理

当Web应用程序动态加载文件资源时,如果未对用户输入的文件名参数进行严格验证,攻击者可以通过注入路径遍历序列(如../)来访问任意文件。

示例场景


基线目录为/var/www/images/,则图片的绝对路径为/var/www/images/218.png

攻击者可以构造:

/loadImage?filename=../../../etc/passwd

最终路径变为/etc/passwd,读取系统密码文件。

目录遍历漏洞利用技术

1. 基本利用方法

  • Linux系统:使用../返回上级目录
  • Windows系统:使用..\返回上级目录

2. 常见绕过技术

2.1 绝对路径绕过

当应用程序仅过滤../时,直接使用绝对路径:

/loadImage?filename=/etc/passwd

2.2 双写绕过

当应用程序仅清除一次../时:

/loadImage?filename=....//....//....//etc/passwd

清除一次后变为../../../etc/passwd

2.3 二次URL编码绕过

当应用程序过滤斜杠时:

  • /进行URL编码:%2f
  • 二次编码:%252f(第一次解码为%2f,第二次解码为/

示例:

/loadImage?filename=..%252f..%252f..%252fetc/passwd

2.4 起始路径+相对路径结合

当应用程序检查路径以特定字符串开头时:

/loadImage?filename=/var/www/images/../../../etc/passwd

2.5 空字节截断

在旧版中间件中,使用%00截断后缀检查:

/loadImage?filename=../../../etc/passwd%00.png

防护措施

1. 输入验证

  • 白名单验证:只允许特定的文件名或扩展名
  • 规范化路径:在处理前将路径规范化

2. 安全编码示例(Java)

File file = new File(BASE_DIRECTORY, userInput);
if (file.getCanonicalPath().startsWith(BASE_DIRECTORY)) {
    // 处理文件
}

3. 其他防护建议

  1. 在Web服务器配置中限制文件访问范围
  2. 使用chroot等机制限制应用程序的文件系统视图
  3. 保持中间件和应用程序的最新安全补丁
  4. 实施最小权限原则,限制Web服务器进程的访问权限

总结

目录遍历漏洞虽然原理简单,但危害严重,可能导致敏感信息泄露。开发人员应充分了解各种绕过技术,实施多层防御措施。安全测试人员在进行渗透测试时,应将目录遍历测试作为基础测试项,使用各种技术尝试绕过防护机制。

通过严格的文件路径验证、规范化处理和安全编码实践,可以有效防止目录遍历漏洞的发生。

目录遍历漏洞详解与防护指南 目录遍历漏洞概述 目录遍历(Directory Traversal)是一种利用应用程序对文件路径处理不当,从而访问预期目录之外文件的漏洞。攻击者通过构造特殊的文件路径,可以读取服务器上的敏感文件,如源码、配置文件、登录凭证等。 漏洞原理 当Web应用程序动态加载文件资源时,如果未对用户输入的文件名参数进行严格验证,攻击者可以通过注入路径遍历序列(如 ../ )来访问任意文件。 示例场景 : 基线目录为 /var/www/images/ ,则图片的绝对路径为 /var/www/images/218.png 攻击者可以构造: 最终路径变为 /etc/passwd ,读取系统密码文件。 目录遍历漏洞利用技术 1. 基本利用方法 Linux系统 :使用 ../ 返回上级目录 Windows系统 :使用 ..\ 返回上级目录 2. 常见绕过技术 2.1 绝对路径绕过 当应用程序仅过滤 ../ 时,直接使用绝对路径: 2.2 双写绕过 当应用程序仅清除一次 ../ 时: 清除一次后变为 ../../../etc/passwd 2.3 二次URL编码绕过 当应用程序过滤斜杠时: 对 / 进行URL编码: %2f 二次编码: %252f (第一次解码为 %2f ,第二次解码为 / ) 示例: 2.4 起始路径+相对路径结合 当应用程序检查路径以特定字符串开头时: 2.5 空字节截断 在旧版中间件中,使用 %00 截断后缀检查: 防护措施 1. 输入验证 白名单验证 :只允许特定的文件名或扩展名 规范化路径 :在处理前将路径规范化 2. 安全编码示例(Java) 3. 其他防护建议 在Web服务器配置中限制文件访问范围 使用chroot等机制限制应用程序的文件系统视图 保持中间件和应用程序的最新安全补丁 实施最小权限原则,限制Web服务器进程的访问权限 总结 目录遍历漏洞虽然原理简单,但危害严重,可能导致敏感信息泄露。开发人员应充分了解各种绕过技术,实施多层防御措施。安全测试人员在进行渗透测试时,应将目录遍历测试作为基础测试项,使用各种技术尝试绕过防护机制。 通过严格的文件路径验证、规范化处理和安全编码实践,可以有效防止目录遍历漏洞的发生。