Нападот е возможен во nginx конфигурации во кои препраќањето до PHP-FPM се врши со одвојување на делови од URL-адресата користејќи „fastcgi_split_path_info“ и дефинирање на променливата на околината PATH_INFO, но без претходно да се провери постоењето на датотеката користејќи ја „try_files $fastcgi_script_name“ директива или „if (!-f $) document_root$fastcgi_script_name)“. Проблемот е исто така
локација ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Можете да го следите решавањето на проблемот во комплетите за дистрибуција на овие страници:
try_files $fastcgi_script_name =404;
Проблемот е предизвикан од грешка при манипулирање со покажувачите во датотека
Ако директивата fastcgi_split_path_info одредува поделба на патеката на скриптата користејќи регуларен израз чувствителен на нова линија (на пример, многу примери сугерираат користење на „^(.+?\.php)(/.*)$“), тогаш напаѓачот може да обезбеди дека празната вредност е напишана на променливата на околината PATH_INFO. Во овој случај, понатаму по извршувањето
Со барање URL форматирана на одреден начин, напаѓачот може да постигне поместување на покажувачот path_info кон првиот бајт од структурата „_fcgi_data_seg“, а пишувањето нула на овој бајт ќе доведе до поместување на „char* pos“ покажувач на претходно лоцирана мемориска област. Следниот наречен FCGI_PUTENV ќе ги презапише податоците во оваа меморија со вредност што напаѓачот може да ја контролира. Наведената меморија ги складира и вредностите на другите променливи FastCGI, а со запишување на нивните податоци, напаѓачот може да создаде фиктивна променлива PHP_VALUE и да постигне извршување на нивниот код.
Извор: opennet.ru