[CENTER][IMG]http://amrmekkawy.com/blog/wp-content/uploads/2009/10/php-logo.jpg[/IMG] السلام عليكم درس معتقدش شوفته فى منتدى عربى قبل كده نوع بسيط من الثغرات لكن قوى نوعا بيعتمد على الـ[COLOR="Blue"]Register_globals[/COLOR] خطورة الثغره دى انها ممكن تتعامل بيها فى السيشون تبع البى اتش بى او الكوكيز او البوست اى حاجه هههه [COLOR="red"]مثال بسيط [/COLOR][PHP]
username:


Password:


[/PHP] كود بيتأكد من اليوزر والباسوورد لو صح الاتنين بيضيف باراميتر اسمه loggedin وبعدين بعد كده السكربت بيتأكد اذا الباراميتر loggedin موجود بيكتب logged in successfully اذا مش موجود الباراميترloggedin بيطبع error ايه المشكله؟؟ المشكله انو لو الـ register_global = on بيقدر اى مستخدم يضيف الباراميتر loggedin يدوى زى كده مثلا [COLOR="blue"]vuln.php?loggedin=whatever [/COLOR]جرب كده هتلاقى طبع لك logged in من غير ما تكتب يوزر وباس مثال للثغره دى [COLOR="blue"]ثغرة الـwhmcs [/COLOR]http://www.exploit-db.com/exploits/17999/ مثال آخر لتنفيذ الثغره فى [COLOR="Red"]السيشون [/COLOR]ودى [COLOR="red"]خطيره [/COLOR]جدا [PHP]{$_SESSION['admin']}
You are in admin panel"; } else { echo "Not logged in :)"; } ?>[/PHP] بتشوف السيشون تبع الادمن لو موجود فيها المتغير admin ايا كانت قيمته بقى بتدخلك اللوحه زى الفل لو مش موجود بيانات الادمن فى السيشون بتطبع لك not logged in اوك ازاى نستغلها؟؟ ببساطه شديده [COLOR="Blue"]reg.php?_SESSION[admin]=fa [/COLOR]هتلاقيه طبع رسالة الترحيب وكله تمام على فكره سكربتات كتير بتستخدم طريقة السيشون دى فى التأكد من ان المستخدم داخل اللوحه :) مثال للتطبيق [url]http://sourceforge.net/projects/ananta/files/stable/Gazelle%201.0%20stable/Ananta_Gazelle1.0.zip/download[/url] [COLOR="Red"]كيفية الحمايه من الثغره؟ [/COLOR] [COLOR="red"]الحل الأول [/COLOR] تعديل ملف الـphp.ini ابحث عن register_global وخليها register_globals = Off [COLOR="Red"]الحل التانى [/COLOR]فى السكربت تبعك تخلى الديفولت او الوضع العادى تبع السكربت انو يكون الباراميتر ده ملغى يعنى يكون loggedin=false مثال [PHP]
username:


Password:


[/PHP] كل اللى عملناه ضفنا السطر $loggedin = false; بكده الباراميتر ده مش هيتفعل ويكون true غير اما المستخدم يكتب اليوزر والباسوورد صح [COLOR="red"]الحل الثالث [/COLOR]بسيط ويوفر وقت [PHP]function unregister_globals() { if (!ini_get('register_globals')) { return false; } foreach (func_get_args() as $name) { foreach ($GLOBALS[$name] as $key=>$value) { if (isset($GLOBALS[$key])) unset($GLOBALS[$key]); } } } unregister_globals('_POST', '_GET', '_COOKIE', '_REQUEST', '_SERVER', '_ENV', '_FILES');[/PHP] حط الكود ده فى اى ملف بتعمل له انكلود فى السكربت تبعك وبتكون فى امان من المشكله دى :) اى استفسار موجود ان شاء الله بالتوفيق للجميع Faris/.[/CENTER]