Sulmi është i mundur në konfigurimet nginx në të cilat përcjellja në PHP-FPM kryhet duke ndarë pjesë të URL-së duke përdorur "fastcgi_split_path_info" dhe duke përcaktuar variablin e mjedisit PATH_INFO, por pa kontrolluar më parë ekzistencën e skedarit duke përdorur "try_files $fastcgi_script_name" direktiva ose "if (!-f $)" konstrukton document_root$fastcgi_script_name)". Problemi është gjithashtu
vendndodhja ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Ju mund të gjurmoni zgjidhjen e problemit në kompletet e shpërndarjes në këto faqe:
try_files $fastcgi_script_name =404;
Problemi shkaktohet nga një gabim gjatë manipulimit të treguesve në një skedar
Nëse direktiva fastcgi_split_path_info specifikon ndarjen e shtegut të skriptit duke përdorur një shprehje të rregullt të ndjeshme ndaj linjës së re (për shembull, shumë shembuj sugjerojnë përdorimin e "^(.+?\.php)(/.*)$"), atëherë një sulmues mund të sigurojë që një vlera e zbrazët është shkruar në ndryshoren e mjedisit PATH_INFO. Në këtë rast, më tej gjatë ekzekutimit
Duke kërkuar një URL të formatuar në një mënyrë të caktuar, një sulmues mund të arrijë një zhvendosje të treguesit path_info në bajtin e parë të strukturës "_fcgi_data_seg", dhe shkrimi i një zero në këtë bajt do të çojë në lëvizjen e "char* pos". treguesi në një zonë memorie të vendosur më parë. Tjetri i quajtur FCGI_PUTENV do të mbishkruajë të dhënat në këtë memorie me një vlerë që sulmuesi mund të kontrollojë. Memoria e specifikuar ruan gjithashtu vlerat e ndryshoreve të tjera FastCGI, dhe duke shkruar të dhënat e tyre, një sulmues mund të krijojë një ndryshore fiktive PHP_VALUE dhe të arrijë ekzekutimin e kodit të tyre.
Burimi: opennet.ru