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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了试图理解php命令的本地文件包含:include'sql.php?/../../ etc / passwd'相关的知识,希望对你有一定的参考价值。

我正在研究一个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'

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

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

以上是关于试图理解php命令的本地文件包含:include'sql.php?/../../ etc / passwd'的主要内容,如果未能解决你的问题,请参考以下文章

转载PHP本地文件包含和远程文件包含漏洞

文件包含漏洞

试图理解 WordPress 插件样板

php文件包含

文件包含学习笔记

Php 漏洞代码