بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاتة
كنت قد كتبت في مدونتي www.pentestlabs.com/lab منذ مدة مقالة عن ثغرات ال Session fixation وانقلها الان اليكم وهو شرح مفصل لهذا النوع من الثغرات
رابط المقالة هنا
........... المقالة .............
الفهرس :
* ماهي ال Session ؟
* ماذا يستفيد المهاجم من هذا النوع من الثغرات ؟
* ديناميكية عمل الثغرة .
* طريقة اكتشاف الثغرة من الكود و طريقة الترقيع السليم .
* مدى خطورة هذا النوع ؟
ماهي ال Session ؟
هي خاصية تقدمها لغات برمجة تطبيقات الويب تساعد على حماية المستخدم من العابثين عن طريق جعل بيانات المستخدم ( إسم المستخدم و كلمة المرور وو .. الخ ) محفوظة في ذاكرة الخادم وتجعل لكل مستخدم Session خاص به .
ماذا يستفيد المهاجم من هذا النوع من الثغرات ؟
هذا النوع من الثغرات يمكن المهاجم من الدخول الى حسابات المستخدمين الخاصة مما يؤدي ذلك الى ضرر كبير على المستخدم .
ديناميكية عمل الثغرة :
أنظر الى الصورة التالية وتابع

1- يقوم المهاجم في البداية بالدخول الى صفحة اللوجن
2- يقوم المهاجم بأخذ Session id وهو 1122 وقد تم تخزينة الان تاكد المهاجم من وجود ثغرة
3- يقوم المهاجم بارسال رابط ال session id المزيف الى الضحيه
4- يقوم الضحيه بفتحه
5- يقوم الضحيه بالدخول باليوزر النيم والباسوورد الخاص به
6- يقوم المهاجم بطلب ال Session ID المزيف ثانية من الخادم
والان قد تم دخول المهاجم الى حساب الضحيه بنجاح ،،
اذن المصيبه في السكربتات التي بها ثغرة session fixation انه يمكن تعديل ال session الى اي session تريده وتستطيع ان تلعب بالمستخدمين ،،
اذن ببساطة اكثر :
يقوم المهاجم بإكتشاف ثغرة Session fixation ثم يقوم بعمل طلب ل session id من صنعه وليكن 123456 ومن ثم يقوم بارسالة الى الضحيه ثم يقوم الضحيه بفتح الرابط ويقوم بالدخول الي حسابه وفي نفس الوقت يقوم المهاجم بالدخول على نفس ال session id الذي صنعه وارسله الى الضحيه وهو 123456 ومن ثم يجد نفسه داخل لوحة تحكم الضحيه ..
هذه طريقة هناك طريقة اخرى للمهاجم وهي عن طريق ال Cookies وهي كالتالي انظر الصورة
حسنا يمكن للمهاجم ان يقوم بهذه العملية عن طريق ثغرات XSS
مثال :
انظر الى الصورة الاتية

1- يقوم المهاجم بارسال الرابط الى الضحيه
2- يقوم الضحيه بطلب الرابط من الخادم
3- يخزن لديه ال session id الاتي 123456 الذي قام بوضعه المهاجم
4- يقوم الضحيه بالدخول الى حسابه
5- يقوم المهاجم بالدخول الى Session ID المزيف ومن ثم يقوم بالدخول الى حساب الضحيه
هذه ايضا طريقة من طرق التحايل عن طريق ثغرات ال Session Fixation .
طريقة اكتشاف الثغرة من الكود و طريقة الترقيع السليم :
كما نعلم ان ال Session بيتم تخزينها في السيرفر حسنا لنقوم بانشاء ملف ولنسميه vuln.php وضع به الكود التالي
<?php
session_start();
$_SESSION['account'] = ‘hazem’;
?>
حسنا قم بتشغيل الملف لديك على ال localhost ثم قم بتنفيذ هذا الرابط localhost/vuln.php?PHPSESSID=123456
حسنا الان قم بعمل ملف اخر وسميه fix.php وضع به الاتي
session_start();
if (isset($_SESSION['account']) )
{
echo $_SESSION['account'];
}
?>
<?php
الان لنقم بتنفيذ الرابط التالي localhost/fix.php?PHPSESSID=123456
حسنا ماذا وجدت ؟؟
وجدت اسم hazem اي يعني انه قد تم الدخول الى ال session id طبعا يجب ان تكون لك خبرة بسيطه في استخدام ال SESSION في PHP
إذن الحل الامثل لسد هذا النوع هو ان تقوم بعمل regenrate session عن طريق دالة SESSION_REGENRATE_ID();
وهذا مثال
<?php
session_start();
if (!isset($_SESSION['account']))
{
session_regenerate_id();
$_SESSION['account'] = TRUE;
}
?>
وعلى هذا النحو يمكنك ان تقوم بسد ثغرات ال Session Fixation بمنتهى البساطة ..
مامدى خطورة هذا النوع:
الخطورة : عالية ، وبكل بساطة لأن اذا قام المهاجم بتنفيذ هذا النوع من الثغرات فسوف يتمكن من الدخول الى حسابات بنكية و اخرى شخصية ووو .. الخ
هذا شرح مبسط عن ثغرات session fixation ،، بإمكانك طرح الاسئلة
pentestlabs
Hazem Mofeed


