Ataka galima naudojant nginx konfigūracijas, kuriose PHP-FPM persiuntimas vykdomas padalijant URL dalis naudojant "fastcgi_split_path_info" ir apibrėžiant PATH_INFO aplinkos kintamąjį, bet prieš tai nepatikrinus, ar yra failas su "try_files $fastcgi_script_name" direktyva arba „if (!-f $ document_root$fastcgi_script_name)“. problema, įskaitant
vieta ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Galite sekti distribucijos trikčių šalinimą šiuose puslapiuose:
try_files $fastcgi_script_name =404;
Problemą sukėlė klaida manipuliuojant failo rodyklėmis
Jei direktyva fastcgi_split_path_info nurodo scenarijaus kelio padalijimą naudojant reguliariąją išraišką, kuri yra jautri naujos eilutės simbolio perdavimui (pavyzdžiui, daugelyje pavyzdžių siūloma naudoti „^(.+?\.php)(/. *)$"), tada užpuolikas gali įrašyti tuščią reikšmę į aplinkos kintamąjį PATH_INFO. Šiuo atveju toliau vykdymo eigoje
Prašydamas tam tikru būdu suformatuoto URL, užpuolikas gali perkelti „path_info“ žymeklį į pirmąjį „_fcgi_data_seg“ struktūros baitą, o įrašius nulį į šį baitą, žymeklis „char * pos“ bus perkeltas į anksčiau buvusią atminties sritį. Toliau iškviestas FCGI_PUTENV perrašys duomenis šioje atmintyje reikšme, kurią užpuolikas gali valdyti. Nurodytoje atmintyje taip pat saugomos kitų FastCGI kintamųjų reikšmės, o įrašydamas jų duomenis, užpuolikas gali sukurti fiktyvų PHP_VALUE kintamąjį ir pasiekti savo kodo vykdymą.
Šaltinis: opennet.ru