این حمله در پیکربندیهای 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