是否可以对此str_replace()进行转义以进行路径遍历?

时间:2019-02-11 12:45:11

标签: php replace path escaping file-get-contents

我正在测试我们的一个PHP Web应用程序中的安全性问题。
运行代码的系统至少需要PHP7.2才能运行。

现在,我在代码中找到了类似以下内容(对此问题进行了简化,但归结为此):

$file = $_GET['file'];

$path = "/some/directory/" . $file;

$path = str_replace(['../', '..'], '', $path);

echo file_get_contents($path);  

是否可以通过可以逃避/some/directory的方式来修改文件参数,以便在str_replace()之后的file_get_contents()调用看起来像:file_get_contents(/some/directory/../../etc/passwd)

编辑:
我无法更改代码执行的顺序。我只能在请求中定义$_GET['file']的值。
此外,我知道如何使其更安全,但出于研究目的,我打算打破它。

基本上,需要做的是以某种方式欺骗str_replace()并留下一些../

我用各种方法尝试了几个小时,但是-幸运的是,对于我们的应用程序-它无法正常工作。
你有什么想法?

您可以在此处随意修改代码:https://3v4l.org/3ehYA

0 个答案:

没有答案