409 字
2 分钟
目录遍历

一:定义:#

目录遍历漏洞(Directory Traversal)是指用户通过构造特殊路径参数,访问服务器上未授权的文件或目录,如配置文件、源码、flag等

二:常见绕过方法#

  • 编码绕过
../ → %2e%2e/
../../ → ..%2f..%2f
..%c0%af
..%ef%bc%8f

多层编码:

%252e%252e%252f (双重编码)
  • 替代分隔符

  • Windows:..\

  • Linux:../

  • URL兼容写法:..\\、....//、..;/

  • 过滤绕过

  • 若过滤 ../,可用:

....// → ../
..%2f..%2f
..\/..\/
  • 若添加白名单后缀(如 .php):
?file=../../../../flag.txt%00
?file=../../../../flag.txt%00.php

三:练习#

1

提示图片加载存在问题,打开图片抓包

使用相对路径穿越

2

同样的题目抓包

使用绝对路径穿越

使用…//绕过

后端可能使用黑名单 s.replace(”../”,"") 使用双重../替换后变成../

4

双重 url 编码绕过

发现文件路径以指定的文件夹开头,不能直接使用/etc/passwd 读取

就以指定文件夹开头,依旧可以通过目录穿越到达指定路径

发现穿越不了,可能是后端检查了文件名后缀

使用%00 截断后缀名,在使用 c 库 时,c 会将 \0 当作字符串的结束符,从而导致后缀名没被读取

  • %00(URL编码) == NUL 字节 (0x00) == ‘\0’ / ‘\x00’(字符串转义)

  • 如果用户输入最终被传给以 NUL 结尾的 C 字符串 API,会在遇到 NUL 时被截断(截断后缀)。

  • 现代语言层面通常不以 NUL 截断,但若中间某个扩展/底层函数用 C 风格处理则可能受影响。

  • 防御:在任何路径处理前检测并拒绝 NUL(‘\x00’),完整解码并 canonicalize,使用白名单/映射。

目录遍历
https://lab404.cn/posts/directory-traversal/
作者
见山
发布于
2025-10-24
许可协议
CC BY-NC-SA 4.0