ثغرة SQL Injection في منتديات MyBB 1.4.6
انتشر بتاريخ اليوم استغلال لثغرة SQL Injection اكتشفت في جميع الاصدارات قبل 1.4.6 من منتديات MyBB المفتوحة المصدر. تم برمجة الاستغلال بطريقة تمكن المهاجم من زرع ملف php shell في السيرفر بكل سهولة ليصبح بالنهاية قادر على تنفيذ أوامر على السيرفر.
الاستغلال يبدء SQL Injection وينتهي Remote Code Execution! شخصيا أجدها طريقة جميلة لتطوير استغلال ثغرات SQL Injection ومن النادر أن أجد استغلالات برمجت بهذه الطريقة.
بالنسبة لسبب الثغرة فيعود لخطأ برمجي في الملف: inc/datahandlers/user.php عند تمرير المتغير birthdayprivacy وعدم التأكد من مدخلات المستخدم بطريقة صحيحة
لو اطلعنا على الملف user.php في الاصدار 1.4.6 سنلاحظ بالسطر 1111 تمرير المتغير birthdayprivacy دون التأكد من مدخلات المستخدم بأي شكل كان:
$this->user_update_data[‘birthdayprivacy’] = $user[‘birthdayprivacy’];أما في الاصدار 1.4.7 سنرى بنفس السطر الترقيع وهو استخدام الدالة escape_string لكي لا يتمكن المهاجم من حقن استعلام SQL آخر عند تمرير المتغير السابق للاستعلام الأصلي.
$this->user_update_data[‘birthdayprivacy’] = $db->escape_string($user[‘birthdayprivacy’]);الغريب في الموضوع اكتشاف ثغرة بسبب خطأ بهذه البساطة (المفروض أول شيء يتعلمه مبرمج php عند التعامل مع مدخلات المستخدم هو التأكد منها فكيف اذا كان التعامل مع مدخلات مستخدم سيتم تمريرها لقواعد بيانات!!) في سكريبت منتديات يمكننا القول أنه حقق شهرة لا بأس بها وزاد من ذلك “تفنن” المكتشف ببرمجة استغلال يزيد حجمه عن 400 سطر!
الجدير بالذكر أنه تم اصلاح الثغرة بالاصدار 1.4.7 الذي صدر مسبقا بتاريخ 15 من الشهر الحالي ويمكن تحميله من هنا.
للاطلاع على الاستغلال: Milw0rm 9001
يعطيكم الف عافيه….
من جد غريب يعدي شي زي كدا على مبرمج يمرر شي للداتابيس بدون مايشيك عليه.
تحياتي
شـكــ وبارك الله فيك ـــرا لك … لك مني أجمل تحية .