Попытка понять локальный файл Включение команды 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 есть некоторая информация об этом, например, Джон Карти написал, как вы можете внедрить некоторый код, используя свой собственный веб-сайт, но это не объясняет мой случай. https://www.php.net/manual/en/function.include.php

Когда я написал следующую строку в свой собственный php-сервер apache2 laravel:

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

Затем я получил содержимое etc/passwd на своей странице, но написав

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

или

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

ничего не делать. Что мне не хватает?

В результате команда include:

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

включает только '../../../etc/passwd'

@ miken32 Следующая лучшая запись на китайском языке: D blog.vulnspy.com/2018/06/21/phpMyAdmin-4-8-x-LFI-Эксплойт Конечно, эта строка взята из URL-адреса, но почему она не должна работать так же, когда жестко закодирована в php?

Paku 01.05.2019 16:57

Перечитав это, попробуйте include('sql.php?../../../../etc/passwd');. sql.php? отображается как каталог, поэтому вам нужен дополнительный ../, чтобы подняться.

AbraCadaver 01.05.2019 16:57

@AdraCadaver Количество (3) ../ правильно для моей установки. И предлагаемый include('sql.php?../../../../etc/passwd'); тоже не работал

Paku 01.05.2019 16:58

@AdraCadaver Вы абсолютно правы! 'включить('sql.php?/../../../../etc/passwd');' работал! Мне нужен дополнительный /../, чтобы sql.php? считать каталогом.

Paku 01.05.2019 17:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
202
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
include('sql.php?/../../../../etc/passwd');

работал! Мне нужен был дополнительный /../, чтобы sql.php? считался каталогом. «Магия» команды include заключается в том, что она позволяет вам войти в несуществующие каталоги, а затем выйти из них.

Другие вопросы по теме