本文来自于『代码审计知识星球』2016年11月帖子
https://t.zsxq.com/3rvfia2
前情提要,有同学提到如下特性:
说到file_exists,我就想到一个更有意思的问题:
这个问题在很多真实场景下都遇到过,大家也展开了讨论。
当file_exists对/tmp/dont_exists/../../etc/passwd这样的文件名进行判断时,会返回true还是false?
答案如下:
在Windows下,遇到不存在的目录,只需要向上跳转,跳转到已存在的目录下,file_exists就可以返回true;而在Linux下,在遇到第一个不存在的目录时,file_exists就会返回false。
这个特性导致很多畸形文件名导致的漏洞在Linux下无法被利用,很可惜。
当然,也有小伙伴提到了一些对这个特性的深入研究:
分享出来:
https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git/tree/Documentation/filesystems/path-lookup.txt
https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file
点击下方“阅读原文”查看这个原始帖子☺