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 'sql.php?/../../etc/passwd'

仅包括 '../../../etc/passwd'

4

1 回答 1

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

工作!我需要一个额外的/../,以便sql.php?被视为一个目录。include 命令的“魔力”在于它允许您进入不存在的目录,然后从中退出。

于 2019-05-01T15:31:14.937 回答