试图理解php命令的本地文件包含:include'sql.php?/../../ etc / passwd'

问题描述 投票:1回答:1

我正在研究一个phpMyAdmin安全漏洞(CVE-2018-12613),它的最佳写作并没有解释一个非常关键的技术细节。

它只是说:“index.php运行包括'sql.php?/../../ etc / passwd',并且PHP有这个魔法将路径转换为../etc/passwd,而不检查目录sql .php?是否存在。“

任何人都可以帮我理解这个吗? https://medium.com/@happyholic1203/phpmyadmin-4-8-0-4-8-1-remote-code-execution-257bcc146f8e

php手册中有一些关于此的信息,例如John Carty写了如何使用您自己的网站注入一些代码,但这并不能解释我的情况。 https://www.php.net/manual/en/function.include.php

当我将以下行写入我自己的apache2 laravel php服务器时:

include('../../../etc/passwd');

然后我在我的页面上获得了etc / passwd的内容,但是写了

include('sql.php?../../../etc/passwd');

要么

include('index.php?../../../etc/passwd');

没做什么。我错过了什么?

结果是include命令:

include 'sql.php?/../../etc/passwd'

只包括'../../../etc/passwd'

php security include code-injection inclusion
1个回答
0
投票
include('sql.php?/../../../../etc/passwd');

成功了!我需要一个额外的/../,以便将sql.php?视为目录。 include命令的“神奇之处”在于它允许你进入不存在的目录,然后从它们中走出来。

© www.soinside.com 2019 - 2024. All rights reserved.