服务器端漏洞篇之目录遍历专题
字数 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. 其他防护建议
- 在Web服务器配置中限制文件访问范围
- 使用chroot等机制限制应用程序的文件系统视图
- 保持中间件和应用程序的最新安全补丁
- 实施最小权限原则,限制Web服务器进程的访问权限
总结
目录遍历漏洞虽然原理简单,但危害严重,可能导致敏感信息泄露。开发人员应充分了解各种绕过技术,实施多层防御措施。安全测试人员在进行渗透测试时,应将目录遍历测试作为基础测试项,使用各种技术尝试绕过防护机制。
通过严格的文件路径验证、规范化处理和安全编码实践,可以有效防止目录遍历漏洞的发生。