Serangan itu mungkin dalam konfigurasi nginx di mana pemajuan ke PHP-FPM dijalankan dengan mengasingkan bahagian URL menggunakan "fastcgi_split_path_info" dan mentakrifkan pembolehubah persekitaran PATH_INFO, tetapi tanpa terlebih dahulu menyemak kewujudan fail menggunakan "try_files $fastcgi_script_name" arahan atau "jika (!-f $) document_root$fastcgi_script_name)". Masalahnya juga
lokasi ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Anda boleh menjejaki penyelesaian masalah dalam kit pengedaran pada halaman ini:
try_files $fastcgi_script_name =404;
Masalahnya disebabkan oleh ralat semasa memanipulasi penunjuk dalam fail
Jika arahan fastcgi_split_path_info menentukan pembahagian laluan skrip menggunakan ungkapan biasa sensitif baris baharu (contohnya, banyak contoh mencadangkan menggunakan "^(.+?\.php)(/.*)$"), maka penyerang boleh memastikan bahawa nilai kosong ditulis kepada pembolehubah persekitaran PATH_INFO. Dalam kes ini, lebih jauh di sepanjang pelaksanaan
Dengan meminta URL yang diformatkan dengan cara tertentu, penyerang boleh mencapai peralihan penuding path_info kepada bait pertama struktur "_fcgi_data_seg" dan menulis sifar pada bait ini akan membawa kepada pergerakan "char* pos" penunjuk ke kawasan memori yang terletak sebelum ini. Yang seterusnya dipanggil FCGI_PUTENV akan menulis ganti data dalam memori ini dengan nilai yang boleh dikawal oleh penyerang. Memori yang ditentukan juga menyimpan nilai pembolehubah FastCGI yang lain, dan dengan menulis data mereka, penyerang boleh mencipta pembolehubah PHP_VALUE rekaan dan mencapai pelaksanaan kod mereka.
Sumber: opennet.ru