目录遍历漏洞的攻击手法全解析:从原理到实战绕过技巧

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

目录遍历漏洞的攻击手法全解析:从原理到实战绕过技巧

本文将深入剖析目录遍历漏洞的核心机制、常见攻击方式以及高级绕过技术,结合真实案例与防御建议,帮助你全面掌握这一关键安全知识点。


什么是目录遍历漏洞?

目录遍历漏洞(又称路径遍历漏洞),是指Web应用程序未对用户输入的文件路径进行严格校验,导致攻击者可以通过特殊字符(如 ../..\)向上级目录跳转,访问本应受限的系统文件。

核心原理: 假设一个网站通过URL参数加载图片:

https://example.com/image?filename=logo.png

后端代码可能如下处理:

$file = $_GET['filename'];
readfile("/var/www/images/" . $file);

如果用户传入 filename=../../../../etc/passwd,最终拼接的路径变为:

/var/www/images/../../../../etc/passwd → /etc/passwd

此时,攻击者成功读取了Linux系统的用户账户信息文件。


常见的攻击手法与Payload

1. 基础路径跳转(../ 或 ..\

这是最直接的攻击方式,适用于未做任何过滤的系统。

  • Linux/Unix系统常用目标:

    • /etc/passwd:用户账户信息

    • /etc/shadow:用户密码哈希(需权限)

    • /proc/self/environ:环境变量

    • ~/.ssh/id_rsa:SSH私钥

  • Windows系统常用目标:

    • C:\Windows\win.ini

    • C:\Windows\System32\drivers\etc\hosts

    • ..\..\..\Windows\repair\SAM:系统账户数据库

示例请求:

GET /download?file=../../../../etc/passwd HTTP/1.1
Host: vulnerable.com

2. URL编码绕过

当服务器对 ../ 进行关键词过滤时,攻击者可使用URL编码进行绕过。

字符编码形式
.%2e
/%2f
\%5c

绕过Payload示例:

?filename=%2e%2e%2f%2e%2e%2fetc%2fpasswd

或双重编码:

?filename=%252e%252e%252fetc%252fpasswd

3. 双写绕过(Double Encoding / Double Slash)

某些系统会将 ../ 替换为空字符串。攻击者可使用双写技巧绕过:

  • 双写Payload: ....//....//etc/passwd

  • 原理: 系统替换 ../ 后,剩余的 ..// 仍可解析为上级目录。

4. 空字节截断(Null Byte Injection)

当服务器强制要求文件后缀(如 .jpg)时,攻击者可利用空字节 %00 截断后续内容。

Payload示例:

?filename=../../../etc/passwd%00.jpg

在旧版PHP中,%00 会被视为字符串结束符,实际读取的是 /etc/passwd

5. 伪协议利用(PHP Filter)

即使无法直接读取文件,也可通过PHP的伪协议进行编码读取:

php://filter/convert.base64-encode/resource=../../config.php

该方式可绕过文件扩展名限制,返回Base64编码的源码。


实战场景分析

场景1:图片加载功能中的遍历攻击

某网站通过 ?filename=1.jpg 加载图片。攻击者发现可构造:

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

若返回内容为用户列表,则确认存在漏洞。

检测方法:

curl "http://site.com/image?filename=../../../../etc/passwd"

场景2:文件上传中的目录遍历

在文件上传功能中,攻击者可修改上传路径:

Content-Disposition: form-data; name="file"; filename="../../webshell.php"

若服务器未校验路径,Webshell可能被上传至Web根目录,导致远程代码执行。

场景3:ZIP压缩包路径遍历

攻击者创建包含 ../../../.htaccess 的ZIP文件上传。解压后覆盖服务器配置文件,可能实现权限提升或反向代理劫持。


自动化检测工具推荐

手动测试效率低,推荐使用以下工具进行自动化扫描:

工具特点
Burp Suite使用Intruder模块配合字典爆破,支持自定义Payload
OWASP ZAP开源Web漏洞扫描器,内置路径遍历检测规则
ffuf命令行工具,支持快速模糊测试
DotDotPwn专用路径遍历扫描器,支持FTP、HTTP等多种协议

常用字典示例:

../../../etc/passwd
..%2f..%2f..%2fetc%2fpasswd
....//....//etc/passwd
%C0%AE%C0%AE%2F

如何有效防御目录遍历漏洞?

  1. 输入白名单校验
    限制用户只能访问预定义的文件列表,避免动态拼接路径。

  2. 路径规范化与校验
    使用系统API(如Java的getCanonicalPath())对路径进行标准化,检查是否超出允许目录。

  3. 禁止特殊字符
    过滤 ../..\%00 等危险字符,或使用正则表达式严格匹配文件名。

  4. 最小权限原则
    Web服务器运行账户应具备最小权限,避免读取系统敏感文件。

  5. 使用安全框架
    采用成熟的安全框架(如Spring Security)处理文件访问逻辑,减少自定义代码风险。


目录遍历漏洞虽看似简单,但其危害不容小觑。从读取配置文件到上传Webshell,攻击者可借此实现层层渗透。作为开发者、测试人员或安全爱好者,掌握其攻击手法与防御策略,是构建安全Web应用的基础。

安全无小事,细节定成败。 定期进行安全审计,使用自动化工具扫描,结合人工验证,才能有效抵御此类威胁。

发表评论

评论列表

还没有评论,快来说点什么吧~