The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Уязвимость php-fpm, позволяющая удалённо выполнить код на се..., opennews (??), 24-Окт-19, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


41. "Уязвимость php-fpm, позволяющая удалённо выполнить код на се..."  +/
Сообщение от хотел спросить (?), 25-Окт-19, 00:44 
There must be a PATH_INFO variable assignment via statement fastcgi_param PATH_INFO $fastcgi_path_info;. At first, we thought it is always present in the fastcgi_params file, but it's not true.

CentOS 7

если я правильно помню, то это дефолтовый конфиг
проверьте свои дистры на всякий


fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;


PATH_INFO там нет... и это радует

Ответить | Правка | Наверх | Cообщить модератору

59. "Уязвимость php-fpm, позволяющая удалённо выполнить код на се..."  –1 +/
Сообщение от Ilya Indigo (ok), 25-Окт-19, 09:57 
А с чего ей там вообще быть?
PATH_INFO - это костыль для определения SCRIPT_FILENAME, на каких-то неведомых серверах с неведомой конфигурацией. Сама по себе она никому и не нужна.
Ответить | Правка | Наверх | Cообщить модератору

83. "Уязвимость php-fpm, позволяющая удалённо выполнить код на се..."  +/
Сообщение от OpenEcho (?), 25-Окт-19, 22:09 
> PATH_INFO - это костыль для определения SCRIPT_FILENAME, на каких-то неведомых серверах

Чиво?????

SCRIPT_FILENAME => The absolute pathname of the currently executing script.

> с неведомой конфигурацией. Сама по себе она никому и не нужна.

Приехали....

PATH_INFO => Contains any client-provided pathname information trailing the actual script filename but preceding the query string, if available.

А если по человечески, то PATH_INFO используется (и не только в PHP) для передачи параметров в GET методе. Все что будет после реального, физического файла, можно на стороне сервера получить в виде path и распарсить, при этом можно еще опционально задействовать стандартные GET параметры передаваемые после "?"

Простой пример: http://domain.tld/script.php/param1/param2/param3

PATH_INFO в этом случае: /param1/param2/param3
Красиво и без rewrite-тов переаданные параметры

Один из самых модных сейчас фреймворков - laravel использует PATH_INFO в реквест классе

До засилия упрощенной симфонии ака ларавель, был еще один, очень популярный (в принципе и сейчас живой, т.к. до сих пор - один из самых быстрых MVC фраймворков и не отягёщенный зависимостями composer-а) фрейворк под названием CodeIgniter, так в нем на сколько помню передача параметров в контроллер осуществлялась как раз таки тоже через PATH_INFO

Так что PATH_INFO - это не для "неведомых серверов с неведомой конфигурацией", а широко применяемая технология...

Ответить | Правка | Наверх | Cообщить модератору

94. "Уязвимость php-fpm, позволяющая удалённо выполнить код на се..."  +1 +/
Сообщение от Ilya Indigo (ok), 28-Окт-19, 00:02 
> А если по человечески, то PATH_INFO используется (и не только в PHP)
> для передачи параметров в GET методе. Все что будет после реального,
> физического файла, можно на стороне сервера получить в виде path и
> распарсить, при этом можно еще опционально задействовать стандартные GET параметры передаваемые
> после "?"

Тут я извиняюсь, недопонимал какой именно это костыль и как именно с ним извращаются.

> Простой пример: http://domain.tld/script.php/param1/param2/param3
> PATH_INFO в этом случае: /param1/param2/param3
> Красиво и без rewrite-тов переаданные параметры

Это не красиво - это уродливо и костыльно!
script.php всё равно нужно указывать, при этом возможно ему передавать GET-параметры, но теперь то что должно быть сзади - стоит спереди... слов нет.

Вот как должен выглядеть этот пример пример ЧПУ https://domain.tld/param1/param2/param3.html
1 С точки зрения пользователя это html - файл и он и не должен подозревать что это не так, тем более знать что именно вызывается на сервере.
2 /param1/param2/param3.html Вот это всё $_SERVER['REQUEST_URI'], который передаётся как есть nginx-ом без всяких регулярок и костылей, а потом элементарно распаривается в PHP без регулярок и при желании, добавляется в $_GET массив.


error_page 404 /en/error;
location = /index.php
{
    return 404;
}
location ^~ /.
{
    return 404;
}
location /
{
    try_files $uri @php;
}
location @php
{
    fastcgi_pass unix:/run/php-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    include fastcgi_params;
}

Этот метод ЧПУ не требует никаких костылей в виде PATH_INFO, cgi.fix_pathinfo и fastcgi_split_path_info ^(.+?\.php)(/.*)$; Который добавляет ненужную регулярку на сервер, как раз в духе mod_rewrite.

> Один из самых модных сейчас фреймворков - laravel использует PATH_INFO в реквест классе...
> Так что PATH_INFO - это не для "неведомых серверов с неведомой конфигурацией",
> а широко применяемая технология...

Благодарю что Вы меня проинформировали, не знал что на столько всё плохо.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру