Hujum nginx konfiguratsiyalarida mumkin, bunda PHP-FPM ga yoʻnaltirish URL qismlarini “fastcgi_split_path_info” yordamida ajratish va PATH_INFO muhit oʻzgaruvchisini aniqlash orqali amalga oshiriladi, lekin avval “try_files $fastcgi_script_name” yordamida fayl mavjudligini tekshirmasdan turib. direktivasi yoki “if (!-f $) document_root$fastcgi_script_name)”. Muammo ham
joy ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php: 9000;
}
Siz ushbu sahifalardagi tarqatish to'plamlarida muammoning echimini kuzatishingiz mumkin:
try_files $fastcgi_script_name =404;
Muammo fayldagi ko'rsatkichlarni boshqarishda xatolik tufayli yuzaga keladi
Agar fastcgi_split_path_info direktivasi yangi qatorga sezgir muntazam ifoda yordamida skript yo'lini ajratishni belgilasa (masalan, ko'p misollar "^(.+?\.php)(/.*)$" dan foydalanishni taklif qiladi), u holda tajovuzkor bo'sh qiymat PATH_INFO muhit o'zgaruvchisiga yoziladi. Bu holda, ijro davomida yanada
Muayyan tarzda formatlangan URL manzilini so'rash orqali tajovuzkor path_info ko'rsatkichini "_fcgi_data_seg" strukturasining birinchi baytiga o'tkazishga erishishi mumkin va bu baytga nol yozish "char* pos" ning harakatiga olib keladi. avval joylashgan xotira maydoniga ko'rsatgich. Keyingi FCGI_PUTENV deb nomlangan ushbu xotiradagi ma'lumotlarni tajovuzkor boshqarishi mumkin bo'lgan qiymat bilan qayta yozadi. Belgilangan xotira boshqa FastCGI o'zgaruvchilari qiymatlarini ham saqlaydi va ularning ma'lumotlarini yozish orqali tajovuzkor xayoliy PHP_VALUE o'zgaruvchisini yaratishi va o'z kodining bajarilishiga erishishi mumkin.
Manba: opennet.ru