Попытка понять включение локальных файлов команды php: include 'sql.php? /../../ etc / passwd' - PullRequest
1 голос
/ 01 мая 2019

Я изучал уязвимость в 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:

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

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

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

или

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

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

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

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

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

1 Ответ

0 голосов
/ 01 мая 2019
include('sql.php?/../../../../etc/passwd');

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

...