السلام عليكم ورحمة الله وبركاته
في السابق وقبل مده كنت قد طرحت موضوعاً بعنوان :
أنا لست من مشجعين نسخ vbulletin 3.5 ماذا عنك أنت ؟
http://www.swalif.net/softs/showthread.php?t=157342
وكنت أريد أن اوضح في الموضوع السابق أن نظام الـ Plugins أو الـ Hooks الموجود في النسخ الجديده من الـ vbulletin خطير جداً إذا تم إستغلاله من قبل المخترق فقد يستخدمه كباب خلفي ( Back Door ) حتى يعاود الاختراق مره أخرى.
منذ مده وأنا أحاول جاهداً أن أطرح موضوعاً جديداً للنقاش ووضع الحلول المناسبه لأي خلل أصادفه ولكني خفت أن تستغل المعلومات التي نذكرها ويتضرر منها من لم يقرأ الموضوع ويتنبه لمخاطره، فكلكم يعلم أن أغلب أطفال الانترنت تقتات على ماينشر من استثمارات في أغلب مواقع الانترنت لذا أجلت طرح مثل هذه المواضيع حرصاً مني على عدم العبث بها.
في هذا الموضوع الجديد سأتطرق لخطوره شاعت منذ مده بسيطه وهي طرق ( تلغيم الإستايلات ) و ( تلغيم القوالب )
وأقصد بكلمة التلغيم أي إدخال أكواد php يتم تنفيذها داخل القالب أو داخل الإستايل وهذا لن يحدث إلا في حالتين فقط:
الأولى أن يُخترق المنتدى من قبل أحدهم وبعدها يقوم بوضع أكواده داخل أي قالب يريد ومن ثم يبدأ مسلسل العبث
الثانيه أن يقوم صاحب المنتدى بتحميل أحد الإستايلات من أشخاص غير معروفين ويتم إدخال قوالب ملغمه من هذا الإستايل في منتداه وطبعاً ستكون النتيجه كالأولى :anger1:
أسلوب التلغيم هذا ليس قاصراً فقط على برنامج الـ vBulletin فقط!!
بل يشمل جميع البرمجيات والسكربتات التي تعتمد على نظام القوالب والذي يعمل بواسطة دوال الـ php evaluate مثل دالة eval ودالة assert .
ومن هذه البرامج مايلي :
phpBB ( جميع الإصدارات )
invision power board ( جميع الإصدارات )
vbulletin ( جميع الإصدارات )
وغيرها كثير لا يحضرني في الوقت الراهن.
الحقيقه لم أطرح هذا الموضوع إلا مجبوراً خصوصا بعد إنتشار طريقة إستثمار التلغيم للأسف بين أوساط أطفال الانترنت الذي همهم الأول هو ( كيف نخرب المواقع ) وكما تعلمون يا أخواني أن أفعالهم هذه ليست إلا أفعال يغطون بها نقصاً في أنفسهم وعيباً كبيراً في تربيتهم فلا تشغلوا بالكم عن السؤال لماذا يقومون بهذه الأفعال وحاولوا متابعة الأمور التي تتعلق بأمان مواقعكم ومنتدياتكم.
كيف تعمل القوالب في هذه البرمجيات ؟
القالب عباره عن صفحة Html ( في أغلب الأحيان ) يتم تعبئتها بأسماء متغيرات php حتى يتم وضع أي جمله أو نص بدلاً من هذه المتغيرات باستخدام دوال الـ php evaluate التي أشرنا لها سابقاً.
مثال بسيط على قالب:
كود HTML:
<p color="red">بسم الله الرحمن الرحيم</p>
( $quran )
المتغير $quran يحتوي على الآيه الكريمه : ( ومن يتق الله يجعل له مخرجاً * ويرزقه من حيث لا يحتسب ومن يتوكل على الله فهو حسبه إن الله بالغ أمره قد جعل الله لكل شيءٍ قدراً )
بعد إدخال القالب السابق على أحد دوال الـ php evaluate يصبح القالب بالشكل التالي:
كود HTML:
<p color="red">بسم الله الرحمن الرحيم</p>
( ومن يتق الله يجعل له مخرجاً * ويرزقه من حيث لا يحتسب ومن يتوكل على الله فهو حسبه إن الله بالغ أمره قد جعل الله لكل شيءٍ قدراً )
أغلب البرامج التي تعتمد على القوالب طورت هذه الطريقه على أسوب ونمط مختلف فمنها مايقوم بتحميل القالب من قاعدة البيانات ومنها مايقوم بتحميل القالب من ملف يتم تخزينه في مكان محدد داخل الموقع وكل قالب يحمل إسم محدد يتم تعيينه على القالب المراد تحميله ولكن الأساليب تختلف من برنامج الى اخر كلاً حسب طريقته في البرمجه فعلى سبيل المثال منتديات الـ vbulletin بنسخ الجيل الثالث تستدعي القوالب حسب الشكل التالي:
كود PHP:
eval('$var = "' . fetch_template('template_name') . '";');
تنفيذ هذا السطر البرمجي يتم على مرحتلين
المرحله الأولى
دالة fetch_template تقوم بإستدعاء القالب المسمى template_name وتضع محتواه بين علامتي التنصيص " " ليصبح السطر حسب الشكل التالي:
كود PHP:
eval('$var = " xxxxxxxxxxxxx ";');
المرحله الثانيه
يتم تنفيذ دالة eval ويصبح متغير $var حاملاً لقيمة القالب بعد احتساب مابداخله من قيم أخرى.
مكان الخطوره:
الخطر الأول في هذا السطر البرمجي من علامات التنصيص.
فإذا قام المخترق بتحرير أحد القوالب ووضع بداخلها على سبيل المثال السطر التالي:
كود PHP:
". phpinfo() . "
فسوف يصبح السطر البرمجي السابق بعد استدعاء القالب حسب الشكل التالي:
كود PHP:
eval('$var = "". phpinfo() . "";');
وبعد أن يتم إدخال السطر في دالة eval فسوف يتم تنفيذ الداله التي وضعها المخترق phpinfo ويتم وضع محتواها داخل متغير $var !!!
علامة التنصيص والنقطه جعلت المخترق يقوم بتحوير عمل السطر البرمجي من إحتساب للقيم الموجوده بالقالب الى تنفيذ دوال يتضمنها القالب وحتى يتحقق مايريد يجب أن يستخدم التنصيص للفصل والنقطه للوصل.
وهذه مصيبه فعلا فقد بدأ الأطفال بإستغلالها بوضع أكوداهم ونشرها في الإستايلات المنتشره فأرجوا التنبه الى ذلك فعدد الأشخاص الغير معروفين الذين ينشرون الاستايلات الغير معروفه في كل مكان، والله العالم بما تحتويه هذه الإستايلات من أكواد برمجيه فلا تستخدموا استايلات من أشخاص غير معروفين.
ربما يأتي بعض المبرمجين ويستخدم دالة addslashes لعمل الترقيع لهذا السطر البرمجي قبل إدخال القالب لدالة eval وهذا خطأ كبير لأن بعض القوالب السليمه تحتوي على علامات تنصيص معطله برمز السلاش حسب التسلسل التالي "\ فاذا تم إدخالها على دالة addslashes أصبحت على التسلسل التالي "\\ وبهذا الشكل يتم تفعيل التنصيص وتظهر أخطاء في دالة eval ويتلف القالب السليم الغير ملغم.
سأتكلم عن عملية الترقيع الصحيحه لاحقاً.
الخطر الثاني من متغيرات تسمى nested_variables ( المتغيرات المتنكره ).
وفيه يتم إستدعاء متغير بإسم داله php !!!
ربما يبدو الأمر لغزاً ولكنه حقيقه مع الـ php ومرونتها العجيبه
وهذا في نظري عيب أمني كبير موجود في لغة الـ php منذ القدم ولم يتم ترقيعه حتى يومنا هذا
وعن طريقها لن يستخدم المخترق أي علامات تنصيص أو نقطه ويستخدم فيها الأقواس الخاصه { } مع علامة الـ $ أو علامة @ فمثلا:
أو
كود HTML:
{${@phpinfo()}}
لمزيداً من التفاصيل عن النوعين الدخول على الرابط التالي:
http://www.php.net/types.string
الترقيع:
الحقيقه تعبت كثيراً من إيجاد طريقه فعاله للترقيع وفي نظري أفضل ترقيع لمنتديات الـ vbulletin كالتالي:
1- إفتح ملف functions.php وابحث عن السطر التالي:
كود PHP:
return $template;
2- استبدله بالتالي:
كود PHP:
$temp = preg_replace('#[\r|\n|\s|\t|\0]#i', '', $template);
if(preg_match('#["\.|\{\$|\}\}]#i', $temp)){
$template = '';
//vbmail();
}
return $template;
3- احفظ الملف وقم برفعه.
طريقة الترقيع تكمن في فحص القالب بعد إزالة المسافات والعلامات الأخرى التي تستخدم في الكتابه فإذا وجد في القالب أياً من العلامات الخطيره التي أشرنا لها في المخاطر السابقه فسوف يقوم الكود بتفريغ محتوى القالب ويتم الرجوع الى دالة eval بقالب فارغ.
الترقيع يعمل معي على نسخ 3.0 ولم أقم بتجربته على النسخ الجديده وأتمنى تجربته وإبداء أرائكم حوله.
إحتياطات أمنيه في الوقت الراهن:
1- أنصح الجميع كافه بمختلف انواع المنتديات فحص قوالبهم حول ماذكرناها.
2- مخاطبة المستضيفين لتركيب ترقيعة الـ php الشهيره Suhosin Patch+Suhosin Extension وبإمكانهم الحصول عليها من الرابط التالي:
http://www.hardened-php.net/suhosin/index.html
أعذروني على الإطاله وقلة المشاركه وأرجوا إثراء الموضوع بالنقاش البناء.
أخوكم المحب
العندليب