حملہ nginx کنفیگریشنز میں ممکن ہے جس میں PHP-FPM میں فارورڈنگ "fastcgi_split_path_info" کا استعمال کرتے ہوئے URL کے حصوں کو تقسیم کرکے اور PATH_INFO ماحولیاتی متغیر کی وضاحت کے ذریعے کیا جاتا ہے، لیکن پہلے "try_files $fastcgi_script_name" کے ساتھ فائل کی موجودگی کی جانچ کیے بغیر۔ ہدایت یا "if (!-f $ document_root$fastcgi_script_name)"۔ سمیت مسئلہ
مقام ~ [^/]\.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 ماحولیاتی متغیر پر خالی قیمت لکھ کر حاصل کر سکتا ہے۔ اس صورت میں، مزید پھانسی کے ساتھ ساتھ
ایک مخصوص طریقے سے فارمیٹ کیے گئے یو آر ایل کی درخواست کرنے سے، حملہ آور path_info پوائنٹر کو "_fcgi_data_seg" ڈھانچے کے پہلے بائٹ میں منتقل کر سکتا ہے، اور اس بائٹ پر صفر لکھنے سے "char * pos" پوائنٹر کو پہلے جانے والے میموری ایریا میں منتقل کر دیا جائے گا۔ اگلا کہا جانے والا FCGI_PUTENV اس میموری میں موجود ڈیٹا کو اس قدر کے ساتھ اوور رائٹ کر دے گا جسے حملہ آور کنٹرول کر سکتا ہے۔ مخصوص میموری دیگر FastCGI متغیرات کی قدروں کو بھی ذخیرہ کرتی ہے، اور ان کے ڈیٹا کو لکھ کر حملہ آور ایک ڈمی PHP_VALUE متغیر بنا سکتا ہے اور اپنے کوڈ پر عمل درآمد حاصل کر سکتا ہے۔
ماخذ: opennet.ru