VIP
07-10-2005, 03:56 PM
السلام عليكم
ثغره من نوع Path Disclosure ومستواها متوسط وعن طريقها يستطيع المخترق معرفة دليل الموقع موجود بأي مكان على الخادم
الثغره موجوده في ملف class_core.php وبالتحديد في سطر رقم 1365
foreach ($this->superglobal_lookup AS $arrayname)
{
$registry->superglobal_size["$arrayname"] = sizeof($GLOBALS["$arrayname"]);
foreach (array_keys($GLOBALS["$arrayname"]) AS $varname)
{
unset($GLOBALS["$varname"]); <<------ تقوم بإزالة المتغيرات من المصفوفه العامه وهنا الخطأ حيث يجب ان تتأكد من المتغير قبل إزالته وكما تلاحظون لا يوجد شرط للتحقق
}
}
الترقيع:
1- افتح ملف class_core.php وابحث عن السطر التالي
unset($GLOBALS["$varname"]);
2- إستبدله بالأتي:
if( !in_array($varname, $this->superglobal_lookup ))
unset($GLOBALS["$varname"]);
3- إحفظ الملف وقم برفعه.
تحياتي لكم
من شرح أخونا
العندليب
ثغره من نوع Path Disclosure ومستواها متوسط وعن طريقها يستطيع المخترق معرفة دليل الموقع موجود بأي مكان على الخادم
الثغره موجوده في ملف class_core.php وبالتحديد في سطر رقم 1365
foreach ($this->superglobal_lookup AS $arrayname)
{
$registry->superglobal_size["$arrayname"] = sizeof($GLOBALS["$arrayname"]);
foreach (array_keys($GLOBALS["$arrayname"]) AS $varname)
{
unset($GLOBALS["$varname"]); <<------ تقوم بإزالة المتغيرات من المصفوفه العامه وهنا الخطأ حيث يجب ان تتأكد من المتغير قبل إزالته وكما تلاحظون لا يوجد شرط للتحقق
}
}
الترقيع:
1- افتح ملف class_core.php وابحث عن السطر التالي
unset($GLOBALS["$varname"]);
2- إستبدله بالأتي:
if( !in_array($varname, $this->superglobal_lookup ))
unset($GLOBALS["$varname"]);
3- إحفظ الملف وقم برفعه.
تحياتي لكم
من شرح أخونا
العندليب