在当今复杂的网络环境中,Web安全问题日益严峻。作为网络安全中最常见但也最容易被忽视的漏洞之一,目录遍历漏洞(Directory Traversal),也被称为路径穿越漏洞(Path Traversal),正持续威胁着大量网站和服务器的安全。

本文将深入剖析目录遍历漏洞的原理、攻击方式、实际案例、绕过技巧以及全面的防御措施,帮助开发者、安全研究人员和企业有效识别并防范此类风险。
什么是目录遍历漏洞?
目录遍历漏洞是一种由于Web应用程序对用户输入的文件路径未进行严格验证和过滤,导致攻击者能够通过特殊字符(如 ../ 或 ..\)访问服务器上任意文件的安全漏洞。
简单来说,攻击者可以利用该漏洞“跳出”应用程序设定的安全目录,访问甚至读取系统中的敏感文件,例如:
/etc/passwd(Linux系统用户信息)/etc/shadow(Linux用户密码哈希)C:\Windows\system.ini(Windows系统配置文件)数据库配置文件(如
config.php、database.yml)应用源码或备份文件(如
.bak、.zip)
一旦这些敏感信息泄露,攻击者便可进一步实施提权、远程代码执行等高级攻击,最终完全控制服务器。
漏洞原理与成因
1. 基本原理
当Web应用允许用户通过URL参数指定要访问的文件时,若未对输入进行安全校验,便可能产生目录遍历漏洞。
例如,一个图片加载功能的URL如下:
后端代码可能直接拼接路径:
此时,攻击者只需构造恶意参数:
即可读取系统关键文件。
2. 漏洞成因
输入验证缺失:未对用户传入的文件路径进行合法性检查。
路径拼接不安全:直接将用户输入拼接到文件系统路径中。
过滤不彻底:仅简单替换
../而未考虑编码、双写等绕过方式。权限配置不当:Web服务进程拥有过高文件系统权限。
常见攻击方式与Payload
1. 基础Payload(Linux/Unix系统)
2. Windows系统Payload
3. URL编码绕过
当服务器过滤了 / 和 . 时,可使用URL编码:
| 字符 | 编码 |
|---|---|
. | %2e |
/ | %2f |
\ | %5c |
示例:
4. 双写绕过(Double Encoding)
若服务器仅替换一次 ../,可使用双写:
服务器替换后变为 ../../etc/passwd,仍可触发漏洞。
5. 空字节截断(Null Byte Injection)
某些旧版PHP环境中,可使用 %00 截断后续字符串:
⚠️ 注:PHP 5.3.4+ 已默认禁用此特性。
高级利用场景:Zip Slip(压缩包路径穿越)
Zip Slip 是目录遍历的一种特殊形式,发生在文件上传并解压的场景中。
攻击流程:
攻击者创建一个包含恶意路径的压缩包(如
../../../../etc/passwd)。上传该压缩包,服务器自动解压。
解压时文件被写入系统关键目录,可能覆盖重要文件(如
.htaccess、web.xml)。
影响范围:
Java(Apache Commons Compress)
Python(zipfile)
Go、Node.js、Ruby 等主流语言均曾曝出相关漏洞。
防御建议:
解压前校验文件路径是否在目标目录内。
使用安全的解压库(如
java.nio.file.Files.createTempDirectory())。禁止压缩包中包含相对路径(
../)。
实战案例分析
案例1:Burp Suite Labs 靶场
靶场地址:https://portswigger.net/web-security/file-path-traversal/lab-simple
攻击步骤:
抓包发现图片请求参数
filename=image.jpg。修改为
filename=../../../../etc/passwd。成功读取系统用户信息,漏洞确认。
案例2:WebGoat 靶场(文件上传遍历)
场景:上传头像功能存在路径穿越。
攻击方式:
上传文件名设为
../../../malicious.jpg。文件被上传至Web根目录外,可能导致任意文件读取或RCE。
如何检测目录遍历漏洞?
1. 手工检测
在文件读取、下载、图片加载等参数中插入
../测试。尝试读取已知系统文件(如
/etc/passwd、C:\Windows\win.ini)。使用Burp Suite的Intruder模块进行字典爆破。
2. 自动化工具
Burp Suite Pro:Active Scan + Intruder
OWASP ZAP
DirBuster / Dirsearch:目录枚举
Nuclei:使用模板检测路径遍历
全面防御策略
1. 输入验证与白名单
2. 路径规范化与校验
使用系统函数规范化路径,并检查是否在允许范围内:
3. 最小权限原则
Web服务账户应使用低权限用户运行(如
www-data)。限制对系统关键目录的读写权限。
4. 使用安全框架
避免手动拼接文件路径。
使用框架内置的安全文件处理机制。
5. 安全审计与日志监控
定期扫描日志中的异常路径请求。
配置WAF(Web应用防火墙)拦截
../、%2e%2e等可疑字符。
目录遍历漏洞虽看似简单,但其危害不容小觑。从信息泄露到服务器沦陷,仅一步之遥。作为开发者,应始终坚持“不信任用户输入”的安全原则;作为安全人员,则需熟练掌握各类绕过技巧,全面排查潜在风险。
关键防御口诀:
✅ 输入过滤 + 路径校验
✅ 白名单机制 + 最小权限
✅ 安全编码 + 定期审计
只有将安全融入开发流程的每一个环节,才能真正构建坚不可摧的Web应用防线。





















