在Web安全领域,目录遍历(Directory Traversal)漏洞是一种常见但极具破坏力的安全隐患。它允许攻击者通过构造恶意路径,突破应用程序的访问限制,读取服务器上的任意文件,甚至可能导致系统完全沦陷。作为数码科技领域的从业者或爱好者,了解目录遍历漏洞的攻击手法,不仅能提升自身安全意识,更能为开发和测试工作提供重要参考。

本文将深入剖析目录遍历漏洞的核心机制、常见攻击方式以及高级绕过技术,结合真实案例与防御建议,帮助你全面掌握这一关键安全知识点。
什么是目录遍历漏洞?
目录遍历漏洞(又称路径遍历漏洞),是指Web应用程序未对用户输入的文件路径进行严格校验,导致攻击者可以通过特殊字符(如 ../ 或 ..\)向上级目录跳转,访问本应受限的系统文件。
核心原理: 假设一个网站通过URL参数加载图片:
后端代码可能如下处理:
如果用户传入 filename=../../../../etc/passwd,最终拼接的路径变为:
此时,攻击者成功读取了Linux系统的用户账户信息文件。
常见的攻击手法与Payload
1. 基础路径跳转(../ 或 ..\)
这是最直接的攻击方式,适用于未做任何过滤的系统。
Linux/Unix系统常用目标:
/etc/passwd:用户账户信息/etc/shadow:用户密码哈希(需权限)/proc/self/environ:环境变量~/.ssh/id_rsa:SSH私钥Windows系统常用目标:
C:\Windows\win.iniC:\Windows\System32\drivers\etc\hosts..\..\..\Windows\repair\SAM:系统账户数据库
示例请求:
2. URL编码绕过
当服务器对 ../ 进行关键词过滤时,攻击者可使用URL编码进行绕过。
| 字符 | 编码形式 |
|---|---|
. | %2e |
/ | %2f |
\ | %5c |
绕过Payload示例:
或双重编码:
3. 双写绕过(Double Encoding / Double Slash)
某些系统会将 ../ 替换为空字符串。攻击者可使用双写技巧绕过:
双写Payload:
....//....//etc/passwd原理: 系统替换
../后,剩余的..//仍可解析为上级目录。
4. 空字节截断(Null Byte Injection)
当服务器强制要求文件后缀(如 .jpg)时,攻击者可利用空字节 %00 截断后续内容。
Payload示例:
在旧版PHP中,%00 会被视为字符串结束符,实际读取的是 /etc/passwd。
5. 伪协议利用(PHP Filter)
即使无法直接读取文件,也可通过PHP的伪协议进行编码读取:
该方式可绕过文件扩展名限制,返回Base64编码的源码。
实战场景分析
场景1:图片加载功能中的遍历攻击
某网站通过 ?filename=1.jpg 加载图片。攻击者发现可构造:
若返回内容为用户列表,则确认存在漏洞。
检测方法:
场景2:文件上传中的目录遍历
在文件上传功能中,攻击者可修改上传路径:
若服务器未校验路径,Webshell可能被上传至Web根目录,导致远程代码执行。
场景3:ZIP压缩包路径遍历
攻击者创建包含 ../../../.htaccess 的ZIP文件上传。解压后覆盖服务器配置文件,可能实现权限提升或反向代理劫持。
自动化检测工具推荐
手动测试效率低,推荐使用以下工具进行自动化扫描:
| 工具 | 特点 |
|---|---|
| Burp Suite | 使用Intruder模块配合字典爆破,支持自定义Payload |
| OWASP ZAP | 开源Web漏洞扫描器,内置路径遍历检测规则 |
| ffuf | 命令行工具,支持快速模糊测试 |
| DotDotPwn | 专用路径遍历扫描器,支持FTP、HTTP等多种协议 |
常用字典示例:
如何有效防御目录遍历漏洞?
输入白名单校验
限制用户只能访问预定义的文件列表,避免动态拼接路径。路径规范化与校验
使用系统API(如Java的getCanonicalPath())对路径进行标准化,检查是否超出允许目录。禁止特殊字符
过滤../、..\、%00等危险字符,或使用正则表达式严格匹配文件名。最小权限原则
Web服务器运行账户应具备最小权限,避免读取系统敏感文件。使用安全框架
采用成熟的安全框架(如Spring Security)处理文件访问逻辑,减少自定义代码风险。
目录遍历漏洞虽看似简单,但其危害不容小觑。从读取配置文件到上传Webshell,攻击者可借此实现层层渗透。作为开发者、测试人员或安全爱好者,掌握其攻击手法与防御策略,是构建安全Web应用的基础。
安全无小事,细节定成败。 定期进行安全审计,使用自动化工具扫描,结合人工验证,才能有效抵御此类威胁。





















