根据我在PHP '/etc/passwd/‘或’etc/passwd/./中的理解,应该与'/etc/passwd‘一样对待
我使用的是PHP5.4,这似乎不是真的:
-r“包括(‘/etc/passwd’);
工作很好,但是
php -r "include( '/etc/passwd/‘);“警告:包含(/etc/passwd/):未能打开流:第1行命令行代码中没有这样的文件或目录,警告:包含():未能打开命令行代码’/etc/passwd/‘以便在第1行命令行代码中包含(include_path=’:‘)。
同样的情况也适用于:
php -r“包括(‘/etc/./passwd’);
行得通!
-r“包括(‘/etc/./passwd/’);警告:包括(/etc/./passwd/):未能打开流:在第1行命令行代码中没有这样的文件或目录警告:包含():未能打开/etc/./passwd/‘以便在第1行命令行代码中包含(包括_path=’:‘)
不管用!
有人能告诉我,如果我做错了什么,或者路径截断问题是固定的吗?
发布于 2014-05-28 02:24:29
"Realpath“发现于2008年8月12日在此承诺中被完全重做,不再容易受到路径截断攻击的影响。这些更改是在PHP5.3.0中发布的,因此没有比此更新的版本容易受到攻击(除非重新引入了bug,这似乎没有发生)。
顺便说一句,没有迹象表明有人曾将这一攻击通知PHP开发人员,也没有迹象表明该攻击的修复是故意的--实际上它似乎是修复另一个bug的副产品。
此外,当与NGINX和FastCGI一起使用时,PHP仍然容易受到类似的攻击的攻击,在这种情况下,PHP解释器将处理来自when服务器的请求,即使文件名最后有额外的内容。但是,允许这种攻击的行为是在NGINX和PHP中设计的,因此,防止攻击的唯一方法是使用以下五种解决方案之一。
https://security.stackexchange.com/questions/58696
复制相似问题