في شروحات سابقه تناولنا إستغلال ثغرات Sql injection ولكن لم نتطرق إلا إكتشافها , إن شاء الله في هذا المقال سوف نشرح كيفية إكتشاف هذه الثغرات بطريقتين الأولى Black Box و الثانية White Box أي اننا سوف نتطرق لإكشتافها بإستخدام أدوات وبعض الامور التي يستخدمها الهاكر الحقيقي وأيضاً سوف نحاول إختراقها وإكتشاف الثغره من خلال الإطلاع على سورس كود السكربت.

 

في البداية لنأتي لتعريف ثغرات Sql injection :- وهي ثغرات تحدث في حال إدخال متغير ما على إستعلام (query) للغة قواعد البيانات mysql ومن ثم توجيه إستعلامات مخصصه لإستغلال مثل هذه الثغرات لنحصل على الهدف النهائي وهو إستخراج المعلومات من قاعدة البيانات بشكل كامل و  غير شرعي , ويوجد للثغرة عدة لنذكر إثنين منها : –

  1. error based sql injection
  2. blind sql injection

في النوع الأول يكون إستغلال الثغرة ميسر ومن دون اي مشاكل وبسرعه تامه.

اما في النوع الثاني تكون المشاكل في تخمين إسم ونوع الجداول والصفوف مما يؤدي إلا تأخر العمليه (ولكنها تتم بالنهاية).

ومن الجدير بالذكر أيضاً أن هذه الثغرات تستهدف الكثير من اللغات البرمجية مثل php , java , asp , aspx.

حسناً  .. لنبدء في طريقة White Box والتي سوف نقوم بشرح أكودا الثغرة المكتوبه بلغة Php بالإعتماد على لغة Mysql

نلاحظ في الصورة السابقه ولنشرح المكونات : –

  1. السكربت يعمل إدراج لملف config.php والذي يتصل بدورة بقواعد البيانات.
  2. السطر رقم 5 نلاحظ تعريف المتغير name بالقيمه المدخله من نوع POST والتي تتمثل بالحقل name.
  3. بالسطر رقم 7 نلاحظ عمل إستعلام (mysql query ) والذي يحاول إختيار جميع الحقول الموجوده في الجدول name ومطابقتها مع المتغير.
  4. بالسطر رقم 14 نشاهد عنوان ومعلومات النموذج (form) وهي قيمه POST كوسيلة لإرسال البيانات ومعالجتها بملف index.php.

لنأتي الأن لشرح تفاصيل الثغرة ومعرفة كيفية حدوثها , نشاهد أن المتغير لم يفلتر ولم يحدد ما هو من قبل المبرمج لذلك يسمع بإدخال جميع الأوامر والتعابير إلى الإستعلام مما يمكن حقن كود يؤدي لحدوث خطأ ينتج عنه ثغرة sql injection يؤدي إلى إستخراج جميع المعلومات الموجوده في خادم قواعد البيانات. هكذا نكون فسرنا الكود وإكتشفنا الثغرة الموجوده بالسكربت بكل سهوله من خلال قرأة المدخلات والتحقق من عدم فلترتها.

الأن لنأتي إلى إستكشاف الصفحه ومن ثم محاولة إستغلال الثغرة, لنلقي الأن نظرة على الفورم من خلال هذه الصورة :-

نلاحظ وجود فورم بسيط , لنحاول إدخال أي قيمه لنلاحظ ان الفورم لم يحرك ساكن ! ممتاز لنحاول الأن إدخال علامه (‘) single quote ومن ثم ملاحظه ما سوف يحدث من خلال هذه الصورة :-

ممتاز ! رأينا الأن أن هنالك خطأ حدث في قواعد البيانات وهذا ما أظهره الخطأ وبهذا نكون قد تأكدنا من وجود ثغرة Sql injection موجوده في السكربت.

لنأتي الأن لإستغلال الثغرة وإستخراج المعلومات من خلال برنامج Sqlmap ولنطبق ما في الصورة وسوف أشرحه بالتفصيل :-

لقد قمنا بتشغل البرنامج من خلال الأمر ./ sqlmap.py ومن ثم حددنا الهدف من خلال الأمر -u ومن ثم حددنا الخيار forms لإستكشاف جميع الحقول الموجوده في الصفحه وأخيراً الامر dbs لإستخراج قواعد البيانات في حال حدوث خطأ.

ملاحظه (سوف يكون هنالك بعض الخيارات التي تظهر بعد تنفيذ العملية والتي لا داعي لشرحها).

ممتاز الأن لنرى نتيجه تطبيق الأمر

رائع ! لقد لاحظنا أنه تم إستغلال الثغرة بنجاح وإستخراج جميع القواعد الموجوده في خادم قواعد البيانات, ويمكنك إستغلال الثغرة بشكل متقدم من خلال هذا الشرح السابق.

أتمنى أن يكون هذا الشرح مفيد للبعض رغم بساطته وإن شاء الله سوف يكون هنالك شروحات مستمره لجميع ثغرات تطبيقات الويب ايضا يمكنكم الاطلاع على الدورة الخاصة بأختبار تطبيقات الويب المقدمه من مركز تدريبات iSecur1ty