Հարձակումը հնարավոր է 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 փոփոխական և հասնել իր կոդի կատարմանը:
Source: opennet.ru